<!DOCTYPE html>
<!--
@license
Copyright (C) 2015 The Android Open Source Project

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
<title>gr-linked-text</title>

<script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
<script src="../../../bower_components/web-component-tester/browser.js"></script>
<link rel="import" href="../../../test/common-test-setup.html"/>
<script src="../../../scripts/util.js"></script>

<link rel="import" href="gr-linked-text.html">

<script>void(0);</script>

<test-fixture id="basic">
  <template>
    <gr-linked-text>
      <div id="output"></div>
    </gr-linked-text>
  </template>
</test-fixture>

<script>
  suite('gr-linked-text tests', () => {
    let element;
    let sandbox;

    setup(() => {
      element = fixture('basic');
      sandbox = sinon.sandbox.create();
      sandbox.stub(Gerrit.Nav, 'mapCommentlinks', x => x);
      element.config = {
        ph: {
          match: '([Bb]ug|[Ii]ssue)\\s*#?(\\d+)',
          link: 'https://code.google.com/p/gerrit/issues/detail?id=$2',
        },
        changeid: {
          match: '(I[0-9a-f]{8,40})',
          link: '#/q/$1',
        },
        changeid2: {
          match: 'Change-Id: +(I[0-9a-f]{8,40})',
          link: '#/q/$1',
        },
        googlesearch: {
          match: 'google:(.+)',
          link: 'https://bing.com/search?q=$1', // html should supercede link.
          html: '<a href="https://google.com/search?q=$1">$1</a>',
        },
        hashedhtml: {
          match: 'hash:(.+)',
          html: '<a href="#/awesomesauce">$1</a>',
        },
        disabledconfig: {
          match: 'foo:(.+)',
          link: 'https://google.com/search?q=$1',
          enabled: false,
        },
      };
    });

    teardown(() => {
      sandbox.restore();
    });

    test('URL pattern was parsed and linked.', () => {
      // Regular inline link.
      const url = 'https://code.google.com/p/gerrit/issues/detail?id=3650';
      element.content = url;
      const linkEl = element.$.output.childNodes[0];
      assert.equal(linkEl.target, '_blank');
      assert.equal(linkEl.rel, 'noopener');
      assert.equal(linkEl.href, url);
      assert.equal(linkEl.textContent, url);
    });

    test('Bug pattern was parsed and linked', () => {
      // "Issue/Bug" pattern.
      element.content = 'Issue 3650';

      let linkEl = element.$.output.childNodes[0];
      const url = 'https://code.google.com/p/gerrit/issues/detail?id=3650';
      assert.equal(linkEl.target, '_blank');
      assert.equal(linkEl.href, url);
      assert.equal(linkEl.textContent, 'Issue 3650');

      element.content = 'Bug 3650';
      linkEl = element.$.output.childNodes[0];
      assert.equal(linkEl.target, '_blank');
      assert.equal(linkEl.rel, 'noopener');
      assert.equal(linkEl.href, url);
      assert.equal(linkEl.textContent, 'Bug 3650');
    });

    test('Change-Id pattern was parsed and linked', () => {
      // "Change-Id:" pattern.
      const changeID = 'I11d6a37f5e9b5df0486f6c922d8836dfa780e03e';
      const prefix = 'Change-Id: ';
      element.content = prefix + changeID;

      const textNode = element.$.output.childNodes[0];
      const linkEl = element.$.output.childNodes[1];
      assert.equal(textNode.textContent, prefix);
      const url = '/q/' + changeID;
      assert.equal(linkEl.target, '_blank');
      // Since url is a path, the host is added automatically.
      assert.isTrue(linkEl.href.endsWith(url));
      assert.equal(linkEl.textContent, changeID);
    });

    test('Multiple matches', () => {
      element.content = 'Issue 3650\nIssue 3450';
      const linkEl1 = element.$.output.childNodes[0];
      const linkEl2 = element.$.output.childNodes[2];

      assert.equal(linkEl1.target, '_blank');
      assert.equal(linkEl1.href,
          'https://code.google.com/p/gerrit/issues/detail?id=3650');
      assert.equal(linkEl1.textContent, 'Issue 3650');

      assert.equal(linkEl2.target, '_blank');
      assert.equal(linkEl2.href,
          'https://code.google.com/p/gerrit/issues/detail?id=3450');
      assert.equal(linkEl2.textContent, 'Issue 3450');
    });

    test('Change-Id pattern parsed before bug pattern', () => {
      // "Change-Id:" pattern.
      const changeID = 'I11d6a37f5e9b5df0486f6c922d8836dfa780e03e';
      const prefix = 'Change-Id: ';

      // "Issue/Bug" pattern.
      const bug = 'Issue 3650';

      const changeUrl = '/q/' + changeID;
      const bugUrl = 'https://code.google.com/p/gerrit/issues/detail?id=3650';

      element.content = prefix + changeID + bug;

      const textNode = element.$.output.childNodes[0];
      const changeLinkEl = element.$.output.childNodes[1];
      const bugLinkEl = element.$.output.childNodes[2];

      assert.equal(textNode.textContent, prefix);

      assert.equal(changeLinkEl.target, '_blank');
      assert.isTrue(changeLinkEl.href.endsWith(changeUrl));
      assert.equal(changeLinkEl.textContent, changeID);

      assert.equal(bugLinkEl.target, '_blank');
      assert.equal(bugLinkEl.href, bugUrl);
      assert.equal(bugLinkEl.textContent, 'Issue 3650');
    });

    test('html field in link config', () => {
      element.content = 'google:do a barrel roll';
      const linkEl = element.$.output.childNodes[0];
      assert.equal(linkEl.getAttribute('href'),
          'https://google.com/search?q=do a barrel roll');
      assert.equal(linkEl.textContent, 'do a barrel roll');
    });

    test('removing hash from links', () => {
      element.content = 'hash:foo';
      const linkEl = element.$.output.childNodes[0];
      assert.isTrue(linkEl.href.endsWith('/awesomesauce'));
      assert.equal(linkEl.textContent, 'foo');
    });

    test('disabled config', () => {
      element.content = 'foo:baz';
      assert.equal(element.$.output.innerHTML, 'foo:baz');
    });

    test('R=email labels link correctly', () => {
      element.removeZeroWidthSpace = true;
      element.content = 'R=\u200Btest@google.com';
      assert.equal(element.$.output.textContent, 'R=test@google.com');
      assert.equal(element.$.output.innerHTML.match(/(R=<a)/g).length, 1);
    });

    test('CC=email labels link correctly', () => {
      element.removeZeroWidthSpace = true;
      element.content = 'CC=\u200Btest@google.com';
      assert.equal(element.$.output.textContent, 'CC=test@google.com');
      assert.equal(element.$.output.innerHTML.match(/(CC=<a)/g).length, 1);
    });

    test('only {http,https,mailto} protocols are linkified', () => {
      element.content = 'xx mailto:test@google.com yy';
      let links = element.$.output.querySelectorAll('a');
      assert.equal(links.length, 1);
      assert.equal(links[0].getAttribute('href'), 'mailto:test@google.com');

      element.content = 'xx http://google.com yy';
      links = element.$.output.querySelectorAll('a');
      assert.equal(links.length, 1);
      assert.equal(links[0].getAttribute('href'), 'http://google.com');

      element.content = 'xx https://google.com yy';
      links = element.$.output.querySelectorAll('a');
      assert.equal(links.length, 1);
      assert.equal(links[0].getAttribute('href'), 'https://google.com');

      element.content = 'xx ssh://google.com yy';
      links = element.$.output.querySelectorAll('a');
      assert.equal(links.length, 0);

      element.content = 'xx ftp://google.com yy';
      links = element.$.output.querySelectorAll('a');
      assert.equal(links.length, 0);
    });

    test('overlapping links', () => {
      element.config = {
        b1: {
          match: '(B:\\s*)(\\d+)',
          html: '$1<a href="ftp://foo/$2">$2</a>',
        },
        b2: {
          match: '(B:\\s*\\d+\\s*,\\s*)(\\d+)',
          html: '$1<a href="ftp://foo/$2">$2</a>',
        },
      };
      element.content = '- B: 123, 45';
      const links = Polymer.dom(element.root).querySelectorAll('a');

      assert.equal(links.length, 2);
      assert.equal(element.$$('span').textContent, '- B: 123, 45');

      assert.equal(links[0].href, 'ftp://foo/123');
      assert.equal(links[0].textContent, '123');

      assert.equal(links[1].href, 'ftp://foo/45');
      assert.equal(links[1].textContent, '45');
    });

    test('_contentOrConfigChanged called with config', () => {
      const contentStub = sandbox.stub(element, '_contentChanged');
      const contentConfigStub = sandbox.stub(element, '_contentOrConfigChanged');
      element.content = 'some text';
      assert.isTrue(contentStub.called);
      assert.isTrue(contentConfigStub.called);
    });
  });

  suite('gr-linked-text with null config', () => {
    let element;
    let sandbox;

    setup(() => {
      element = fixture('basic');
      sandbox = sinon.sandbox.create();
    });

    teardown(() => {
      sandbox.restore();
    });

    test('_contentOrConfigChanged not called without config', () => {
      const contentStub = sandbox.stub(element, '_contentChanged');
      const contentConfigStub = sandbox.stub(element, '_contentOrConfigChanged');
      element.content = 'some text';
      assert.isTrue(contentStub.called);
      assert.isFalse(contentConfigStub.called);
    });
  });
</script>
