blob: 1243994dae11ab35ed9b0d0b81d67ce5a34c0ffd [file] [log] [blame]
<!DOCTYPE html>
<script src='../../resources/testharness.js'></script>
<script src='../../resources/testharnessreport.js'></script>
<script src='resources/streams-utils.js'></script>
<script>
// This is updated till https://github.com/whatwg/streams/commit/4ba861e6f60c248060811830e11271c84b439cc3
function fakeWritableStream() {
return {
get closed() { return Promise.resolve(); },
get ready() { return Promise.resolve(); },
get state() { return 'closed' },
abort(reason) { return Promise.resolve(); },
close() { return Promise.resolve(); },
write(chunk) { return Promise.resolve(); }
};
}
function realReadableStream() {
return new ReadableStream();
}
function getterRejects(test, obj, getterName, target, endTest) {
var getter = Object.getOwnPropertyDescriptor(obj, getterName).get;
getter.call(target).then(
test.step_func(function() { assert_unreached(getterName + ' should not fulfill'); }),
test.step_func(function(e) {
assert_throws(new TypeError(), function() { throw e; }, getterName + ' should reject with a TypeError');
if (endTest === true) {
test.done();
}
}));
}
function methodRejects(test, obj, methodName, target, endTest) {
var method = obj[methodName];
method.call(target).then(
test.step_func(function() { assert_unreached(methodName + ' should not fulfill'); }),
test.step_func(function(e) {
assert_throws(new TypeError(), function() { throw e; }, methodName + ' should reject with a TypeError');
if (endTest === true) {
test.done();
}
}));
}
function getterThrows(obj, getterName, target) {
var getter = Object.getOwnPropertyDescriptor(obj, getterName).get;
assert_throws(new TypeError(), function() { getter.call(target); }, getterName + ' should throw a TypeError');
}
var test1 = async_test('WritableStream.prototype.closed enforces a brand check');
test1.step(function() {
getterRejects(test1, WritableStream.prototype, 'closed', fakeWritableStream());
getterRejects(test1, WritableStream.prototype, 'closed', realReadableStream(), true);
});
var test2 = async_test('WritableStream.prototype.ready enforces a brand check');
test2.step(function() {
getterRejects(test2, WritableStream.prototype, 'ready', fakeWritableStream());
getterRejects(test2, WritableStream.prototype, 'ready', realReadableStream(), true);
});
test(function() {
getterThrows(WritableStream.prototype, 'state', fakeWritableStream());
getterThrows(WritableStream.prototype, 'state', realReadableStream());
}, 'WritableStream.prototype.state enforces a brand check');
var test3 = async_test('WritableStream.prototype.abort enforces a brand check');
test3.step(function() {
methodRejects(test3, WritableStream.prototype, 'abort', fakeWritableStream());
methodRejects(test3, WritableStream.prototype, 'abort', realReadableStream(), true);
});
var test4 = async_test('WritableStream.prototype.write enforces a brand check');
test4.step(function() {
methodRejects(test4, WritableStream.prototype, 'write', fakeWritableStream());
methodRejects(test4, WritableStream.prototype, 'write', realReadableStream(), true);
});
var test5 = async_test('WritableStream.prototype.close enforces a brand check');
test5.step(function() {
methodRejects(test5, WritableStream.prototype, 'close', fakeWritableStream());
methodRejects(test5, WritableStream.prototype, 'close', realReadableStream(), true);
});
</script>