fune/testing/web-platform/tests/streams/writable-streams/start.js
James Graham b598a77d59 Bug 1363982 - Update web-platform-tests to revision db6ed4bb451e44748cbb9af69d0a01c17a33571a a=testonly
MozReview-Commit-ID: KjIquC2PKKI


--HG--
rename : testing/web-platform/tests/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.html => testing/web-platform/tests/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https.html
rename : testing/web-platform/tests/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.html => testing/web-platform/tests/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https.html
rename : testing/web-platform/tests/WebCryptoAPI/derive_bits_keys/test_hkdf.html => testing/web-platform/tests/WebCryptoAPI/derive_bits_keys/test_hkdf.https.html
rename : testing/web-platform/tests/WebCryptoAPI/digest/test_digest.html => testing/web-platform/tests/WebCryptoAPI/digest/test_digest.https.html
rename : testing/web-platform/tests/WebCryptoAPI/encrypt_decrypt/test_aes_cbc.html => testing/web-platform/tests/WebCryptoAPI/encrypt_decrypt/test_aes_cbc.https.html
rename : testing/web-platform/tests/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.html => testing/web-platform/tests/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.https.html
rename : testing/web-platform/tests/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.html => testing/web-platform/tests/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.https.html
rename : testing/web-platform/tests/WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.html => testing/web-platform/tests/WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_aes-cbc.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_aes-cbc.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_aes-ctr.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_aes-ctr.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures_AES-CBC.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures_AES-CBC.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures_AES-CTR.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures_AES-CTR.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures_AES-GCM.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures_AES-GCM.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures_AES-KW.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures_AES-KW.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures_ECDH.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures_ECDH.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures_ECDSA.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures_ECDSA.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures_HMAC.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures_HMAC.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures_RSA-OAEP.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures_RSA-OAEP.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures_RSA-PSS.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures_RSA-PSS.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_successes_AES-CBC.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_successes_AES-CBC.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_successes_AES-CTR.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_successes_AES-CTR.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_successes_AES-GCM.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_successes_AES-GCM.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_successes_AES-KW.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_successes_AES-KW.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_successes_ECDH.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_successes_ECDH.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_successes_ECDSA.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_successes_ECDSA.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_successes_HMAC.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_successes_HMAC.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_successes_RSA-PSS.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_successes_RSA-PSS.https.html
rename : testing/web-platform/tests/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.html => testing/web-platform/tests/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.https.html
rename : testing/web-platform/tests/WebCryptoAPI/import_export/test_ec_importKey.html => testing/web-platform/tests/WebCryptoAPI/import_export/test_ec_importKey.https.html
rename : testing/web-platform/tests/WebCryptoAPI/import_export/test_rsa_importKey.html => testing/web-platform/tests/WebCryptoAPI/import_export/test_rsa_importKey.https.html
rename : testing/web-platform/tests/WebCryptoAPI/import_export/test_symmetric_importKey.html => testing/web-platform/tests/WebCryptoAPI/import_export/test_symmetric_importKey.https.html
rename : testing/web-platform/tests/WebCryptoAPI/sign_verify/test_ecdsa.html => testing/web-platform/tests/WebCryptoAPI/sign_verify/test_ecdsa.https.html
rename : testing/web-platform/tests/WebCryptoAPI/sign_verify/test_hmac.html => testing/web-platform/tests/WebCryptoAPI/sign_verify/test_hmac.https.html
rename : testing/web-platform/tests/WebCryptoAPI/sign_verify/test_rsa_pkcs.html => testing/web-platform/tests/WebCryptoAPI/sign_verify/test_rsa_pkcs.https.html
rename : testing/web-platform/tests/WebCryptoAPI/sign_verify/test_rsa_pss.html => testing/web-platform/tests/WebCryptoAPI/sign_verify/test_rsa_pss.https.html
rename : testing/web-platform/tests/WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.html => testing/web-platform/tests/WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.https.html
rename : testing/web-platform/tests/html/browsers/windows/browsing-context-names/browsing-context-_blank.html => testing/web-platform/tests/html/browsers/windows/browsing-context-names/choose-_blank-001.html
rename : testing/web-platform/tests/html/browsers/windows/browsing-context-names/resources/parent-iframe-3.html => testing/web-platform/tests/html/browsers/windows/browsing-context-names/resources/choose-_parent-003-iframe.html
rename : testing/web-platform/tests/html/browsers/windows/browsing-context-names/resources/parent-iframe-2.html => testing/web-platform/tests/html/browsers/windows/browsing-context-names/resources/open-in-_parent.html
rename : testing/web-platform/tests/presentation-api/receiving-ua/support/idlharness_receiving-ua.https.html => testing/web-platform/tests/presentation-api/receiving-ua/support/idlharness_receiving-ua.html
rename : testing/web-platform/tests/tools/LICENSE => testing/web-platform/tests/tools/wptrunner/LICENSE
rename : testing/web-platform/tests/auxclick/auxclick_event-manual.html => testing/web-platform/tests/uievents/auxclick/auxclick_event-manual.html
rename : testing/web-platform/tests/webrtc/rtcpeerconnection/rtcconfiguration-icecandidatepoolsize.html => testing/web-platform/tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html
rename : testing/web-platform/tests/webrtc/rtcpeerconnection/rtcpeerconnection-constructor.html => testing/web-platform/tests/webrtc/RTCPeerConnection-constructor.html
rename : testing/web-platform/tests/webrtc/rtcpeerconnection/iceGatheringState.html => testing/web-platform/tests/webrtc/RTCPeerConnection-iceGatheringState.html
rename : testing/web-platform/tests/webrtc/rtcpeerconnection/rtcpeerconnection-idl.html => testing/web-platform/tests/webrtc/RTCPeerConnection-idl.html
2017-05-11 18:01:46 +01:00

