chromium/third_party/blink/web_tests/http/tests/devtools/search/sources-search-scope-in-files.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 {BindingsTestRunner} from 'bindings_test_runner';
import {SourcesTestRunner} from 'sources_test_runner';

import * as Workspace from 'devtools/models/workspace/workspace.js';
import * as SourcesModule from 'devtools/panels/sources/sources.js';
import * as Persistence from 'devtools/models/persistence/persistence.js';

(async function() {
  TestRunner.addResult(`Tests that ScriptSearchScope performs search across all sources correctly.\n`);
  await TestRunner.showPanel('sources');

  const workspace = Workspace.Workspace.WorkspaceImpl.instance();

  function fileSystemUISourceCodes() {
    var uiSourceCodes = [];
    var fileSystemProjects = workspace.projectsForType(Workspace.Workspace.projectTypes.FileSystem);
    for (var project of fileSystemProjects) {
      for (const uiSourceCode of project.uiSourceCodes()) {
        uiSourceCodes.push(uiSourceCode);
      }
    }
    return uiSourceCodes;
  }

  var scope = new SourcesModule.SourcesSearchScope.SourcesSearchScope();
  var names = ['search.html', 'search.js', 'search.css'];
  var fs = new BindingsTestRunner.TestFileSystem('/var/www');

  var promises = [];
  for (var name of names)
    promises.push(populateFileSystem(name));

  Promise.all(promises).then(onAllResourcesLoaded).catch(onResourceError);

  function onResourceError(error) {
    TestRunner.addResult('ERROR while loading resources: ' + error.message);
    TestRunner.completeTest();
  }

  function onAllResourcesLoaded() {
    fs.reportCreated(fileSystemCreated);

    function fileSystemCreated() {
      TestRunner.addResult('Total uiSourceCodes: ' + workspace.uiSourceCodes().length);
      TestRunner.runTestSuite(testSuite);
    }
  }

  function populateFileSystem(name) {
    var url = TestRunner.url('resources/' + name);
    return fetch(url).then(result => result.text()).then(function(text) {
      fs.root.addFile(name, text);
    });
  }

  InspectorFrontendHost.searchInPath = function(requestId, path, query) {
    setTimeout(reply);

    function reply() {
      var paths = [];
      for (var i = 0; i < names.length; ++i)
        paths.push('/var/www/' + names[i]);
      Persistence.IsolatedFileSystemManager.IsolatedFileSystemManager.instance().onSearchCompleted(
          {data: {requestId: requestId, fileSystemPath: path, files: paths}});
    }
  };

  var testSuite = [
    function testIgnoreCase(next) {
      var query = 'searchTest' +
          'UniqueString';
      var searchConfig = new Workspace.SearchConfig.SearchConfig(query, true, false);
      SourcesTestRunner.runSearchAndDumpResults(scope, searchConfig, next);
    },

    function testCaseSensitive(next) {
      var query = 'searchTest' +
          'UniqueString';
      var searchConfig = new Workspace.SearchConfig.SearchConfig(query, false, false);
      SourcesTestRunner.runSearchAndDumpResults(scope, searchConfig, next);
    },

    function testFileHTML(next) {
      var query = 'searchTest' +
          'UniqueString' +
          ' file:html';
      var searchConfig = new Workspace.SearchConfig.SearchConfig(query, true, false);
      SourcesTestRunner.runSearchAndDumpResults(scope, searchConfig, next);
    },

    function testFileJS(next) {
      var query = 'file:js ' +
          'searchTest' +
          'UniqueString';
      var searchConfig = new Workspace.SearchConfig.SearchConfig(query, true, false);
      SourcesTestRunner.runSearchAndDumpResults(scope, searchConfig, next);
    },

    function testFileHTMLJS(next) {
      var query = 'file:js ' +
          'searchTest' +
          'UniqueString' +
          ' file:html';
      var searchConfig = new Workspace.SearchConfig.SearchConfig(query, true, false);
      SourcesTestRunner.runSearchAndDumpResults(scope, searchConfig, next);
    },

    function testSpaceQueries(next) {
      var query = 'searchTest' +
          'Unique' +
          ' space' +
          ' String';
      var searchConfig = new Workspace.SearchConfig.SearchConfig(query, true, false);
      SourcesTestRunner.runSearchAndDumpResults(scope, searchConfig, next);
    },

    function testSpaceQueriesFileHTML(next) {
      var query = 'file:html ' +
          'searchTest' +
          'Unique' +
          ' space' +
          ' String';
      var searchConfig = new Workspace.SearchConfig.SearchConfig(query, true, false);
      SourcesTestRunner.runSearchAndDumpResults(scope, searchConfig, next);
    },

    function testSpaceQueriesFileHTML_SEARCH(next) {
      var query = 'file:html ' +
          'searchTest' +
          'Unique' +
          ' space' +
          ' String' +
          ' file:search';
      var searchConfig = new Workspace.SearchConfig.SearchConfig(query, true, false);
      SourcesTestRunner.runSearchAndDumpResults(scope, searchConfig, next);
    },

    function testSpaceQueriesFileJS_SEARCH_HTML(next) {
      var query = 'file:js ' +
          'searchTest' +
          'Unique' +
          ' space' +
          ' String' +
          ' file:search file:html';
      var searchConfig = new Workspace.SearchConfig.SearchConfig(query, true, false);
      SourcesTestRunner.runSearchAndDumpResults(scope, searchConfig, next);
    },

    function testSeveralQueriesFileHTML(next) {
      var query = 'searchTest' +
          'Unique' +
          ' file:html ' +
          ' space' +
          ' String';
      var searchConfig = new Workspace.SearchConfig.SearchConfig(query, true, false);
      SourcesTestRunner.runSearchAndDumpResults(scope, searchConfig, next);
    },

    function testSeveralQueriesFileHTML_SEARCH(next) {
      var query = 'searchTest' +
          'Unique' +
          ' file:html ' +
          ' space' +
          ' String' +
          ' file:search';
      var searchConfig = new Workspace.SearchConfig.SearchConfig(query, true, false);
      SourcesTestRunner.runSearchAndDumpResults(scope, searchConfig, next);
    },

    function testSeveralQueriesFileJS_SEARCH_HTML(next) {
      var query = 'file:js ' +
          'searchTest' +
          'Unique' +
          ' file:html ' +
          ' space' +
          ' String' +
          ' file:search';
      var searchConfig = new Workspace.SearchConfig.SearchConfig(query, true, false);
      SourcesTestRunner.runSearchAndDumpResults(scope, searchConfig, next);
    },

    function testFileSEARCH_NOT_JS_NOT_CSS(next) {
      var query = 'searchTest' +
          'UniqueString' +
          ' file:search -file:js -file:css';
      var searchConfig = new Workspace.SearchConfig.SearchConfig(query, true, false);
      SourcesTestRunner.runSearchAndDumpResults(scope, searchConfig, next);
    },

    function testSeveralQueriesFileNotCSS(next) {
      var query = 'searchTest' +
          'Unique' +
          ' -file:css ' +
          ' space' +
          ' String';
      var searchConfig = new Workspace.SearchConfig.SearchConfig(query, true, false);
      SourcesTestRunner.runSearchAndDumpResults(scope, searchConfig, next);
    },

    function testFileQueryWithProjectName(next) {
      TestRunner.addResult('Running a file query with existing project name first:');
      var query = 'searchTest' +
          'Unique' +
          ' file:www';
      var searchConfig = new Workspace.SearchConfig.SearchConfig(query, true, false);
      SourcesTestRunner.runSearchAndDumpResults(scope, searchConfig, step2);

      function step2() {
        TestRunner.addResult('Running a file query with non-existing project name now:');
        query = 'searchTest' +
            'Unique' +
            ' file:zzz';
        searchConfig = new Workspace.SearchConfig.SearchConfig(query, true, false);
        SourcesTestRunner.runSearchAndDumpResults(scope, searchConfig, next);
      }
    },

    function testDirtyFiles(next) {
      var uiSourceCode;
      var uiSourceCodes = fileSystemUISourceCodes();
      for (var i = 0; i < uiSourceCodes.length; ++i) {
        if (uiSourceCodes[i].name() === 'search.js') {
          uiSourceCode = uiSourceCodes[i];
          break;
        }
      }

      uiSourceCode.setWorkingCopy(
          'FOO ' +
          'searchTest' +
          'UniqueString' +
          ' BAR');
      var query = 'searchTest' +
          'UniqueString';
      var searchConfig = new Workspace.SearchConfig.SearchConfig(query, true, false);
      SourcesTestRunner.runSearchAndDumpResults(scope, searchConfig, next);
    }
  ];
})();