136 lines
5.4 KiB
JavaScript
136 lines
5.4 KiB
JavaScript
"use strict";
|
|
/**
|
|
* Copyright (c) 2023 The xterm.js authors. All rights reserved.
|
|
* @license MIT
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const chai_1 = require("chai");
|
|
const IIPHeaderParser_1 = require("./IIPHeaderParser");
|
|
const CASES = [
|
|
['File=size=123456;name=dGVzdA==:', { name: 'test', size: 123456 }],
|
|
['File=size=123456;name=dGVzdA:', { name: 'test', size: 123456 }],
|
|
// utf-8 encoding in name
|
|
['File=size=123456;name=w7xtbMOkdXTDnw==:', { name: 'ümläutß', size: 123456 }],
|
|
['File=size=123456;name=w7xtbMOkdXTDnw:', { name: 'ümläutß', size: 123456 }],
|
|
// full header spec
|
|
[
|
|
'File=inline=1;width=10px;height=20%;preserveAspectRatio=1;size=123456;name=w7xtbMOkdXTDnw:',
|
|
{
|
|
inline: 1,
|
|
width: '10px',
|
|
height: '20%',
|
|
preserveAspectRatio: 1,
|
|
size: 123456,
|
|
name: 'ümläutß'
|
|
}
|
|
],
|
|
[
|
|
'File=inline=1;width=auto;height=20;preserveAspectRatio=1;size=123456;name=w7xtbMOkdXTDnw:',
|
|
{
|
|
inline: 1,
|
|
width: 'auto',
|
|
height: '20',
|
|
preserveAspectRatio: 1,
|
|
size: 123456,
|
|
name: 'ümläutß'
|
|
}
|
|
]
|
|
];
|
|
function fromBs(bs) {
|
|
const r = new Uint32Array(bs.length);
|
|
for (let i = 0; i < r.length; ++i)
|
|
r[i] = bs.charCodeAt(i);
|
|
return r;
|
|
}
|
|
describe('IIPHeaderParser', () => {
|
|
it('at once', () => {
|
|
const hp = new IIPHeaderParser_1.HeaderParser();
|
|
for (const example of CASES) {
|
|
hp.reset();
|
|
const inp = fromBs(example[0]);
|
|
const res = hp.parse(inp, 0, inp.length);
|
|
chai_1.assert.strictEqual(res, inp.length);
|
|
chai_1.assert.strictEqual(hp.state, 4 /* HeaderState.END */);
|
|
chai_1.assert.deepEqual(hp.fields, example[1]);
|
|
}
|
|
});
|
|
it('bytewise', () => {
|
|
const hp = new IIPHeaderParser_1.HeaderParser();
|
|
for (const example of CASES) {
|
|
hp.reset();
|
|
const inp = fromBs(example[0]);
|
|
let pos = 0;
|
|
let res = -2;
|
|
while (res === -2 && pos < inp.length) {
|
|
res = hp.parse(new Uint32Array([inp[pos++]]), 0, 1);
|
|
}
|
|
chai_1.assert.strictEqual(res, 1);
|
|
chai_1.assert.strictEqual(hp.state, 4 /* HeaderState.END */);
|
|
chai_1.assert.deepEqual(hp.fields, example[1]);
|
|
}
|
|
});
|
|
it('no File= starter', () => {
|
|
const hp = new IIPHeaderParser_1.HeaderParser();
|
|
let inp = fromBs('size=123456;name=dGVzdA==:');
|
|
let res = hp.parse(inp, 0, inp.length);
|
|
chai_1.assert.strictEqual(res, -1);
|
|
hp.reset();
|
|
inp = fromBs(CASES[0][0]);
|
|
res = hp.parse(inp, 0, inp.length);
|
|
chai_1.assert.strictEqual(res, inp.length);
|
|
chai_1.assert.strictEqual(hp.state, 4 /* HeaderState.END */);
|
|
chai_1.assert.deepEqual(hp.fields, CASES[0][1]);
|
|
});
|
|
it('empty key - error', () => {
|
|
const hp = new IIPHeaderParser_1.HeaderParser();
|
|
let inp = fromBs('File=size=123456;=dGVzdA==:');
|
|
let res = hp.parse(inp, 0, inp.length);
|
|
chai_1.assert.strictEqual(res, -1);
|
|
hp.reset();
|
|
inp = fromBs(CASES[0][0]);
|
|
res = hp.parse(inp, 0, inp.length);
|
|
chai_1.assert.strictEqual(res, inp.length);
|
|
chai_1.assert.strictEqual(hp.state, 4 /* HeaderState.END */);
|
|
chai_1.assert.deepEqual(hp.fields, CASES[0][1]);
|
|
});
|
|
it('empty size value - set to 0', () => {
|
|
const hp = new IIPHeaderParser_1.HeaderParser();
|
|
let inp = fromBs('File=size=;name=dGVzdA==:');
|
|
let res = hp.parse(inp, 0, inp.length);
|
|
chai_1.assert.strictEqual(res, inp.length);
|
|
chai_1.assert.strictEqual(hp.state, 4 /* HeaderState.END */);
|
|
chai_1.assert.deepEqual(hp.fields, { name: 'test', size: 0 });
|
|
hp.reset();
|
|
inp = fromBs(CASES[0][0]);
|
|
res = hp.parse(inp, 0, inp.length);
|
|
chai_1.assert.strictEqual(res, inp.length);
|
|
chai_1.assert.strictEqual(hp.state, 4 /* HeaderState.END */);
|
|
chai_1.assert.deepEqual(hp.fields, CASES[0][1]);
|
|
});
|
|
it('empty name value - set to empty string', () => {
|
|
const hp = new IIPHeaderParser_1.HeaderParser();
|
|
let inp = fromBs('File=size=123456;name=:');
|
|
let res = hp.parse(inp, 0, inp.length);
|
|
chai_1.assert.strictEqual(res, inp.length);
|
|
chai_1.assert.strictEqual(hp.state, 4 /* HeaderState.END */);
|
|
chai_1.assert.deepEqual(hp.fields, { name: '', size: 123456 });
|
|
hp.reset();
|
|
inp = fromBs(CASES[0][0]);
|
|
res = hp.parse(inp, 0, inp.length);
|
|
chai_1.assert.strictEqual(res, inp.length);
|
|
chai_1.assert.strictEqual(hp.state, 4 /* HeaderState.END */);
|
|
chai_1.assert.deepEqual(hp.fields, CASES[0][1]);
|
|
});
|
|
it('empty size value - error', () => {
|
|
const hp = new IIPHeaderParser_1.HeaderParser();
|
|
let inp = fromBs('File=inline=1;width=;height=20%;preserveAspectRatio=1;size=123456;name=w7xtbMOkdXTDnw:');
|
|
let res = hp.parse(inp, 0, inp.length);
|
|
chai_1.assert.strictEqual(res, -1);
|
|
hp.reset();
|
|
inp = fromBs(CASES[0][0]);
|
|
res = hp.parse(inp, 0, inp.length);
|
|
chai_1.assert.strictEqual(res, inp.length);
|
|
chai_1.assert.strictEqual(hp.state, 4 /* HeaderState.END */);
|
|
chai_1.assert.deepEqual(hp.fields, CASES[0][1]);
|
|
});
|
|
}); |