chrome-devtools-frontend
Version:
Chrome DevTools UI
85 lines (75 loc) • 3 kB
text/typescript
// Copyright 2020 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.
import * as Platform from '../../../core/platform/platform.js';
import {
dispatchClickEvent,
getEventPromise,
renderElementIntoDOM,
} from '../../../testing/DOMHelpers.js';
import {describeWithLocale} from '../../../testing/EnvironmentHelpers.js';
import * as RenderCoordinator from '../render_coordinator/render_coordinator.js';
import * as Linkifier from './linkifier.js';
const {urlString} = Platform.DevToolsPath;
describeWithLocale('Linkifier', () => {
it('renders a link when given a URL', async () => {
const component = new Linkifier.Linkifier.Linkifier();
component.data = {
url: urlString`https://example.com`,
};
renderElementIntoDOM(component);
await RenderCoordinator.done();
assert.isNotNull(component.shadowRoot);
const link = component.shadowRoot.querySelector('a');
assert.instanceOf(link, HTMLAnchorElement);
assert.strictEqual(link.innerText, 'example.com');
});
it('throws when given an invalid URL', () => {
const component = new Linkifier.Linkifier.Linkifier();
assert.throws(() => {
component.data = {url: Platform.DevToolsPath.EmptyUrlString};
}, 'Cannot construct a Linkifier without providing a valid string URL.');
});
it('appends the line number to the URL if given, and adds one to deal with 0 indexing', async () => {
const component = new Linkifier.Linkifier.Linkifier();
component.data = {
url: urlString`https://example.com`,
lineNumber: 1,
};
renderElementIntoDOM(component);
await RenderCoordinator.done();
assert.isNotNull(component.shadowRoot);
const link = component.shadowRoot.querySelector('a');
assert.instanceOf(link, HTMLAnchorElement);
assert.strictEqual(link.innerText, 'example.com:2');
});
it('emits an event when clicked', async () => {
const component = new Linkifier.Linkifier.Linkifier();
component.data = {
url: urlString`https://example.com`,
lineNumber: 1,
columnNumber: 50,
};
// Suppress the event so that the link is not actually opened in the test
// runner by the global handler.
component.addEventListener('linkifieractivated', e => {
e.stopPropagation();
e.preventDefault();
});
renderElementIntoDOM(component);
await RenderCoordinator.done();
assert.isNotNull(component.shadowRoot);
const link = component.shadowRoot.querySelector('a');
assert.instanceOf(link, HTMLAnchorElement);
const clickEventPromise = getEventPromise<Linkifier.Linkifier.LinkifierClick>(component, 'linkifieractivated');
dispatchClickEvent(link, {
cancelable: true,
});
const clickEvent = await clickEventPromise;
assert.deepEqual(clickEvent.data, {
url: urlString`https://example.com`,
lineNumber: 1,
columnNumber: 50,
});
});
});