properly parse xcolor names

This commit is contained in:
Jörg Breitbart
2021-10-22 18:17:52 +02:00
parent b23e100266
commit 6a6043daa3
2 changed files with 159 additions and 11 deletions
+61
View File
@@ -54,6 +54,10 @@ class TestInputHandler extends InputHandler {
prev = await result;
}
}
public parseXColorName(data: string): void | [number, number, number] {
return this._parseXColorName(data);
}
}
describe('InputHandler', () => {
@@ -1865,6 +1869,63 @@ describe('InputHandler', () => {
});
});
describe('OSC', () => {
describe.only('parse xcolor names', () => {
it('rgb:<r>/<g>/<b> scheme in 4/8/12/16 bit', () => {
// 4 bit
assert.deepEqual(inputHandler.parseXColorName('rgb:0/0/0'), [0, 0, 0]);
assert.deepEqual(inputHandler.parseXColorName('rgb:f/f/f'), [255, 255, 255]);
assert.deepEqual(inputHandler.parseXColorName('rgb:1/2/3'), [17, 34, 51]);
// 8 bit
assert.deepEqual(inputHandler.parseXColorName('rgb:00/00/00'), [0, 0, 0]);
assert.deepEqual(inputHandler.parseXColorName('rgb:ff/ff/ff'), [255, 255, 255]);
assert.deepEqual(inputHandler.parseXColorName('rgb:11/22/33'), [17, 34, 51]);
// 12 bit
assert.deepEqual(inputHandler.parseXColorName('rgb:000/000/000'), [0, 0, 0]);
assert.deepEqual(inputHandler.parseXColorName('rgb:fff/fff/fff'), [255, 255, 255]);
assert.deepEqual(inputHandler.parseXColorName('rgb:111/222/333'), [17, 34, 51]);
// 16 bit
assert.deepEqual(inputHandler.parseXColorName('rgb:0000/0000/0000'), [0, 0, 0]);
assert.deepEqual(inputHandler.parseXColorName('rgb:ffff/ffff/ffff'), [255, 255, 255]);
assert.deepEqual(inputHandler.parseXColorName('rgb:1111/2222/3333'), [17, 34, 51]);
});
it('#RGB scheme in 4/8/12/16 bit', () => {
// 4 bit
assert.deepEqual(inputHandler.parseXColorName('#000'), [0, 0, 0]);
assert.deepEqual(inputHandler.parseXColorName('#fff'), [240, 240, 240]);
assert.deepEqual(inputHandler.parseXColorName('#123'), [16, 32, 48]);
// 8 bit
assert.deepEqual(inputHandler.parseXColorName('#000000'), [0, 0, 0]);
assert.deepEqual(inputHandler.parseXColorName('#ffffff'), [255, 255, 255]);
assert.deepEqual(inputHandler.parseXColorName('#112233'), [17, 34, 51]);
// 12 bit
assert.deepEqual(inputHandler.parseXColorName('#000000000'), [0, 0, 0]);
assert.deepEqual(inputHandler.parseXColorName('#fffffffff'), [255, 255, 255]);
assert.deepEqual(inputHandler.parseXColorName('#111222333'), [17, 34, 51]);
// 16 bit
assert.deepEqual(inputHandler.parseXColorName('#000000000000'), [0, 0, 0]);
assert.deepEqual(inputHandler.parseXColorName('#ffffffffffff'), [255, 255, 255]);
assert.deepEqual(inputHandler.parseXColorName('#111122223333'), [17, 34, 51]);
});
it('supports upper case', () => {
assert.deepEqual(inputHandler.parseXColorName('RGB:0/A/F'), [0, 170, 255]);
assert.deepEqual(inputHandler.parseXColorName('#FFF'), [240, 240, 240]);
});
it('does not parse illegal combinations', () => {
// shifting bit width
assert.equal(inputHandler.parseXColorName('rgb:0/11/222'), undefined);
// unsupported scheme
assert.equal(inputHandler.parseXColorName('rgbi:00/11/22'), undefined);
// broken # specifier
assert.equal(inputHandler.parseXColorName('#aabbbcc'), undefined);
// out of range
assert.equal(inputHandler.parseXColorName('#aabbgg'), undefined);
assert.equal(inputHandler.parseXColorName('rgb:aa/bb/gg'), undefined);
});
});
it('4: should parse correct Ansi color change data', () => {
// this is testing a private method
const event = inputHandler.parseAnsiColorChange('19;rgb:a1/b2/c3');