<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script>
strongKey1 = {id:1};
strongKey2 = {id:2};
weakMap = new WeakMap;

function test()
{
    var weakMapObjectId = null;

    var currentStepIndex = 0;
    var steps = [
        // WeakMap {}
        {expression: ""},
        
        // WeakMap {key1 => 1, key2 => 2}
        {expression: "weakMap.set(strongKey1, 1); weakMap.set(strongKey2, 2);"},
        
        // WeakMap {key2 => 2}
        {expression: "delete window.strongKey1;"},

        // WeakMap {key2 => 2} (add and immediately garbage collect temporary objects)
        {expression: "weakMap.set({id:3}, 3); weakMap.set({id:4}, 4);"},
        
        // WeakMap {}
        {expression: "delete window.strongKey2;"},
    ];

    function remoteObjectJSONFilter(key, value)
    {
        if (key === "_target" || key === "_hasChildren" || key === "_listeners")
            return undefined;
        if (key === "_objectId" || key === "_stackTrace")
            return "<filtered>";
        return value;
    }

    function runNextStep() {
        if (currentStepIndex >= steps.length) {
            InspectorTest.completeTest();
            return;
        }

        var step = steps[currentStepIndex++];
        step.expression += " weakMap";

        InspectorTest.log("");
        InspectorTest.log("-----------------------------------------------------");
        InspectorTest.log("EXPRESSION: " + step.expression);

        // Run the expression, and then run a garbage collection on a different
        // event loop so no objects are kept alive by the stack.
        WI.runtimeManager.evaluateInInspectedWindow(step.expression, {objectGroup: "test", doNotPauseOnExceptionsAndMuteConsole: true, generatePreview: true}, function(remoteObject, wasThrown) {
            WI.runtimeManager.evaluateInInspectedWindow("GCController.collect()", {objectGroup: "test", doNotPauseOnExceptionsAndMuteConsole: true}, function() {
                InspectorTest.assert(remoteObject instanceof WI.RemoteObject);
                remoteObject.getCollectionEntries(0, 100, function(entries) {
                    InspectorTest.log("ENTRIES:");
                    entries.sort((a, b) => a.value.value - b.value.value);
                    for (let entry of entries)
                        InspectorTest.assert(entry instanceof WI.CollectionEntry);
                    InspectorTest.log(JSON.stringify(entries, remoteObjectJSONFilter, "  "));
                    remoteObject.releaseWeakCollectionEntries();
                    runNextStep();
                });
            });
        });
    }

    runNextStep();
}
</script>
</head>
<body onload="runTest();">
</body>
</html>
