Index: test/inspector/runtime/coverage.js |
diff --git a/test/inspector/runtime/coverage.js b/test/inspector/runtime/coverage.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..dff7eca3893aba64916735700fa68dbb4e96efda |
--- /dev/null |
+++ b/test/inspector/runtime/coverage.js |
@@ -0,0 +1,89 @@ |
+// Copyright 2017 the V8 project authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+var source = |
+` |
+function fib(x) { |
+ if (x < 2) return 1; |
+ return fib(x-1) + fib(x-2); |
+} |
+(function iife() { |
+ return 1; |
+})(); |
+fib(5); |
+`; |
+ |
+print("Test collecting code coverage data with Runtime.collectCoverage."); |
+ |
+function ClearAndGC() { |
+ return Protocol.Runtime.evaluate({ expression: "fib = null;" }) |
+ .then(() => Protocol.HeapProfiler.enable()) |
+ .then(() => Protocol.HeapProfiler.collectGarbage()) |
+ .then(() => Protocol.HeapProfiler.disable()); |
+} |
+ |
+InspectorTest.runTestSuite([ |
+ function testPreciseCoverage(next) |
+ { |
+ Protocol.Runtime.enable() |
+ .then(Protocol.Runtime.startPreciseCoverage) |
+ .then(() => Protocol.Runtime.compileScript({ expression: source, sourceURL: "1", persistScript: true })) |
+ .then((result) => Protocol.Runtime.runScript({ scriptId: result.result.scriptId })) |
+ .then(ClearAndGC) |
+ .then(InspectorTest.logMessage) |
+ .then(Protocol.Runtime.takePreciseCoverage) |
+ .then(InspectorTest.logMessage) |
+ .then(Protocol.Runtime.takePreciseCoverage) |
+ .then(InspectorTest.logMessage) |
+ .then(ClearAndGC) |
+ .then(Protocol.Runtime.stopPreciseCoverage) |
+ .then(Protocol.Runtime.disable) |
+ .then(next); |
+ }, |
+ function testPreciseCoverageFail(next) |
+ { |
+ Protocol.Runtime.enable() |
+ .then(() => Protocol.Runtime.compileScript({ expression: source, sourceURL: "2", persistScript: true })) |
+ .then((result) => Protocol.Runtime.runScript({ scriptId: result.result.scriptId })) |
+ .then(InspectorTest.logMessage) |
+ .then(ClearAndGC) |
+ .then(Protocol.Runtime.takePreciseCoverage) |
+ .then(InspectorTest.logMessage) |
+ .then(ClearAndGC) |
+ .then(Protocol.Runtime.disable) |
+ .then(next); |
+ }, |
+ function testBestEffortCoverage(next) |
+ { |
+ Protocol.Runtime.enable() |
+ .then(() => Protocol.Runtime.compileScript({ expression: source, sourceURL: "3", persistScript: true })) |
+ .then((result) => Protocol.Runtime.runScript({ scriptId: result.result.scriptId })) |
+ .then(InspectorTest.logMessage) |
+ .then(ClearAndGC) |
+ .then(Protocol.Runtime.getBestEffortCoverage) |
+ .then(InspectorTest.logMessage) |
+ .then(Protocol.Runtime.getBestEffortCoverage) |
+ .then(InspectorTest.logMessage) |
+ .then(ClearAndGC) |
+ .then(Protocol.Runtime.disable) |
+ .then(next); |
+ }, |
+ function testBestEffortCoveragePrecise(next) |
+ { |
+ Protocol.Runtime.enable() |
+ .then(Protocol.Runtime.startPreciseCoverage) |
+ .then(() => Protocol.Runtime.compileScript({ expression: source, sourceURL: "4", persistScript: true })) |
+ .then((result) => Protocol.Runtime.runScript({ scriptId: result.result.scriptId })) |
+ .then(InspectorTest.logMessage) |
+ .then(ClearAndGC) |
+ .then(Protocol.Runtime.getBestEffortCoverage) |
+ .then(InspectorTest.logMessage) |
+ .then(Protocol.Runtime.getBestEffortCoverage) |
+ .then(InspectorTest.logMessage) |
+ .then(ClearAndGC) |
+ .then(Protocol.Runtime.stopPreciseCoverage) |
+ .then(Protocol.Runtime.disable) |
+ .then(next); |
+ }, |
+]); |