UNPKG

chrome-devtools-frontend

Version:
85 lines (75 loc) 3 kB
// 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, }); }); });