// 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(`Tests that you can click and hover on links in attributes.\n`);
  await TestRunner.loadModule('elements_test_runner');
  await TestRunner.showPanel('elements');
  await TestRunner.loadHTML(`
      <img id="linkify-1" srcset="./1x/googlelogo_color_272x92dp.png 1x, ./2x/googlelogo_color_272x92dp.png 2x">
      <img id="linkify-2" srcset="./1x/googlelogo_color_272x92dp.png">
      <picture>
          <source id="linkify-3" media="(min-width: 650px)" srcset="./kitten-large.png">
          <source id="linkify-4" media="(min-width: 465px)" srcset="./kitten-medium.png">
          <source id="linkify-5" media="(min-width: 400px)" srcset="./kitten-large.png 2x">
          <img id="linkify-6" src="./kitten-small.png">
          <img id="linkify-7" srcset="./kitten-medium.png, ./kitten-large.png 2x">
          <img id="linkify-8" srcset="./kitten-medium.png 1x, ./kitten-large.png 2x">
          <img id="linkify-9" srcset="./kitten-medium.png 1x,./kitten-large.png 2x">
          <img id="linkify-10" srcset="data:,abc">
          <img id="linkify-11" srcset="data:,abc 1x">
          <img id="linkify-12" srcset="data:,abc 1x, data:,def 2x">
          <img id="linkify-13" srcset="data:,abc 1x,data:,def 2x">
      </picture>
      <a id="linkify-14" href="http://www.google.com">a link</a>
      <svg width="200" height="200"
        xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
        <image id="linkify-15" xlink:href="./kitten-small.png" height="200" width="200"/>
        <image id="linkify-16" href="./kitten-small.png" height="200" width="200"/>
      </svg>
    `);

  var i = 0;
  var last = 16;

  function check() {
    i++;
    if (i > last)
      return TestRunner.completeTest();

    ElementsTestRunner.selectNodeWithId('linkify-' + i, function() {
      var treeElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement;

      TestRunner.addResult('\nRendered text: ' + treeElement.title.textContent);

      // Print the embedded links.
      var links = treeElement.title.querySelectorAll('.devtools-link');
      links.forEach(link => {
        var offset = 0;
        var node = treeElement.title;
        while ((node = node.traverseNextTextNode(treeElement.title)) && !node.isSelfOrDescendant(link))
          offset += node.textContent.length;
        TestRunner.addResult('Link at offset: ' + offset + ': ' + link.textContent);
      });

      check();
    });
  }
  check();
})();
