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

(async function() {
  TestRunner.addResult(`Test editor tokenAtTextPosition method.\n`);
  await TestRunner.loadModule('sources_test_runner');
  await TestRunner.showPanel('sources');

  var text =
      ['function foo(a, b) {', '    var f = /.a/.test(a); /*', 'this is a comment */', '    return f + "looongword";'];

  var positions = [[0, 10, 13], [8, 14, 19], [0, 5], [5, 20]];
  function testTokenAtPosition(textEditor) {
    for (var i = 0; i < positions.length; ++i) {
      var columns = positions[i];
      TestRunner.addResult('Line: ' + text[i]);
      for (var j = 0; j < columns.length; ++j) {
        var column = columns[j];
        TestRunner.addResult(
            'Column #' + column + ' (char \'' + text[i].charAt(column) +
            '\') - token: ' + JSON.stringify(textEditor.tokenAtTextPosition(i, column)));
      }
    }
  }

  TestRunner.runTestSuite([
    function testHighlightedText(next) {
      var textEditor = SourcesTestRunner.createTestEditor();
      TestRunner.addSnifferPromise(SourceFrame.SourcesTextEditor.prototype, 'rewriteMimeType').then(step1);
      textEditor.setMimeType('text/javascript');
      function step1() {
        textEditor.setText(text.join('\n'));
        testTokenAtPosition(textEditor);
        next();
      }
    },
  ]);
})();
