import { expect } from 'chai';
import { escapeAndLinkify } from './linkify';

describe('formatAndLinkify', () => {
  it('wraps links in anchor tags', () => {
    test(
      'http://example.com',
      '<a href="http://example.com" target="_blank" rel="noopener">http://example.com</a>'
    );
    test(
      'visit https://example.com for more',
      'visit <a href="https://example.com" target="_blank" rel="noopener">' +
        'https://example.com</a> for more'
    );
  });

  it('replaces newlines with <br/>', () => {
    test(
      'hello \n world \r\n good \t to \\ see \r you',
      'hello <br> world <br> good \t to \\ see <br> you'
    );
  });

  it('replaces expands bug shorthand with anchor tags', () => {
    test(
      'skia:1234',
      '<a href="http://skbug.com/1234" target="_blank" rel="noopener">skia:1234</a>'
    );
    test(
      'chromium:123456789101112',
      '<a href="http://crbug.com/123456789101112" target="_blank" rel="noopener">' +
        'chromium:123456789101112</a>'
    );
    test(
      'v8:42',
      '<a href="http://crbug.com/v8/42" target="_blank" rel="noopener">v8:42</a>'
    );
    test(
      'See skia:1234 and skia:456',
      'See <a href="http://skbug.com/1234" target="_blank" rel="noopener">skia:1234</a> ' +
        'and <a href="http://skbug.com/456" target="_blank" rel="noopener">skia:456</a>'
    );
  });

  it('does not replace invalid shorthand', () => {
    test('skia:abcd', 'skia:abcd');
    test('unknown:123', 'unknown:123');
    test('skia:', 'skia:');
  });

  it('escapes tags, to avoid XSS', () => {
    test('<div>foo</div>', '&lt;div&gt;foo&lt;/div&gt;');
    test(
      '<script>alert("xss")</script>',
      '&lt;script&gt;alert("xss")&lt;/script&gt;'
    );
  });

  it('does all of the above at once', () => {
    test(
      '<b>Hey<b>, check out skia:9000 \n and http://www.example.com/cool/thing?special=true',
      '&lt;b&gt;Hey&lt;b&gt;, check out ' +
        '<a href="http://skbug.com/9000" target="_blank" rel="noopener">skia:9000</a> ' +
        '<br> and <a href="http://www.example.com/cool/thing?special=true" ' +
        'target="_blank" rel="noopener">http://www.example.com/cool/thing?special=true</a>'
    );
  });

  it('handles newline following link', () => {
    test(
      'Reviewed-on: https://skia-review.googlesource.com/c/skia/+/123\nfoo',
      'Reviewed-on: <a href="https://skia-review.googlesource.com/c/skia/+/123" target="_blank" rel="noopener">https://skia-review.googlesource.com/c/skia/+/123</a><br>foo'
    );
  });
});

const test = (input: string, output: string) => {
  expect((escapeAndLinkify(input) as HTMLDivElement).innerHTML).to.equal(
    output
  );
};
