Index: third_party/WebKit/LayoutTests/http/tests/streams/byte-length-queuing-strategy.js |
diff --git a/third_party/WebKit/LayoutTests/http/tests/streams/byte-length-queuing-strategy.js b/third_party/WebKit/LayoutTests/http/tests/streams/byte-length-queuing-strategy.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1aaccfe6c0d824db73cfd9a6ec40a16f64343c03 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/http/tests/streams/byte-length-queuing-strategy.js |
@@ -0,0 +1,95 @@ |
+'use strict'; |
+ |
+if (self.importScripts) { |
+ self.importScripts('/resources/testharness.js'); |
+} |
+ |
+test(() => { |
+ |
+ const strategy = new ByteLengthQueuingStrategy({ highWaterMark: 4 }); |
+ |
+}, 'Can construct a ByteLengthQueuingStrategy with a valid high water mark'); |
+ |
+test(() => { |
+ |
+ for (const highWaterMark of [-Infinity, NaN, 'foo', {}, () => {}]) { |
+ const strategy = new ByteLengthQueuingStrategy({ highWaterMark }); |
+ assert_equals(strategy.highWaterMark, highWaterMark, `${highWaterMark} gets set correctly`); |
+ } |
+ |
+}, 'Can construct a ByteLengthQueuingStrategy with any value as its high water mark'); |
+ |
+test(() => { |
+ |
+ const highWaterMark = 1; |
+ const highWaterMarkObjectGetter = { |
+ get highWaterMark() { return highWaterMark; }, |
+ }; |
+ const error = new Error('wow!'); |
+ const highWaterMarkObjectGetterThrowing = { |
+ get highWaterMark() { throw error; }, |
+ }; |
+ |
+ assert_throws({ name: 'TypeError' }, () => new ByteLengthQueuingStrategy(), 'construction fails with undefined'); |
+ assert_throws({ name: 'TypeError' }, () => new ByteLengthQueuingStrategy(null), 'construction fails with null'); |
+ assert_throws({ name: 'Error' }, () => new ByteLengthQueuingStrategy(highWaterMarkObjectGetterThrowing), |
+ 'construction fails with an object with a throwing highWaterMark getter'); |
+ |
+ // Should not fail: |
+ new ByteLengthQueuingStrategy('potato'); |
+ new ByteLengthQueuingStrategy({}); |
+ new ByteLengthQueuingStrategy(highWaterMarkObjectGetter); |
+ |
+}, 'ByteLengthQueuingStrategy constructor behaves as expected with strange arguments'); |
+ |
+test(() => { |
+ |
+ const size = 1024; |
+ const chunk = { byteLength: size }; |
+ const chunkGetter = { |
+ get byteLength() { return size; }, |
+ } |
+ const error = new Error('wow!'); |
+ const chunkGetterThrowing = { |
+ get byteLength() { throw error; }, |
+ } |
+ assert_throws({ name: 'TypeError' }, () => ByteLengthQueuingStrategy.prototype.size(), 'size fails with undefined'); |
+ assert_throws({ name: 'TypeError' }, () => ByteLengthQueuingStrategy.prototype.size(null), 'size fails with null'); |
+ assert_equals(ByteLengthQueuingStrategy.prototype.size('potato'), undefined, |
+ 'size succeeds with undefined with a random non-object type'); |
+ assert_equals(ByteLengthQueuingStrategy.prototype.size({}), undefined, |
+ 'size succeeds with undefined with an object without hwm property'); |
+ assert_equals(ByteLengthQueuingStrategy.prototype.size(chunk), size, |
+ 'size succeeds with the right amount with an object with a hwm'); |
+ assert_equals(ByteLengthQueuingStrategy.prototype.size(chunkGetter), size, |
+ 'size succeeds with the right amount with an object with a hwm getter'); |
+ assert_throws({ name: 'Error' }, () => ByteLengthQueuingStrategy.prototype.size(chunkGetterThrowing), |
+ 'size fails with the error thrown by the getter'); |
+ |
+}, 'ByteLengthQueuingStrategy size behaves as expected with strange arguments'); |
+ |
+test(() => { |
+ |
+ const strategy = new ByteLengthQueuingStrategy({ highWaterMark: 4 }); |
+ |
+ assert_object_equals(Object.getOwnPropertyDescriptor(strategy, 'highWaterMark'), |
+ { value: 4, writable: true, enumerable: true, configurable: true }, |
+ 'highWaterMark property should be a data property with the value passed the constructor'); |
+ assert_equals(typeof strategy.size, 'function'); |
+ |
+}, 'ByteLengthQueuingStrategy instances have the correct properties'); |
+ |
+test(() => { |
+ |
+ const strategy = new ByteLengthQueuingStrategy({ highWaterMark: 4 }); |
+ assert_equals(strategy.highWaterMark, 4); |
+ |
+ strategy.highWaterMark = 10; |
+ assert_equals(strategy.highWaterMark, 10); |
+ |
+ strategy.highWaterMark = "banana"; |
+ assert_equals(strategy.highWaterMark, "banana"); |
+ |
+}, 'ByteLengthQueuingStrategy\'s highWaterMark property can be set to anything'); |
+ |
+done(); |