From be2c29c95a11258df889c10a5ca9d5fe757574db Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Tue, 4 Jun 2019 23:19:26 -0700 Subject: [PATCH 1/4] Remove old redeclared xterm types in search addon --- addons/xterm-addon-search/src/SearchAddon.ts | 32 +------------------- 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/addons/xterm-addon-search/src/SearchAddon.ts b/addons/xterm-addon-search/src/SearchAddon.ts index 6464db36..7649e7de 100644 --- a/addons/xterm-addon-search/src/SearchAddon.ts +++ b/addons/xterm-addon-search/src/SearchAddon.ts @@ -18,41 +18,11 @@ export interface ISearchResult { row: number; } -// TODO: This is temporary, link to xtem when new version is published -interface INewTerminal extends Terminal { - buffer: IBuffer; - select(column: number, row: number, length: number): void; - getSelectionPosition(): ISelectionPosition | undefined; -} -interface IBuffer { - readonly cursorY: number; - readonly cursorX: number; - readonly viewportY: number; - readonly baseY: number; - readonly length: number; - getLine(y: number): IBufferLine | undefined; -} -interface IBufferLine { - readonly isWrapped: boolean; - getCell(x: number): IBufferCell; - translateToString(trimRight?: boolean, startColumn?: number, endColumn?: number): string; -} -interface IBufferCell { - readonly char: string; - readonly width: number; -} -interface ISelectionPosition { - startColumn: number; - startRow: number; - endColumn: number; - endRow: number; -} - const NON_WORD_CHARACTERS = ' ~!@#$%^&*()+`-=[]{}|\;:"\',./<>?'; const LINES_CACHE_TIME_TO_LIVE = 15 * 1000; // 15 secs export class SearchAddon implements ITerminalAddon { - private _terminal: INewTerminal; + private _terminal: Terminal; /** * translateBufferLineToStringWithWrap is a fairly expensive call. From 031fbde58079390c9adbf3ece169ad2e6511b414 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Tue, 4 Jun 2019 23:37:12 -0700 Subject: [PATCH 2/4] Turn on TS strict in search addon Fixes #2163 --- addons/xterm-addon-search/src/SearchAddon.ts | 114 +++++++++++-------- addons/xterm-addon-search/src/tsconfig.json | 3 +- 2 files changed, 70 insertions(+), 47 deletions(-) diff --git a/addons/xterm-addon-search/src/SearchAddon.ts b/addons/xterm-addon-search/src/SearchAddon.ts index 7649e7de..57f115f8 100644 --- a/addons/xterm-addon-search/src/SearchAddon.ts +++ b/addons/xterm-addon-search/src/SearchAddon.ts @@ -22,20 +22,20 @@ const NON_WORD_CHARACTERS = ' ~!@#$%^&*()+`-=[]{}|\;:"\',./<>?'; const LINES_CACHE_TIME_TO_LIVE = 15 * 1000; // 15 secs export class SearchAddon implements ITerminalAddon { - private _terminal: Terminal; + private _terminal: Terminal | undefined; /** * translateBufferLineToStringWithWrap is a fairly expensive call. * We memoize the calls into an array that has a time based ttl. * _linesCache is also invalidated when the terminal cursor moves. */ - private _linesCache: string[] = null; + private _linesCache: string[] | undefined; private _linesCacheTimeoutId = 0; private _cursorMoveListener: IDisposable | undefined; private _resizeListener: IDisposable | undefined; public activate(terminal: Terminal): void { - this._terminal = terminal; + this._terminal = terminal; } public dispose(): void {} @@ -48,8 +48,9 @@ export class SearchAddon implements ITerminalAddon { * @return Whether a result was found. */ public findNext(term: string, searchOptions?: ISearchOptions): boolean { - const {incremental} = searchOptions; - let result: ISearchResult; + if (!this._terminal) { + throw new Error('Cannot use addon until it has been loaded'); + } if (!term || term.length === 0) { this._terminal.clearSelection(); @@ -60,9 +61,10 @@ export class SearchAddon implements ITerminalAddon { let startRow = this._terminal.buffer.viewportY; if (this._terminal.hasSelection()) { + const incremental = searchOptions ? searchOptions.incremental : false; // Start from the selection end if there is a selection // For incremental search, use existing row - const currentSelection = this._terminal.getSelectionPosition(); + const currentSelection = this._terminal.getSelectionPosition()!; startRow = incremental ? currentSelection.startRow : currentSelection.endRow; startCol = incremental ? currentSelection.startColumn : currentSelection.endColumn; } @@ -75,13 +77,14 @@ export class SearchAddon implements ITerminalAddon { let cumulativeCols = startCol; // If startRow is wrapped row, scan for unwrapped row above. // So we can start matching on wrapped line from long unwrapped line. - while (this._terminal.buffer.getLine(findingRow).isWrapped) { - findingRow--; + let currentLine = this._terminal.buffer.getLine(findingRow); + while (currentLine && currentLine.isWrapped) { cumulativeCols += this._terminal.cols; + currentLine = this._terminal.buffer.getLine(--findingRow); } // Search startRow - result = this._findInLine(term, findingRow, cumulativeCols, searchOptions); + let result = this._findInLine(term, findingRow, cumulativeCols, searchOptions); // Search from startRow + 1 to end if (!result) { @@ -120,7 +123,9 @@ export class SearchAddon implements ITerminalAddon { * @return Whether a result was found. */ public findPrevious(term: string, searchOptions?: ISearchOptions): boolean { - let result: ISearchResult; + if (!this._terminal) { + throw new Error('Cannot use addon until it has been loaded'); + } if (!term || term.length === 0) { this._terminal.clearSelection(); @@ -133,7 +138,7 @@ export class SearchAddon implements ITerminalAddon { if (this._terminal.hasSelection()) { // Start from the selection start if there is a selection - const currentSelection = this._terminal.getSelectionPosition(); + const currentSelection = this._terminal.getSelectionPosition()!; startRow = currentSelection.startRow; startCol = currentSelection.startColumn; } @@ -141,14 +146,14 @@ export class SearchAddon implements ITerminalAddon { this._initLinesCache(); // Search startRow - result = this._findInLine(term, startRow, startCol, searchOptions, isReverseSearch); + let result = this._findInLine(term, startRow, startCol, searchOptions, isReverseSearch); // Search from startRow - 1 to top if (!result) { // If the line is wrapped line, increase number of columns that is needed to be scanned // Se we can scan on wrapped line from unwrapped line let cumulativeCols = this._terminal.cols; - if (this._terminal.buffer.getLine(startRow).isWrapped) { + if (this._terminal.buffer.getLine(startRow)!.isWrapped) { cumulativeCols += startCol; } for (let y = startRow - 1; y >= 0; y--) { @@ -158,7 +163,8 @@ export class SearchAddon implements ITerminalAddon { } // If the current line is wrapped line, increase scanning range, // preparing for scanning on unwrapped line - if (this._terminal.buffer.getLine(y).isWrapped) { + const line = this._terminal.buffer.getLine(y); + if (line && line.isWrapped) { cumulativeCols += this._terminal.cols; } else { cumulativeCols = this._terminal.cols; @@ -176,7 +182,8 @@ export class SearchAddon implements ITerminalAddon { if (result) { break; } - if (this._terminal.buffer.getLine(y).isWrapped) { + const line = this._terminal.buffer.getLine(y); + if (line && line.isWrapped) { cumulativeCols += this._terminal.cols; } else { cumulativeCols = this._terminal.cols; @@ -192,10 +199,11 @@ export class SearchAddon implements ITerminalAddon { * Sets up a line cache with a ttl */ private _initLinesCache(): void { + const terminal = this._terminal!; if (!this._linesCache) { - this._linesCache = new Array(this._terminal.buffer.length); - this._cursorMoveListener = this._terminal.onCursorMove(() => this._destroyLinesCache()); - this._resizeListener = this._terminal.onResize(() => this._destroyLinesCache()); + this._linesCache = new Array(terminal.buffer.length); + this._cursorMoveListener = terminal.onCursorMove(() => this._destroyLinesCache()); + this._resizeListener = terminal.onResize(() => this._destroyLinesCache()); } window.clearTimeout(this._linesCacheTimeoutId); @@ -203,7 +211,7 @@ export class SearchAddon implements ITerminalAddon { } private _destroyLinesCache(): void { - this._linesCache = null; + this._linesCache = undefined; if (this._cursorMoveListener) { this._cursorMoveListener.dispose(); this._cursorMoveListener = undefined; @@ -240,15 +248,17 @@ export class SearchAddon implements ITerminalAddon { * @param searchOptions Search options. * @return The search result if it was found. */ - protected _findInLine(term: string, row: number, col: number, searchOptions: ISearchOptions = {}, isReverseSearch: boolean = false): ISearchResult { + protected _findInLine(term: string, row: number, col: number, searchOptions: ISearchOptions = {}, isReverseSearch: boolean = false): ISearchResult | undefined { + const terminal = this._terminal!; // Ignore wrapped lines, only consider on unwrapped line (first row of command string). - if (this._terminal.buffer.getLine(row).isWrapped) { + const firstLine = terminal.buffer.getLine(row); + if (firstLine && firstLine.isWrapped) { return; } let stringLine = this._linesCache ? this._linesCache[row] : void 0; if (stringLine === void 0) { - stringLine = this.translateBufferLineToStringWithWrap(row, true); + stringLine = this._translateBufferLineToStringWithWrap(row, true); if (this._linesCache) { this._linesCache[row] = stringLine; } @@ -260,7 +270,7 @@ export class SearchAddon implements ITerminalAddon { let resultIndex = -1; if (searchOptions.regex) { const searchRegex = RegExp(searchTerm, 'g'); - let foundTerm: RegExpExecArray; + let foundTerm: RegExpExecArray | null; if (isReverseSearch) { // This loop will get the resultIndex of the _last_ regex match in the range 0..col while (foundTerm = searchRegex.exec(searchStringLine.slice(0, col))) { @@ -287,28 +297,33 @@ export class SearchAddon implements ITerminalAddon { if (resultIndex >= 0) { // Adjust the row number and search index if needed since a "line" of text can span multiple rows - if (resultIndex >= this._terminal.cols) { - row += Math.floor(resultIndex / this._terminal.cols); - resultIndex = resultIndex % this._terminal.cols; + if (resultIndex >= terminal.cols) { + row += Math.floor(resultIndex / terminal.cols); + resultIndex = resultIndex % terminal.cols; } if (searchOptions.wholeWord && !this._isWholeWord(resultIndex, searchStringLine, term)) { return; } - const line = this._terminal.buffer.getLine(row); + const line = terminal.buffer.getLine(row); - for (let i = 0; i < resultIndex; i++) { - const cell = line.getCell(i); - // Adjust the searchIndex to normalize emoji into single chars - const char = cell.char; - if (char.length > 1) { - resultIndex -= char.length - 1; - } - // Adjust the searchIndex for empty characters following wide unicode - // chars (eg. CJK) - const charWidth = cell.width; - if (charWidth === 0) { - resultIndex++; + if (line) { + for (let i = 0; i < resultIndex; i++) { + const cell = line.getCell(i); + if (!cell) { + break; + } + // Adjust the searchIndex to normalize emoji into single chars + const char = cell.char; + if (char.length > 1) { + resultIndex -= char.length - 1; + } + // Adjust the searchIndex for empty characters following wide unicode + // chars (eg. CJK) + const charWidth = cell.width; + if (charWidth === 0) { + resultIndex++; + } } } return { @@ -318,6 +333,7 @@ export class SearchAddon implements ITerminalAddon { }; } } + /** * Translates a buffer line to a string, including subsequent lines if they are wraps. * Wide characters will count as two columns in the resulting string. This @@ -326,14 +342,19 @@ export class SearchAddon implements ITerminalAddon { * @param line The line being translated. * @param trimRight Whether to trim whitespace to the right. */ - public translateBufferLineToStringWithWrap(lineIndex: number, trimRight: boolean): string { + private _translateBufferLineToStringWithWrap(lineIndex: number, trimRight: boolean): string { + const terminal = this._terminal!; let lineString = ''; let lineWrapsToNext: boolean; do { - const nextLine = this._terminal.buffer.getLine(lineIndex + 1); + const nextLine = terminal.buffer.getLine(lineIndex + 1); lineWrapsToNext = nextLine ? nextLine.isWrapped : false; - lineString += this._terminal.buffer.getLine(lineIndex).translateToString(!lineWrapsToNext && trimRight).substring(0, this._terminal.cols); + const line = terminal.buffer.getLine(lineIndex); + if (!line) { + break; + } + lineString += line.translateToString(!lineWrapsToNext && trimRight).substring(0, terminal.cols); lineIndex++; } while (lineWrapsToNext); @@ -345,13 +366,14 @@ export class SearchAddon implements ITerminalAddon { * @param result The result to select. * @return Whethera result was selected. */ - private _selectResult(result: ISearchResult): boolean { + private _selectResult(result: ISearchResult | undefined): boolean { + const terminal = this._terminal!; if (!result) { - this._terminal.clearSelection(); + terminal.clearSelection(); return false; } - this._terminal.select(result.col, result.row, result.term.length); - this._terminal.scrollLines(result.row - this._terminal.buffer.viewportY); + terminal.select(result.col, result.row, result.term.length); + terminal.scrollLines(result.row - terminal.buffer.viewportY); return true; } } diff --git a/addons/xterm-addon-search/src/tsconfig.json b/addons/xterm-addon-search/src/tsconfig.json index fcf70ba9..58a4bacf 100644 --- a/addons/xterm-addon-search/src/tsconfig.json +++ b/addons/xterm-addon-search/src/tsconfig.json @@ -9,7 +9,8 @@ "rootDir": ".", "outDir": "../lib", "sourceMap": true, - "removeComments": true + "removeComments": true, + "strict": true }, "include": [ "./**/*", From 9994047dc7d73dfa26f72e738ed6b6896976a05c Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Tue, 4 Jun 2019 23:52:17 -0700 Subject: [PATCH 3/4] Remove typings test Fixes #2185 --- .gitignore | 1 - fixtures/typings-test/tsconfig.json | 14 -- fixtures/typings-test/typings-test.ts | 249 -------------------------- src/Terminal.integration.ts | 15 -- 4 files changed, 279 deletions(-) delete mode 100644 fixtures/typings-test/tsconfig.json delete mode 100644 fixtures/typings-test/typings-test.ts diff --git a/.gitignore b/.gitignore index 42714614..cd350bb8 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,6 @@ npm-debug.log .env build/ .DS_Store -fixtures/typings-test/*.js package-lock.json # Keep bundled code out of Git diff --git a/fixtures/typings-test/tsconfig.json b/fixtures/typings-test/tsconfig.json deleted file mode 100644 index 9cd56129..00000000 --- a/fixtures/typings-test/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "files": [ - "typings-test.ts" - ], - "compilerOptions": { - "module": "commonjs", - "target": "es5", - "lib": [ - "dom", - "es6" - ], - "noEmit": true - } -} diff --git a/fixtures/typings-test/typings-test.ts b/fixtures/typings-test/typings-test.ts deleted file mode 100644 index 04f54920..00000000 --- a/fixtures/typings-test/typings-test.ts +++ /dev/null @@ -1,249 +0,0 @@ -/** - * @license MIT - */ - -/// - -import { Terminal, IDisposable } 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.applyAddon({}); - Terminal.applyAddon({}); - Terminal.applyAddon({}); - Terminal.applyAddon({}); - Terminal.applyAddon({}); - Terminal.applyAddon({}); - } -} - -namespace methods_core { - { - const t: Terminal = new Terminal(); - t.blur(); - t.focus(); - 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', () => {}); - t.on('selection', () => {}); - // 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', () => {}); - t.off('selection', () => {}); - // 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); - const d1: IDisposable = t.addCsiHandler('x', - (params: number[], collect: string): boolean => params[0] === 1); - d1.dispose(); - const d2: IDisposable = t.addOscHandler(199, - (data: string): boolean => true); - d2.dispose(); - } - 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 r18: (data: string) => void = t.getOption('handler'); - const r19: string = t.getOption('bellSound'); - const r20: string = t.getOption('bellStyle'); - const r22: number = t.getOption('letterSpacing'); - const r23: boolean = t.getOption('macOptionIsMeta'); - const r24: string = t.getOption('fontWeight'); - const r25: string = t.getOption('fontWeightBold'); - const r26: boolean = t.getOption('allowTransparency'); - const r27: boolean = t.getOption('rightClickSelectsWord'); - const r28: boolean = t.getOption('windowsMode'); - } - { - 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('fontWeight', 'normal'); - t.setOption('fontWeight', 'bold'); - t.setOption('fontWeightBold', 'normal'); - t.setOption('fontWeightBold', 'bold'); - t.setOption('popOnBell', true); - t.setOption('screenKeys', true); - t.setOption('useFlowControl', true); - t.setOption('allowTransparency', true); - t.setOption('visualBell', true); - t.setOption('windowsMode', true); - t.setOption('colors', ['a', 'b']); - t.setOption('letterSpacing', 1); - t.setOption('cols', 1); - t.setOption('rows', 1); - t.setOption('tabStopWidth', 1); - t.setOption('scrollback', 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'); - t.setOption('fontSize', 1); - t.setOption('lineHeight', 1); - t.setOption('fontFamily', 'foo'); - t.setOption('theme', {background: '#ff0000'}); - t.setOption('macOptionIsMeta', true); - t.setOption('rightClickSelectsWord', false); - } - } - namespace scrolling { - { - const t: Terminal = new Terminal(); - t.scrollLines(-1); - t.scrollLines(1); - t.scrollLines(-1); - t.scrollLines(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, callback: (isValid: boolean) => void) => { - console.log(uri, callback); - }, - tooltipCallback: (e: MouseEvent, uri: string) => { - console.log(e, uri); - }, - leaveCallback: () => {} - }); - t.deregisterLinkMatcher(1); - } -} diff --git a/src/Terminal.integration.ts b/src/Terminal.integration.ts index 59674586..d03a4237 100644 --- a/src/Terminal.integration.ts +++ b/src/Terminal.integration.ts @@ -5,13 +5,11 @@ * 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 { IViewport } from './Types'; import { CellData, WHITESPACE_CELL_CHAR } from 'core/buffer/BufferLine'; @@ -154,16 +152,3 @@ 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'); - const result = cp.spawnSync(tsc, { cwd: fixtureDir }); - assert.equal(result.status, 0, `build did not succeed:\nstdout: ${result.stdout.toString()}\nstderr: ${result.stderr.toString()}\n`); - }); -}); From 4e9163fee453e4601ddc519ce87f33f6e75d17c1 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Wed, 5 Jun 2019 05:35:48 -0700 Subject: [PATCH 4/4] Fix test warning --- bin/test.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bin/test.js b/bin/test.js index 2cdd1b3b..b57f0e50 100644 --- a/bin/test.js +++ b/bin/test.js @@ -14,8 +14,7 @@ let testFiles = [ './out/*test.js', './out/**/*test.js', './out/*integration.js', - './out/**/*integration.js', - './lib/**/*test.js' + './out/**/*integration.js' ]; // ability to inject particular test files via