mirror of
https://github.com/wavetermdev/xterm.js.git
synced 2026-08-05 13:43:48 -07:00
Merge branch 'master' into dev_wlw
This commit is contained in:
@@ -399,13 +399,13 @@ describe('InputHandler Integration Tests', function(): void {
|
||||
});
|
||||
it('query single color', async () => {
|
||||
await writeSync(page, '\x1b]4;0;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]4;0;rgb:2e2e/3434/3636\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]4;0;rgb:2e2e/3434/3636\x1b\\']);
|
||||
await writeSync(page, '\x1b]4;77;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]4;0;rgb:2e2e/3434/3636\x07', '\x1b]4;77;rgb:5f5f/d7d7/5f5f\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]4;0;rgb:2e2e/3434/3636\x1b\\', '\x1b]4;77;rgb:5f5f/d7d7/5f5f\x1b\\']);
|
||||
});
|
||||
it('query multiple colors', async () => {
|
||||
await writeSync(page, '\x1b]4;0;?;77;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]4;0;rgb:2e2e/3434/3636\x07', '\x1b]4;77;rgb:5f5f/d7d7/5f5f\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]4;0;rgb:2e2e/3434/3636\x1b\\', '\x1b]4;77;rgb:5f5f/d7d7/5f5f\x1b\\']);
|
||||
});
|
||||
it('set & query single color', async () => {
|
||||
await writeSync(page, '\x1b]4;0;?\x07');
|
||||
@@ -413,10 +413,10 @@ describe('InputHandler Integration Tests', function(): void {
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), restore);
|
||||
// set new color & query
|
||||
await writeSync(page, '\x1b]4;0;rgb:01/02/03\x07\x1b]4;0;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), [restore[0], '\x1b]4;0;rgb:0101/0202/0303\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), [restore[0], '\x1b]4;0;rgb:0101/0202/0303\x1b\\']);
|
||||
// restore should set old color
|
||||
await writeSync(page, restore[0] + '\x1b]4;0;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), [restore[0], '\x1b]4;0;rgb:0101/0202/0303\x07', restore[0]]);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), [restore[0], '\x1b]4;0;rgb:0101/0202/0303\x1b\\', restore[0]]);
|
||||
});
|
||||
it('query & set colors mixed', async () => {
|
||||
await writeSync(page, '\x1b]4;0;?;77;?\x07');
|
||||
@@ -424,11 +424,11 @@ describe('InputHandler Integration Tests', function(): void {
|
||||
await page.evaluate('window._recordedData.length = 0;');
|
||||
// mixed call - change 0, query 43, change 77
|
||||
await writeSync(page, '\x1b]4;0;rgb:01/02/03;43;?;77;#aabbcc\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]4;43;rgb:0000/d7d7/afaf\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]4;43;rgb:0000/d7d7/afaf\x1b\\']);
|
||||
await page.evaluate('window._recordedData.length = 0;');
|
||||
// query new values for 0 + 77
|
||||
await writeSync(page, '\x1b]4;0;?;77;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]4;0;rgb:0101/0202/0303\x07', '\x1b]4;77;rgb:aaaa/bbbb/cccc\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]4;0;rgb:0101/0202/0303\x1b\\', '\x1b]4;77;rgb:aaaa/bbbb/cccc\x1b\\']);
|
||||
await page.evaluate('window._recordedData.length = 0;');
|
||||
// restore old values for 0 + 77
|
||||
await writeSync(page, restore[0] + restore[1] + '\x1b]4;0;?;77;?\x07');
|
||||
@@ -451,10 +451,10 @@ describe('InputHandler Integration Tests', function(): void {
|
||||
await writeSync(page, `\x1b]4;${i};?\x07`);
|
||||
const restore: string[] = await page.evaluate('window._recordedData');
|
||||
await writeSync(page, `\x1b]4;${i};rgb:01/02/03\x07\x1b]4;${i};?\x07`);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), [restore[0], `\x1b]4;${i};rgb:0101/0202/0303\x07`]);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), [restore[0], `\x1b]4;${i};rgb:0101/0202/0303\x1b\\`]);
|
||||
// restore slot color
|
||||
await writeSync(page, `\x1b]104;${i}\x07\x1b]4;${i};?\x07`);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), [restore[0], `\x1b]4;${i};rgb:0101/0202/0303\x07`, restore[0]]);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), [restore[0], `\x1b]4;${i};rgb:0101/0202/0303\x1b\\`, restore[0]]);
|
||||
await page.evaluate('window._recordedData.length = 0;');
|
||||
}
|
||||
});
|
||||
@@ -491,62 +491,62 @@ describe('InputHandler Integration Tests', function(): void {
|
||||
});
|
||||
it('query FG color', async () => {
|
||||
await writeSync(page, '\x1b]10;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]10;rgb:ffff/ffff/ffff\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]10;rgb:ffff/ffff/ffff\x1b\\']);
|
||||
});
|
||||
it('query BG color', async () => {
|
||||
await writeSync(page, '\x1b]11;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]11;rgb:0000/0000/0000\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]11;rgb:0000/0000/0000\x1b\\']);
|
||||
});
|
||||
it('query FG & BG color in one call', async () => {
|
||||
await writeSync(page, '\x1b]10;?;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]10;rgb:ffff/ffff/ffff\x07', '\x1b]11;rgb:0000/0000/0000\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]10;rgb:ffff/ffff/ffff\x1b\\', '\x1b]11;rgb:0000/0000/0000\x1b\\']);
|
||||
});
|
||||
it('set & query FG', async () => {
|
||||
await writeSync(page, '\x1b]10;rgb:1/2/3\x07\x1b]10;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]10;rgb:1111/2222/3333\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]10;rgb:1111/2222/3333\x1b\\']);
|
||||
await writeSync(page, '\x1b]10;#ffffff\x07\x1b]10;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]10;rgb:1111/2222/3333\x07', '\x1b]10;rgb:ffff/ffff/ffff\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]10;rgb:1111/2222/3333\x1b\\', '\x1b]10;rgb:ffff/ffff/ffff\x1b\\']);
|
||||
});
|
||||
it('set & query BG', async () => {
|
||||
await writeSync(page, '\x1b]11;rgb:1/2/3\x07\x1b]11;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]11;rgb:1111/2222/3333\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]11;rgb:1111/2222/3333\x1b\\']);
|
||||
await writeSync(page, '\x1b]11;#000000\x07\x1b]11;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]11;rgb:1111/2222/3333\x07', '\x1b]11;rgb:0000/0000/0000\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]11;rgb:1111/2222/3333\x1b\\', '\x1b]11;rgb:0000/0000/0000\x1b\\']);
|
||||
});
|
||||
it('set & query cursor color', async () => {
|
||||
await writeSync(page, '\x1b]12;rgb:1/2/3\x07\x1b]12;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]12;rgb:1111/2222/3333\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]12;rgb:1111/2222/3333\x1b\\']);
|
||||
await writeSync(page, '\x1b]12;#ffffff\x07\x1b]12;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]12;rgb:1111/2222/3333\x07', '\x1b]12;rgb:ffff/ffff/ffff\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]12;rgb:1111/2222/3333\x1b\\', '\x1b]12;rgb:ffff/ffff/ffff\x1b\\']);
|
||||
});
|
||||
it('set & query FG & BG color in one call', async () => {
|
||||
await writeSync(page, '\x1b]10;#123456;rgb:aa/bb/cc\x07\x1b]10;?;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]10;rgb:1212/3434/5656\x07', '\x1b]11;rgb:aaaa/bbbb/cccc\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]10;rgb:1212/3434/5656\x1b\\', '\x1b]11;rgb:aaaa/bbbb/cccc\x1b\\']);
|
||||
await writeSync(page, '\x1b]10;#ffffff;#000000\x07');
|
||||
});
|
||||
it('OSC 110: restore FG color', async () => {
|
||||
await writeSync(page, '\x1b]10;rgb:1/2/3\x07\x1b]10;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]10;rgb:1111/2222/3333\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]10;rgb:1111/2222/3333\x1b\\']);
|
||||
await page.evaluate('window._recordedData.length = 0;');
|
||||
// restore
|
||||
await writeSync(page, '\x1b]110\x07\x1b]10;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]10;rgb:ffff/ffff/ffff\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]10;rgb:ffff/ffff/ffff\x1b\\']);
|
||||
});
|
||||
it('OSC 111: restore BG color', async () => {
|
||||
await writeSync(page, '\x1b]11;rgb:1/2/3\x07\x1b]11;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]11;rgb:1111/2222/3333\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]11;rgb:1111/2222/3333\x1b\\']);
|
||||
await page.evaluate('window._recordedData.length = 0;');
|
||||
// restore
|
||||
await writeSync(page, '\x1b]111\x07\x1b]11;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]11;rgb:0000/0000/0000\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]11;rgb:0000/0000/0000\x1b\\']);
|
||||
});
|
||||
it('OSC 112: restore cursor color', async () => {
|
||||
await writeSync(page, '\x1b]12;rgb:1/2/3\x07\x1b]12;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]12;rgb:1111/2222/3333\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]12;rgb:1111/2222/3333\x1b\\']);
|
||||
await page.evaluate('window._recordedData.length = 0;');
|
||||
// restore
|
||||
await writeSync(page, '\x1b]112\x07\x1b]12;?\x07');
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]12;rgb:ffff/ffff/ffff\x07']);
|
||||
assert.deepEqual(await page.evaluate('window._recordedData'), ['\x1b]12;rgb:ffff/ffff/ffff\x1b\\']);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
+54
-42
@@ -574,7 +574,7 @@ describe('API Integration Tests', function(): void {
|
||||
await page.evaluate(`window.term.scrollLines(10)`);
|
||||
await page.evaluate(`window.term.addMarker(3)`);
|
||||
await page.evaluate(`window.term.addMarker(4)`);
|
||||
await page.evaluate(`
|
||||
await page.evaluate(`
|
||||
for (let i = 0; i < window.term.markers.length; ++i) {
|
||||
const marker = window.term.markers[i];
|
||||
marker.onDispose(() => window.disposeStack.push(marker));
|
||||
@@ -732,48 +732,60 @@ describe('API Integration Tests', function(): void {
|
||||
});
|
||||
|
||||
describe('registerDecoration', () => {
|
||||
it('should register decorations and render them', async () => {
|
||||
await openTerminal(page);
|
||||
await writeSync(page, '\\n\\n\\n\\n');
|
||||
await writeSync(page, '\\n\\n\\n\\n');
|
||||
await writeSync(page, '\\n\\n\\n\\n');
|
||||
await page.evaluate(`window.marker1 = window.term.addMarker(1)`);
|
||||
await page.evaluate(`window.marker2 = window.term.addMarker(2)`);
|
||||
await page.evaluate(`window.term.registerDecoration({ marker: window.marker1 })`);
|
||||
await page.evaluate(`window.term.registerDecoration({ marker: window.marker2 })`);
|
||||
await page.evaluate(`window.term.resize(10, 5)`);
|
||||
assert.equal(await page.evaluate(`document.querySelectorAll('.xterm-screen .xterm-decoration').length`), 2);
|
||||
describe('bufferDecorations', () => {
|
||||
it('should register decorations and render them when terminal open is called', async () => {
|
||||
await page.evaluate(`window.term = new Terminal({})`);
|
||||
await page.evaluate(`window.term.open(document.querySelector('#terminal-container'))`);
|
||||
await page.waitForSelector('.xterm-text-layer');
|
||||
await page.evaluate(`window.marker1 = window.term.addMarker(1)`);
|
||||
await page.evaluate(`window.marker2 = window.term.addMarker(2)`);
|
||||
await page.evaluate(`window.term.registerDecoration({ marker: window.marker1 })`);
|
||||
await page.evaluate(`window.term.registerDecoration({ marker: window.marker2 })`);
|
||||
await openTerminal(page);
|
||||
await pollFor(page, `document.querySelectorAll('.xterm-screen .xterm-decoration').length`, 2);
|
||||
});
|
||||
it('should return undefined when the marker has already been disposed of', async () => {
|
||||
await openTerminal(page);
|
||||
await page.evaluate(`window.marker = window.term.addMarker(1)`);
|
||||
await page.evaluate(`window.marker.dispose()`);
|
||||
await pollFor(page, `window.decoration = window.term.registerDecoration({ marker: window.marker });`, undefined);
|
||||
});
|
||||
it('should throw when a negative x offset is provided', async () => {
|
||||
await openTerminal(page);
|
||||
await page.evaluate(`window.marker = window.term.addMarker(1)`);
|
||||
await page.evaluate(`
|
||||
try {
|
||||
window.decoration = window.term.registerDecoration({ marker: window.marker, x: -2 });
|
||||
} catch (e) {
|
||||
window.throwMessage = e.message;
|
||||
}
|
||||
`);
|
||||
await pollFor(page, 'window.throwMessage', 'This API only accepts positive integers');
|
||||
});
|
||||
});
|
||||
it('on resize should dispose of the old decoration and create a new one', async () => {
|
||||
await openTerminal(page);
|
||||
await writeSync(page, '\\n\\n\\n\\n');
|
||||
await writeSync(page, '\\n\\n\\n\\n');
|
||||
await page.evaluate(`window.marker = window.term.addMarker(1)`);
|
||||
await page.evaluate(`window.decoration = window.term.registerDecoration({ marker: window.marker })`);
|
||||
await page.evaluate(`window.term.resize(10, 5)`);
|
||||
assert.equal(await page.evaluate(`document.querySelectorAll('.xterm-screen .xterm-decoration').length`), 1);
|
||||
});
|
||||
it('should return undefined when the marker has already been disposed of', async () => {
|
||||
await openTerminal(page);
|
||||
await writeSync(page, '\\n\\n\\n\\n');
|
||||
await writeSync(page, '\\n\\n\\n\\n');
|
||||
await page.evaluate(`window.marker = window.term.addMarker(1)`);
|
||||
await page.evaluate(`window.marker.dispose()`);
|
||||
assert.equal(await page.evaluate(`window.decoration = window.term.registerDecoration({ marker: window.marker });`), undefined);
|
||||
});
|
||||
it('should throw when a negative x offset is provided', async () => {
|
||||
await openTerminal(page);
|
||||
await writeSync(page, '\\n\\n\\n\\n');
|
||||
await writeSync(page, '\\n\\n\\n\\n');
|
||||
await page.evaluate(`window.marker = window.term.addMarker(1)`);
|
||||
await page.evaluate(`
|
||||
try {
|
||||
window.decoration = window.term.registerDecoration({ marker: window.marker, x: -2 });
|
||||
} catch (e) {
|
||||
window.throwMessage = e.message;
|
||||
}
|
||||
`);
|
||||
await pollFor(page, 'window.throwMessage', 'This API only accepts positive integers');
|
||||
describe('overviewRulerDecorations', () => {
|
||||
it('should not add an overview ruler when width is not set', async () => {
|
||||
await page.evaluate(`window.term = new Terminal({})`);
|
||||
await page.evaluate(`window.term.open(document.querySelector('#terminal-container'))`);
|
||||
await page.waitForSelector('.xterm-text-layer');
|
||||
await page.evaluate(`window.marker1 = window.term.addMarker(1)`);
|
||||
await page.evaluate(`window.marker2 = window.term.addMarker(2)`);
|
||||
await page.evaluate(`window.term.registerDecoration({ marker: window.marker1, overviewRulerOptions: { color: 'red', position: 'full' } })`);
|
||||
await page.evaluate(`window.term.registerDecoration({ marker: window.marker2, overviewRulerOptions: { color: 'blue', position: 'full' } })`);
|
||||
await openTerminal(page);
|
||||
await pollFor(page, `document.querySelectorAll('.xterm-decoration-overview-ruler').length`, 0);
|
||||
});
|
||||
it('should add an overview ruler when width is set', async () => {
|
||||
await page.evaluate(`window.term = new Terminal({ overviewRulerWidth: 15 })`);
|
||||
await page.evaluate(`window.term.open(document.querySelector('#terminal-container'))`);
|
||||
await page.waitForSelector('.xterm-text-layer');
|
||||
await page.evaluate(`window.marker1 = window.term.addMarker(1)`);
|
||||
await page.evaluate(`window.marker2 = window.term.addMarker(2)`);
|
||||
await page.evaluate(`window.term.registerDecoration({ marker: window.marker1, overviewRulerOptions: { color: 'red', position: 'full' } })`);
|
||||
await page.evaluate(`window.term.registerDecoration({ marker: window.marker2, overviewRulerOptions: { color: 'blue', position: 'full' } })`);
|
||||
await openTerminal(page);
|
||||
await pollFor(page, `document.querySelectorAll('.xterm-decoration-overview-ruler').length`, 1);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user