<!doctype html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script>
function test()
{
    let suite = InspectorTest.createAsyncSuite("Heap.gc");

    suite.addTestCase({
        name: "TriggerGCShouldCreateGCEvent",
        description: "Calling Heap.gc should trigger Heap.garbageCollected event if enabled.",
        test: (resolve, reject) => {
            HeapAgent.gc();
            let resolving = false;
            WebInspector.heapManager.addEventListener(WebInspector.HeapManager.Event.GarbageCollected, (event) => {
                // Due to the asynchronous nature of Heap.garbageCollected events, we may see
                // non-Full GC events before we see the Full collection triggered by HeapAgent.gc.
                if (!resolving && event.data.collection.type === WebInspector.GarbageCollection.Type.Full) {
                    InspectorTest.expectThat(event.data.collection instanceof WebInspector.GarbageCollection, "Event should have GarbageCollection data.");
                    InspectorTest.expectThat(event.data.collection.type === WebInspector.GarbageCollection.Type.Full, "GarbageCollection type should be Full.");
                    resolving = true;
                    resolve();
                }
            });
        }
    });

    suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
<p>Test for the Heap.gc command.</p>
</body>
</html>
