blob: 908b8acce34c71c3c0f9352ad2ba8629d25ce938 [file] [log] [blame]
<!DOCTYPE html>
<script src='../../resources/testharness.js'></script>
<script src='../../resources/testharnessreport.js'></script>
<script>
// This is updated till https://github.com/whatwg/streams/commit/4ba861e6f60c248060811830e11271c84b439cc3
test(function() {
var theError = new Error('a unique string');
assert_throws(theError, function() {
new WritableStream({}, {
get size() {
throw theError;
},
highWaterMark: 5
});
}, 'construction should re-throw the error');
}, 'Writable stream: throwing strategy.size getter');
var test1 = async_test('Writable stream: throwing strategy.size method');
test1.step(function() {
var theError = new Error('a unique string');
var writeCalled = false;
var ws = new WritableStream({ },
{
size: function() {
throw theError;
},
highWaterMark: 5
}
); // Initial construction should not throw.
ws.write('a').then(
test1.step_func(function() { assert_unreached('write should not fulfill'); }),
test1.step_func(function(r) {
assert_equals(r, theError, 'write should reject with the thrown error');
writeCalled = true;
})
);
ws.closed.then(
test1.step_func(function() { assert_unreached('closed should not fulfill'); }),
test1.step_func(function(r) {
assert_equals(r, theError, 'closed should reject with the thrown error');
assert_true(writeCalled);
test1.done();
})
);
});
var test2 = async_test('Writable stream: invalid strategy.size return value');
test2.step(function() {
var numberOfCalls = 0;
var elements = [NaN, -Infinity, +Infinity, -1];
var theError = [];
var numberOfCalls = 0;
for (var i = 0; i < elements.length; i++) {
var ws = new WritableStream({},
{
size: function() {
return elements[i];
},
highWaterMark: 5
});
var writeFunction = function(i, r) {
assert_throws(new RangeError(), function() { throw r; }, 'write should reject with a RangeError for ' + elements[i]);
theError[i] = r;
};
ws.write('a').then(
test2.step_func(function() { assert_unreached('write should not fulfill'); }),
test2.step_func(writeFunction.bind(this, i))
);
var catchFunction = function(i, e) {
assert_equals(e, theError[i], 'closed should reject with the error for ' + elements[i]);
if (++numberOfCalls, elements.length) {
test2.done();
}
};
ws.closed.catch(test2.step_func(catchFunction.bind(this, i)));
}
});
test(function() {
var theError = new Error('a unique string');
assert_throws(theError, function() {
new WritableStream({}, {
size: function() {
return 1;
},
get highWaterMark() {
throw theError;
}
});
}, 'construction should re-throw the error');
}, 'Writable stream: throwing strategy.highWaterMark getter');
test(function() {
for (var highWaterMark of [-1, -Infinity]) {
assert_throws(new RangeError(), function() {
new WritableStream({}, {
size: function() {
return 1;
},
highWaterMark
});
}, 'construction should throw a RangeError for ' + highWaterMark);
}
for (var highWaterMark of [NaN, 'foo', {}]) {
assert_throws(new RangeError(), function() {
new WritableStream({}, {
size: function() {
return 1;
},
highWaterMark
});
}, 'construction should throw a TypeError for ' + highWaterMark);
}
}, 'Writable stream: invalid strategy.highWaterMark');
</script>