/** * Copyright (c) 2020 The xterm.js authors. All rights reserved. * @license MIT */ import { assert } from 'chai'; import { IBufferService } from 'common/services/Services'; import { Linkifier } from './Linkifier'; import { MockBufferService } from 'common/TestUtils.test'; import { ILink } from 'browser/Types'; import { LinkProviderService } from 'browser/services/LinkProviderService'; import jsdom = require('jsdom'); class TestLinkifier2 extends Linkifier { public set currentLink(link: any) { this._currentLink = link; } public linkHover(element: HTMLElement, link: ILink, event: MouseEvent): void { this._linkHover(element, link, event); } public linkLeave(element: HTMLElement, link: ILink, event: MouseEvent): void { this._linkLeave(element, link, event); } } describe('Linkifier2', () => { let bufferService: IBufferService; let linkifier: TestLinkifier2; const link: ILink = { text: 'foo', range: { start: { x: 5, y: 1 }, end: { x: 7, y: 1 } }, activate: () => { } }; beforeEach(() => { const dom = new jsdom.JSDOM(); bufferService = new MockBufferService(100, 10); linkifier = new TestLinkifier2(dom.window.document.createElement('div'), null!, null!, bufferService, new LinkProviderService()); linkifier.currentLink = { link, state: { decorations: { underline: true, pointerCursor: true }, isHovered: true } }; }); it('onShowLinkUnderline event range is correct', done => { linkifier.onShowLinkUnderline(e => { assert.equal(link.range.start.x - 1, e.x1); assert.equal(link.range.start.y - 1, e.y1); assert.equal(link.range.end.x, e.x2); assert.equal(link.range.end.y - 1, e.y2); done(); }); linkifier.linkHover({ classList: { add: () => { } } } as any, link, {} as any); }); it('onHideLinkUnderline event range is correct', done => { linkifier.onHideLinkUnderline(e => { assert.equal(link.range.start.x - 1, e.x1); assert.equal(link.range.start.y - 1, e.y1); assert.equal(link.range.end.x, e.x2); assert.equal(link.range.end.y - 1, e.y2); done(); }); linkifier.linkLeave({ classList: { add: () => { } } } as any, link, {} as any); }); });