chromium/third_party/blink/web_tests/http/tests/devtools/sources/dont-diverge-script-evaluated-twice.js

// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {TestRunner} from 'test_runner';
import {SourcesTestRunner} from 'sources_test_runner';

import * as SourcesModule from 'devtools/panels/sources/sources.js';
import * as Bindings from 'devtools/models/bindings/bindings.js';

(async function() {
  TestRunner.addResult(
      `Checks that script evaluated twice with different source and the same sourceURL won't be diverged from VM.\n`);
  await TestRunner.showPanel('sources');

  const scriptSource = '239\n//# sourceURL=test.js';
  const changedScriptSource = '42\n//# sourceURL=test.js';

  SourcesTestRunner.startDebuggerTest(step1);

  function step1() {
    SourcesTestRunner.waitForScriptSource('test.js', step2);
    TestRunner.evaluateInPage(scriptSource);
  }

  function step2(uiSourceCode) {
    TestRunner.addSnifferPromise(Bindings.ResourceScriptMapping.ResourceScriptFile.prototype, 'mappingCheckedForTest')
        .then(() => step3(uiSourceCode));
    SourcesTestRunner.showScriptSource('test.js');
  }

  function step3(uiSourceCode) {
    var debuggerModel = TestRunner.debuggerModel;
    var scriptFile = Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance().scriptFile(uiSourceCode, debuggerModel);
    if (!scriptFile) {
      TestRunner.addResult('[FAIL]: no script file for test.js');
      SourcesTestRunner.completeDebuggerTest();
      return;
    }
    if (scriptFile.hasDivergedFromVM() || scriptFile.isDivergingFromVM()) {
      TestRunner.addResult('[FAIL]: script file is diverged from VM');
      SourcesTestRunner.completeDebuggerTest();
      return;
    }

    TestRunner
        .addSnifferPromise(
            SourcesModule.DebuggerPlugin.DebuggerPlugin.prototype, 'didDivergeFromVM')
        .then(dumpDivergeFromVM);
    TestRunner.addSnifferPromise(Bindings.ResourceScriptMapping.ResourceScriptFile.prototype, 'mappingCheckedForTest')
        .then(() => SourcesTestRunner.completeDebuggerTest());
    TestRunner.evaluateInPage(changedScriptSource);
  }

  function dumpDivergeFromVM() {
    TestRunner.addResult('[FAIL]: script file was diverged from VM');
  }
})();