From 7c2bc70aace48898553aa924dfd46f3e908a5d50 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sat, 25 May 2019 21:13:45 -0700 Subject: [PATCH 1/4] Tests for erase in display Part of #2117 --- src/InputHandler.api.ts | 58 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/src/InputHandler.api.ts b/src/InputHandler.api.ts index cee87df7..e5ed940f 100644 --- a/src/InputHandler.api.ts +++ b/src/InputHandler.api.ts @@ -138,6 +138,64 @@ describe('InputHandler Integration Tests', function(): void { assert.deepEqual(await getLinesAsArray(2), [' a', ' b']); }); + it('ED: Erase in Display, VT100 - CSI Ps J', async function(): Promise { + const fixture = 'abc\\n\\rdef\\n\\rghi\x1b[2;2H'; + await page.evaluate(` + // Default: Erase Below + window.term.resize(5, 5); + window.term.write('${fixture}\x1b[J') + `); + assert.deepEqual(await getLinesAsArray(3), ['abc', 'd', '']); + await page.evaluate(` + // 0: Erase Below + window.term.reset() + window.term.write('${fixture}\x1b[0J') + `); + assert.deepEqual(await getLinesAsArray(3), ['abc', 'd', '']); + await page.evaluate(` + // 1: Erase Above + window.term.reset() + window.term.write('${fixture}\x1b[1J') + `); + assert.deepEqual(await getLinesAsArray(3), ['', ' f', 'ghi']); + await page.evaluate(` + // 2: Erase Saved Lines (scrollback) + window.term.reset() + window.term.write('1\\n2\\n3\\n4\\n5${fixture}\x1b[3J') + `); + assert.equal(await page.evaluate(`window.term.buffer.length`), 5); + assert.deepEqual(await getLinesAsArray(5), [' 4', ' 5', 'abc', 'def', 'ghi']); + }); + + it('DECSED: Erase in Display, VT220 - CSI ? Ps J', async function(): Promise { + const fixture = 'abc\\n\\rdef\\n\\rghi\x1b[2;2H'; + await page.evaluate(` + // Default: Erase Below + window.term.resize(5, 5); + window.term.write('${fixture}\x1b[?J') + `); + assert.deepEqual(await getLinesAsArray(3), ['abc', 'd', '']); + await page.evaluate(` + // 0: Erase Below + window.term.reset() + window.term.write('${fixture}\x1b[?0J') + `); + assert.deepEqual(await getLinesAsArray(3), ['abc', 'd', '']); + await page.evaluate(` + // 1: Erase Above + window.term.reset() + window.term.write('${fixture}\x1b[?1J') + `); + assert.deepEqual(await getLinesAsArray(3), ['', ' f', 'ghi']); + await page.evaluate(` + // 2: Erase Saved Lines (scrollback) + window.term.reset() + window.term.write('1\\n2\\n3\\n4\\n5${fixture}\x1b[?3J') + `); + assert.equal(await page.evaluate(`window.term.buffer.length`), 5); + assert.deepEqual(await getLinesAsArray(5), [' 4', ' 5', 'abc', 'def', 'ghi']); + }); + describe('DSR: Device Status Report', () => { it('Status Report - CSI 5 n', async function(): Promise { await page.evaluate(` From de8d9a720a6cee65bce83bcb2928fc02829a92ed Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sat, 25 May 2019 21:17:36 -0700 Subject: [PATCH 2/4] Fix NPE in reflow See microsoft/vscode#72149 --- src/Buffer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Buffer.ts b/src/Buffer.ts index 37d61d88..686e0a38 100644 --- a/src/Buffer.ts +++ b/src/Buffer.ts @@ -294,7 +294,7 @@ export class Buffer implements IBuffer { for (let y = this.lines.length - 1; y >= 0; y--) { // Check whether this line is a problem let nextLine = this.lines.get(y) as BufferLine; - if (!nextLine.isWrapped && nextLine.getTrimmedLength() <= newCols) { + if (!nextLine || !nextLine.isWrapped && nextLine.getTrimmedLength() <= newCols) { continue; } From 05ca1cb7dc107730c059b806e7e2fb59a5b26a83 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sat, 25 May 2019 21:25:56 -0700 Subject: [PATCH 3/4] Up timeouts --- src/InputHandler.api.ts | 2 +- src/public/Terminal.api.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/InputHandler.api.ts b/src/InputHandler.api.ts index e5ed940f..0d146d5d 100644 --- a/src/InputHandler.api.ts +++ b/src/InputHandler.api.ts @@ -15,7 +15,7 @@ const width = 800; const height = 600; describe('InputHandler Integration Tests', function(): void { - this.timeout(10000); + this.timeout(20000); before(async function(): Promise { browser = await puppeteer.launch({ diff --git a/src/public/Terminal.api.ts b/src/public/Terminal.api.ts index afad2699..75deba5b 100644 --- a/src/public/Terminal.api.ts +++ b/src/public/Terminal.api.ts @@ -15,7 +15,7 @@ const width = 800; const height = 600; describe('API Integration Tests', function(): void { - this.timeout(10000); + this.timeout(20000); before(async function(): Promise { browser = await puppeteer.launch({ From 4c42393aa490e5e9a5525b94765709b9dbd93928 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sun, 26 May 2019 13:07:37 -0700 Subject: [PATCH 4/4] Remove release scripts They're no longer used, azure-pipelines.yml does this now --- bin/prepare-release | 24 ------------------------ bin/release | 22 ---------------------- 2 files changed, 46 deletions(-) delete mode 100755 bin/prepare-release delete mode 100755 bin/release diff --git a/bin/prepare-release b/bin/prepare-release deleted file mode 100755 index 53f0947a..00000000 --- a/bin/prepare-release +++ /dev/null @@ -1,24 +0,0 @@ -#! /usr/bin/env sh - -# Usage: ./bin/prepare-release x.y.z -# x.y.z should be semver (e.g. 1.0.0) - -set -e - -NEW_VERSION=$1 -CURRENT_PACKAGE_JSON_VERSION=$(cat package.json \ - | grep version \ - | head -1 \ - | awk -F: '{ print $2 }' \ - | sed 's/[",]//g' \ - | tr -d '[[:space:]]') - -# Build xterm.js into `dist` -export BUILD_DIR=dist -npm run build - -# Update version in package.json -sed -i "s/\"version\": \"$CURRENT_PACKAGE_JSON_VERSION\"/\"version\": \"$NEW_VERSION\"/g" package.json - -git commit -S -s -a -m "Bump version to $NEW_VERSION" -git tag $NEW_VERSION diff --git a/bin/release b/bin/release deleted file mode 100755 index 5cdd85e4..00000000 --- a/bin/release +++ /dev/null @@ -1,22 +0,0 @@ -#! /usr/bin/env sh - -# Usage: ./bin/release x.y.z -# x.y.z should be semver (e.g. 1.0.0) - -set -e - -if [ -z "$1" ]; - then - echo "No version supplied. Please a version argument\n" - echo "Usage: $0 VERSION\n" - echo "Example: $0 1.0.0" - exit -fi - -NEW_VERSION=$1 - -./bin/prepare-release $NEW_VERSION - -git push && \ -git push --tags && \ -npm publish