]> git.proxmox.com Git - mirror_xterm.js.git/blob - src/Linkifier.test.ts
Use jsdom instead of phantomjs for linkifier test
[mirror_xterm.js.git] / src / Linkifier.test.ts
1 /**
2 * @license MIT
3 */
4 import jsdom = require('jsdom');
5 import { assert } from 'chai';
6 import { ITerminal, ILinkifier } from './Interfaces';
7 import { Linkifier } from './Linkifier';
8
9 Linkifier.setTimeBeforeLinkifyForTest(0);
10
11 describe('Linkifier', () => {
12 let window: Window;
13 let document: Document;
14
15 let container: HTMLElement;
16 let rows: HTMLElement[];
17 let linkifier: ILinkifier;
18
19 beforeEach(done => {
20 rows = [];
21 jsdom.env('', (err, w) => {
22 window = w;
23 document = window.document;
24 linkifier = new Linkifier(document, rows);
25 container = document.createElement('div');
26 document.body.appendChild(container);
27 done();
28 });
29 });
30
31 function addRow(text: string) {
32 const element = document.createElement('div');
33 element.textContent = text;
34 container.appendChild(element);
35 rows.push(element);
36 }
37
38 function clickElement(element: Node) {
39 const event = document.createEvent('MouseEvent');
40 event.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
41 element.dispatchEvent(event);
42 }
43
44 describe('validationCallback', () => {
45 it('should enable link if true', done => {
46 addRow('test');
47 linkifier.registerLinkMatcher(/test/, () => done(), {
48 validationCallback: (url, cb) => {
49 cb(true);
50 assert.equal((<HTMLElement>rows[0].firstChild).tagName, 'A');
51 setTimeout(() => clickElement(rows[0].firstChild), 0);
52 }
53 });
54 linkifier.linkifyRow(0);
55 });
56
57 it('should disable link if false', done => {
58 addRow('test');
59 linkifier.registerLinkMatcher(/test/, () => assert.fail(), {
60 validationCallback: (url, cb) => {
61 cb(false);
62 assert.equal((<HTMLElement>rows[0].firstChild).tagName, 'A');
63 setTimeout(() => clickElement(rows[0].firstChild), 0);
64 }
65 });
66 linkifier.linkifyRow(0);
67 // Allow time for the click to be performed
68 setTimeout(() => done(), 10);
69 });
70 });
71 });