<!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");

    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 { 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>
