|  | // 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. | 
|  |  | 
|  | // Flags: --allow-natives-syntax | 
|  |  | 
|  | let TestCoverage; | 
|  | let TestCoverageNoGC; | 
|  |  | 
|  | let nop; | 
|  | let gen; | 
|  |  | 
|  | !function() { | 
|  | function GetCoverage(source) { | 
|  | for (var script of %DebugCollectCoverage()) { | 
|  | if (script.script.source == source) return script; | 
|  | } | 
|  | return undefined; | 
|  | }; | 
|  |  | 
|  | function TestCoverageInternal(name, source, expectation, collect_garbage) { | 
|  | source = source.trim(); | 
|  | eval(source); | 
|  | if (collect_garbage) %CollectGarbage("collect dead objects"); | 
|  | var covfefe = GetCoverage(source); | 
|  | var stringified_result = JSON.stringify(covfefe); | 
|  | var stringified_expectation = JSON.stringify(expectation); | 
|  | if (stringified_result != stringified_expectation) { | 
|  | print(stringified_result.replace(/[}],[{]/g, "},\n {")); | 
|  | } | 
|  | assertEquals(stringified_expectation, stringified_result, name + " failed"); | 
|  | }; | 
|  |  | 
|  | TestCoverage = function(name, source, expectation) { | 
|  | TestCoverageInternal(name, source, expectation, true); | 
|  | }; | 
|  |  | 
|  | TestCoverageNoGC = function(name, source, expectation) { | 
|  | TestCoverageInternal(name, source, expectation, false); | 
|  | }; | 
|  |  | 
|  | nop = function() {}; | 
|  |  | 
|  | gen = function*() { | 
|  | yield 1; | 
|  | yield 2; | 
|  | yield 3; | 
|  | }; | 
|  | }(); |