<!DOCTYPE html>
<meta charset="utf-8">
<title>Blob methods from detached frame work as expected</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<iframe id="emptyDocumentIframe" src="../support/empty-document.html"></iframe>

<script>
const BlobPrototypeFromDetachedFramePromise = new Promise(resolve => {
    emptyDocumentIframe.onload = () => {
        const BlobPrototype = emptyDocumentIframe.contentWindow.Blob.prototype;
        emptyDocumentIframe.remove();
        resolve(BlobPrototype);
    };
});

const charCodeArrayToString = charCodeArray => Array.from(charCodeArray, c => String.fromCharCode(c)).join("");
const charCodeBufferToString = charCodeBuffer => charCodeArrayToString(new Uint8Array(charCodeBuffer));

promise_test(async () => {
    const { slice } = await BlobPrototypeFromDetachedFramePromise;
    const blob = new Blob(["foobar"]);

    const slicedBlob = slice.call(blob, 1, 3);
    assert_true(slicedBlob instanceof Blob);

    assert_equals(await slicedBlob.text(), "oo");
    assert_equals(charCodeBufferToString(await slicedBlob.arrayBuffer()), "oo");
    assert_equals(charCodeArrayToString(await slicedBlob.bytes()), "oo");

    const reader = slicedBlob.stream().getReader();
    const { value } = await reader.read();
    assert_equals(charCodeArrayToString(value), "oo");
}, "slice()");

promise_test(async () => {
    const { text } = await BlobPrototypeFromDetachedFramePromise;
    const blob = new Blob(["foo"]);

    assert_equals(await text.call(blob), "foo");
}, "text()");

promise_test(async () => {
    const { arrayBuffer } = await BlobPrototypeFromDetachedFramePromise;
    const blob = new Blob(["bar"]);

    const charCodeBuffer = await arrayBuffer.call(blob);
    assert_equals(charCodeBufferToString(charCodeBuffer), "bar");
}, "arrayBuffer()");

promise_test(async () => {
    const { bytes } = await BlobPrototypeFromDetachedFramePromise;
    const blob = new Blob(["bar"]);

    const charCodeBytes = await bytes.call(blob);
    assert_equals(charCodeArrayToString(charCodeBytes), "bar");
}, "bytes()");

promise_test(async () => {
    const { stream } = await BlobPrototypeFromDetachedFramePromise;
    const blob = new Blob(["baz"]);

    const reader = stream.call(blob).getReader();
    const { value } = await reader.read();
    assert_equals(charCodeArrayToString(value), "baz");
}, "stream()");
</script>
