// META: global=window,worker // META: title=ReadableStream disturbed tests, via Response's bodyUsed property "use strict"; test(() => { const stream = new ReadableStream(); const response = new Response(stream); assert_false(response.bodyUsed, "On construction"); const reader = stream.getReader(); assert_false(response.bodyUsed, "After getting a reader"); reader.read(); assert_true(response.bodyUsed, "After calling stream.read()"); }, "A non-closed stream on which read() has been called"); test(() => { const stream = new ReadableStream(); const response = new Response(stream); assert_false(response.bodyUsed, "On construction"); const reader = stream.getReader(); assert_false(response.bodyUsed, "After getting a reader"); reader.cancel(); assert_true(response.bodyUsed, "After calling stream.cancel()"); }, "A non-closed stream on which cancel() has been called"); test(() => { const stream = new ReadableStream({ start(c) { c.close(); } }); const response = new Response(stream); assert_false(response.bodyUsed, "On construction"); const reader = stream.getReader(); assert_false(response.bodyUsed, "After getting a reader"); reader.read(); assert_true(response.bodyUsed, "After calling stream.read()"); }, "A closed stream on which read() has been called"); test(() => { const stream = new ReadableStream({ start(c) { c.error(new Error("some error")); } }); const response = new Response(stream); assert_false(response.bodyUsed, "On construction"); const reader = stream.getReader(); assert_false(response.bodyUsed, "After getting a reader"); reader.read().then(() => { }, () => { }); assert_true(response.bodyUsed, "After calling stream.read()"); }, "An errored stream on which read() has been called"); test(() => { const stream = new ReadableStream({ start(c) { c.error(new Error("some error")); } }); const response = new Response(stream); assert_false(response.bodyUsed, "On construction"); const reader = stream.getReader(); assert_false(response.bodyUsed, "After getting a reader"); reader.cancel().then(() => { }, () => { }); assert_true(response.bodyUsed, "After calling stream.cancel()"); }, "An errored stream on which cancel() has been called");