<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
<script src="resources/remote-object-utilities.js"></script>
<script>
function test()
{
    let steps = [
        {expression: `({})`},
        {expression: `({a: 1})`},
        {expression: `({a: 1, b: 0, c: -0, d: 456n})`},
        {expression: `({a: 1, b: \"string\", c: /regex/, d: Symbol("sym")})`},
        {expression: `o = {a:1}; o.b = o; o`}, // cyclic
        {expression: `({a:function a(){}, b:function b(){}, get getter(){}, set setter(v){}})`},
        {expression: `function Foo() {}; new Foo`},
        {expression: `var Foo2 = function() {}; new Foo2`},
        {expression: `var namespace = {}; namespace.Foo3 = function() {}; new namespace.Foo3`},
        {expression: `function Bar() { this._x = 5 }; Bar.prototype = {constructor: Bar, get x() {return this._x;}}; new Bar`},
        {expression: `function Bar2() { this._x = 5 }; Bar.prototype = {get x() {return this._x;}}; new Bar2`},
        {expression: `new ArrayBuffer(16)`},
        {expression: `new DataView(new ArrayBuffer(16))`},
        {expression: `obj = {}; obj["prop"] = 1; obj[Symbol()] = 2; obj[Symbol("sym")] = 3; obj[Symbol("sym")] = 4; obj[Symbol.iterator] = Symbol(); obj`}, // Symbol properties
    ];

    if (!window.WI) {
        window.steps = steps;
        return;
    }

    runSteps(steps);
}
</script>
</head>
<body onload="runTest(); runInBrowserTest();"></body>
</html>
