This is a testharness.js-based test.
FAIL a signal argument 'null' should cause pipeTo() to reject assert_throws: pipeTo should reject function "function() { throw e }" threw "failed to abort" with type "string", not an object
FAIL a signal argument 'AbortSignal' should cause pipeTo() to reject assert_throws: pipeTo should reject function "function() { throw e }" threw "failed to abort" with type "string", not an object
FAIL a signal argument 'true' should cause pipeTo() to reject assert_throws: pipeTo should reject function "function() { throw e }" threw "failed to abort" with type "string", not an object
FAIL a signal argument '-1' should cause pipeTo() to reject assert_throws: pipeTo should reject function "function() { throw e }" threw "failed to abort" with type "string", not an object
FAIL a signal argument '[object AbortSignal]' should cause pipeTo() to reject assert_throws: pipeTo should reject function "function() { throw e }" threw "failed to abort" with type "string", not an object
FAIL an aborted signal should cause the writable stream to reject with an AbortError assert_throws: pipeTo should reject function "function() { throw e }" threw "failed to abort" with type "string", not an object
FAIL all the AbortError objects should be the same object promise_test: Unhandled rejection with value: "failed to abort"
FAIL preventCancel should prevent canceling the readable assert_throws: pipeTo should reject function "function() { throw e }" threw "failed to abort" with type "string", not an object
FAIL preventAbort should prevent aborting the readable assert_throws: pipeTo should reject function "function() { throw e }" threw "failed to abort" with type "string", not an object
FAIL abort should prevent further reads assert_unreached: Should have rejected: pipeTo should reject Reached unreachable code
FAIL all pending writes should complete on abort assert_unreached: Should have rejected: pipeTo should reject Reached unreachable code
FAIL a rejection from underlyingSource.cancel() should be returned by pipeTo() assert_throws: pipeTo should reject function "function() { throw e }" threw "failed to abort" with type "string", not an object
PASS a rejection from underlyingSink.abort() should be returned by pipeTo()
FAIL a rejection from underlyingSink.abort() should be preferred to one from underlyingSource.cancel() assert_array_equals: abort() should be called before cancel() lengths differ, expected 2 got 1
FAIL abort signal takes priority over closed readable assert_unreached: Should have rejected: pipeTo should reject Reached unreachable code
FAIL abort signal takes priority over errored readable assert_throws: pipeTo should reject function "function() { throw e }" threw object "error1: error1" that is not a DOMException AbortError: property "code" is equal to undefined, expected 20
FAIL abort signal takes priority over closed writable assert_throws: pipeTo should reject function "function() { throw e }" threw object "TypeError: Destination stream closed" that is not a DOMException AbortError: property "code" is equal to undefined, expected 20
FAIL abort signal takes priority over errored writable assert_throws: pipeTo should reject function "function() { throw e }" threw object "error1: error1" that is not a DOMException AbortError: property "code" is equal to undefined, expected 20
PASS abort should do nothing after the readable is closed
PASS abort should do nothing after the readable is errored
PASS abort should do nothing after the readable is errored, even with pending writes
PASS abort should do nothing after the writable is errored
Harness: the test ran to completion.

