Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add explicit types #899

Merged
merged 19 commits into from
Aug 20, 2017
Merged
Show file tree
Hide file tree
Changes from 18 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ npm-debug.log
build/
.vscode/
.DS_Store
fixtures/typings-test/*.js

# Directories needed for code coverage
/coverage/
Expand Down
9 changes: 9 additions & 0 deletions fixtures/typings-test/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"files": [
"typings-test.ts"
],
"compilerOptions": {
"module": "commonjs",
"target": "es5"
}
}
219 changes: 219 additions & 0 deletions fixtures/typings-test/typings-test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,219 @@
/**
* @license MIT
*/

/// <reference path="../../typings/xterm.d.ts" />

import { Terminal } from 'xterm';

namespace constructor {
{
new Terminal();
new Terminal({});
new Terminal({
cols: 1,
rows: 1
});
new Terminal({
'cols': 1,
'cursorBlink': true,
'cursorStyle': 'block',
'disableStdin': false,
'rows': 1,
'scrollback': 10,
'tabStopWidth': 2,
});
}
}

namespace properties {
{
const t: Terminal = new Terminal();
const element: HTMLElement = t.element;
const textarea: HTMLTextAreaElement = t.textarea;
}
}

namespace static_methods {
{
Terminal.loadAddon('attach');
Terminal.loadAddon('fit');
Terminal.loadAddon('fullscreen');
Terminal.loadAddon('search');
Terminal.loadAddon('terminado');
}
}

namespace methods_core {
{
const t: Terminal = new Terminal();
t.blur();
t.focus();
t.destroy();
t.clear();
t.refresh(0, 1);
t.reset();
t.resize(1, 1);
t.write('foo');
t.writeln('foo');
}
{
const t: Terminal = new Terminal();
// no arg
t.on('blur', () => {});
t.on('focus', () => {});
t.on('lineFeed', () => {});
// args
t.on('data', () => {});
t.on('data', (data: string) => console.log(data));
t.on('key', () => {});
t.on('key', (key: string) => console.log(key, event));
t.on('key', (key: string, event: KeyboardEvent) => console.log(key, event));
t.on('keydown', () => {});
t.on('keydown', (event: KeyboardEvent) => console.log(event));
t.on('keypress', () => {});
t.on('keypress', (event: KeyboardEvent) => console.log(event));
t.on('refresh', () => {});
t.on('refresh', (data: {start: number, end: number}) => console.log(data));
t.on('resize', () => {});
t.on('resize', (data: {cols: number, rows: number}) => console.log(data));
t.on('scroll', () => {});
t.on('scroll', (ydisp: number) => console.log(ydisp));
t.on('title', () => {});
t.on('title', (title: string) => console.log(title));
}
{
const t: Terminal = new Terminal();
// no arg
t.off('blur', () => {});
t.off('focus', () => {});
t.off('lineFeed', () => {});
// args
t.off('data', () => {});
t.off('data', (data: string) => console.log(data));
t.off('key', () => {});
t.off('key', (key: string) => console.log(key, event));
t.off('key', (key: string, event: KeyboardEvent) => console.log(key, event));
t.off('keydown', () => {});
t.off('keydown', (event: KeyboardEvent) => console.log(event));
t.off('keypress', () => {});
t.off('keypress', (event: KeyboardEvent) => console.log(event));
t.off('refresh', () => {});
t.off('refresh', (data: {element: HTMLElement, start: number, end: number}) => console.log(data));
t.off('resize', () => {});
t.off('resize', (data: {terminal: Terminal, cols: number, rows: number}) => console.log(data));
t.off('scroll', () => {});
t.off('scroll', (ydisp: number) => console.log(ydisp));
t.off('title', () => {});
t.off('title', (title: string) => console.log(title));
}
{
const t: Terminal = new Terminal();
const e: HTMLElement = null;
t.open(e);
}
{
const t: Terminal = new Terminal();
t.attachCustomKeyEventHandler((e: KeyboardEvent) => true);
t.attachCustomKeyEventHandler((e: KeyboardEvent) => false);
}
namespace options {
{
const t: Terminal = new Terminal();
const r01: string = t.getOption('cursorStyle');
const r02: string = t.getOption('termName');
const r03: boolean = t.getOption('cancelEvents');
const r04: boolean = t.getOption('convertEol');
const r05: boolean = t.getOption('cursorBlink');
const r06: boolean = t.getOption('debug');
const r07: boolean = t.getOption('disableStdin');
const r08: boolean = t.getOption('popOnBell');
const r09: boolean = t.getOption('screenKeys');
const r10: boolean = t.getOption('useFlowControl');
const r11: boolean = t.getOption('visualBell');
const r12: string[] = t.getOption('colors');
const r13: number = t.getOption('cols');
const r14: number = t.getOption('rows');
const r15: number = t.getOption('tabStopWidth');
const r16: number = t.getOption('scrollback');
const r17: [number, number] = t.getOption('geometry');
const r18: (data: string) => void = t.getOption('handler');
const r19: string = t.getOption('bellSound');
const r20: string = t.getOption('bellStyle');
}
{
const t: Terminal = new Terminal();
t.setOption('cursorStyle', 'bar');
t.setOption('cursorStyle', 'block');
t.setOption('cursorStyle', 'underline');
t.setOption('termName', 'foo');
t.setOption('cancelEvents', true);
t.setOption('convertEol', true);
t.setOption('cursorBlink', true);
t.setOption('debug', true);
t.setOption('disableStdin', true);
t.setOption('popOnBell', true);
t.setOption('screenKeys', true);
t.setOption('useFlowControl', true);
t.setOption('visualBell', true);
t.setOption('colors', ['a', 'b']);
t.setOption('cols', 1);
t.setOption('rows', 1);
t.setOption('tabStopWidth', 1);
t.setOption('scrollback', 1);
t.setOption('geometry', [1, 1]);
t.setOption('handler', (data: string) => console.log(data));
t.setOption('bellSound', 'foo');
t.setOption('bellStyle', 'none');
t.setOption('bellStyle', 'visual');
t.setOption('bellStyle', 'sound');
t.setOption('bellStyle', 'both');
}
}
namespace scrolling {
{
const t: Terminal = new Terminal();
t.scrollDisp(-1);
t.scrollDisp(1);
t.scrollDisp(-1);
t.scrollDisp(1);
t.scrollToTop();
t.scrollToBottom();
}
}
namespace selection {
{
const t: Terminal = new Terminal();
const r1: boolean = t.hasSelection();
const r2: string = t.getSelection();
t.clearSelection();
t.selectAll();
}
}
}