168 lines
5.2 KiB
JavaScript

'use strict';
if (self.importScripts) {
self.importScripts('/resources/testharness.js');
self.importScripts('../resources/test-utils.js');
self.importScripts('../resources/recording-streams.js');
}
const error1 = { name: 'error1' };
promise_test(() => {
let resolveStartPromise;
const ws = recordingWritableStream({
start() {
return new Promise(resolve => {
resolveStartPromise = resolve;
});
}
});
const writer = ws.getWriter();
assert_equals(writer.desiredSize, 1, 'desiredSize should be 1');
writer.write('a');
assert_equals(writer.desiredSize, 0, 'desiredSize should be 0 after writer.write()');
// Wait and verify that write isn't called.
return flushAsyncEvents()
.then(() => {
assert_array_equals(ws.events, [], 'write should not be called until start promise resolves');
resolveStartPromise();
return writer.ready;
})
.then(() => assert_array_equals(ws.events, ['write', 'a'],
'write should not be called until start promise resolves'));
}, 'underlying sink\'s write should not be called until start finishes');
promise_test(() => {
let resolveStartPromise;
const ws = recordingWritableStream({
start() {
return new Promise(resolve => {
resolveStartPromise = resolve;
});
}
});
const writer = ws.getWriter();
writer.close();
assert_equals(writer.desiredSize, 1, 'desiredSize should be 1');
// Wait and verify that write isn't called.
return flushAsyncEvents().then(() => {
assert_array_equals(ws.events, [], 'close should not be called until start promise resolves');
resolveStartPromise();
return writer.closed;
});
}, 'underlying sink\'s close should not be called until start finishes');
test(() => {
const passedError = new Error('horrible things');
let writeCalled = false;
let closeCalled = false;
assert_throws(passedError, () => {
// recordingWritableStream cannot be used here because the exception in the
// constructor prevents assigning the object to a variable.
new WritableStream({
start() {
throw passedError;
},
write() {
writeCalled = true;
},
close() {
closeCalled = true;
}
});
}, 'constructor should throw passedError');
assert_false(writeCalled, 'write should not be called');
assert_false(closeCalled, 'close should not be called');
}, 'underlying sink\'s write or close should not be called if start throws');
promise_test(() => {
const ws = recordingWritableStream({
start() {
return Promise.reject();
}
});
// Wait and verify that write or close aren't called.
return flushAsyncEvents()
.then(() => assert_array_equals(ws.events, [], 'write and close should not be called'));
}, 'underlying sink\'s write or close should not be invoked if the promise returned by start is rejected');
promise_test(t => {
const ws = new WritableStream({
start() {
return {
then(onFulfilled, onRejected) { onRejected(error1); }
};
}
});
return promise_rejects(t, error1, ws.getWriter().closed, 'closed promise should be rejected');
}, 'returning a thenable from start() should work');
promise_test(t => {
const ws = recordingWritableStream({
start(controller) {
controller.error(error1);
}
});
return promise_rejects(t, error1, ws.getWriter().write('a'), 'write() should reject with the error')
.then(() => {
assert_array_equals(ws.events, [], 'sink write() should not have been called');
});
}, 'controller.error() during start should cause writes to fail');
promise_test(t => {
let controller;
let resolveStart;
const ws = recordingWritableStream({
start(c) {
controller = c;
return new Promise(resolve => {
resolveStart = resolve;
});
}
});
const writer = ws.getWriter();
const writePromise = writer.write('a');
const closePromise = writer.close();
controller.error(error1);
resolveStart();
return Promise.all([
promise_rejects(t, error1, writePromise, 'write() should fail'),
promise_rejects(t, error1, closePromise, 'close() should fail')
]).then(() => {
assert_array_equals(ws.events, [], 'sink write() and close() should not have been called');
});
}, 'controller.error() during async start should cause existing writes to fail');
promise_test(t => {
const events = [];
const promises = [];
function catchAndRecord(promise, name) {
promises.push(promise.then(t.unreached_func(`promise ${name} should not resolve`),
() => {
events.push(name);
}));
}
const ws = new WritableStream({
start() {
return Promise.reject();
}
}, new CountQueuingStrategy({ highWaterMark: 0 }));
const writer = ws.getWriter();
catchAndRecord(writer.ready, 'ready');
catchAndRecord(writer.closed, 'closed');
catchAndRecord(writer.write(), 'write');
return Promise.all(promises)
.then(() => {
assert_array_equals(events, ['ready', 'write', 'closed'], 'promises should reject in standard order');
});
}, 'when start() rejects, writer promises should reject in standard order');
done();