<!DOCTYPE html>
<html>
<head>
<title>Builtin JS getter names</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
</head>
<body>
<script>

function tryGetOwnPropertyDescriptorGetName(obj, property, expectedName)
{
    let descriptor = Object.getOwnPropertyDescriptor(obj, property);
    assert_true(!!descriptor, `Should find property descriptor for ${property}`);

    let getter = descriptor.get;
    assert_true(!!getter, `Should find getter for ${property}`);

    let getterName = getter.name;
    assert_equals(getterName, expectedName);
}

test(() => {
    tryGetOwnPropertyDescriptorGetName(Response.prototype, 'body', 'get body');
    tryGetOwnPropertyDescriptorGetName(Response.prototype, 'bodyUsed', 'get bodyUsed');
}, 'FetchResponse property names');

test(() => {
    tryGetOwnPropertyDescriptorGetName(ReadableStream.prototype, 'locked', 'get locked');
}, 'ReadableStream property names');

test(() => {
    let stream = new ReadableStream();
    let reader = stream.getReader();
    tryGetOwnPropertyDescriptorGetName(reader.__proto__, 'closed', 'get closed');
}, 'ReadableStreamDefaultReader property names');

test(() => {
    let stream = new ReadableStream({
        start: function(c) {
            controller = c;
        },
        type: "bytes"
    });
    let reader = stream.getReader({ mode: 'byob' });
    tryGetOwnPropertyDescriptorGetName(reader.__proto__, 'closed', 'get closed');
}, 'ReadableStreamBYOBReader property names');

test(() => {
    tryGetOwnPropertyDescriptorGetName(WritableStream.prototype, 'closed', 'get closed');
    tryGetOwnPropertyDescriptorGetName(WritableStream.prototype, 'ready', 'get ready');
    tryGetOwnPropertyDescriptorGetName(WritableStream.prototype, 'state', 'get state');
}, 'WritableStream property names');

</script>
</body>
</html>