namespace methods_experimental {
{
const t: Terminal = new Terminal();
t.registerLinkMatcher(/foo/, () => {});
t.registerLinkMatcher(new RegExp('foo'), () => {});
t.registerLinkMatcher(/foo/, () => {}, {});
t.registerLinkMatcher(/foo/, (event: MouseEvent, uri: string) => {
console.log(event, uri);
return void 0;
}, {});
t.registerLinkMatcher(/foo/, () => true, {});
t.registerLinkMatcher(/foo/, () => false, {});
t.registerLinkMatcher(/foo/, () => true, {
matchIndex: 1
});
t.registerLinkMatcher(/foo/, () => true, {
matchIndex: 1,
priority: 1,
validationCallback: (uri: string, element: HTMLElement, callback: (isValid: boolean) => void) => {
console.log(uri, element, callback);
}
});
t.deregisterLinkMatcher(1);
}
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
".gitignore"
],
"main": "lib/Terminal.js",
"types": "lib/Terminal.d.ts",
"types": "typings/xterm.d.ts",
"repository": "https://github.com/sourcelair/xterm.js",
"license": "MIT",
"files": [
Expand Down
2 changes: 1 addition & 1 deletion src/Renderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ export class Renderer {
this._terminal.element.appendChild(this._terminal.rowContainer);
}

this._terminal.emit('refresh', {element: this._terminal.element, start: start, end: end});
this._terminal.emit('refresh', {start, end});
};

/**
Expand Down
17 changes: 17 additions & 0 deletions src/Terminal.integration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@
* This file contains integration tests for xterm.js.
*/

import * as cp from 'child_process';
import * as glob from 'glob';
import * as fs from 'fs';
import * as os from 'os';
import * as path from 'path';
import * as pty from 'node-pty';
import { assert } from 'chai';
import { Terminal } from './Terminal';
import { CHAR_DATA_CHAR_INDEX } from './Buffer';

Expand Down Expand Up @@ -143,3 +145,18 @@ if (os.platform() !== 'win32') {
}
});
}

describe('typings', () => {
it('should throw no compile errors', function (): void {
this.timeout(20000);
let tsc = path.join(__dirname, '..', 'node_modules', '.bin', 'tsc');
if (process.platform === 'win32') {
tsc += '.cmd';
}
const fixtureDir = path.join(__dirname, '..', 'fixtures', 'typings-test');
let result = cp.spawnSync(tsc, { cwd: fixtureDir });
assert.equal(result.status, 0, `build did not succeed:\nstdout: ${result.stdout.toString()}\nstderr: ${result.stderr.toString()}\n`);
// Clean up
fs.unlinkSync(path.join(fixtureDir, 'typings-test.js'));
});
});
Loading