multiple changes in APC handling:

- change interface to IFunctionIdentifier (API change)
- extend parser states APC_ENTRY, APC_INTERMEDIATE, APC_PASSTHROUGH
- remove APC_STRING
- change ApcParser.start to retrieve ident
- change actions APC_START and APC_PUT
This commit is contained in:
Jörg Breitbart
2026-04-24 13:53:31 +02:00
parent 9c5420371b
commit 9c8de633e9
16 changed files with 188 additions and 205 deletions
+43 -43
View File
@@ -60,8 +60,8 @@ describe('ApcParser', () => {
describe('identifier parsing', () => {
it('single character identifier', () => {
parser.start();
const data = toUtf32('Gf=100,a=T;payload');
parser.start('G'.charCodeAt(0));
const data = toUtf32('f=100,a=T;payload');
parser.put(data, 0, data.length);
parser.end(true);
assert.deepEqual(reports, [
@@ -71,20 +71,20 @@ describe('ApcParser', () => {
]);
});
it('identifier with no payload', () => {
parser.start();
const data = toUtf32('G');
parser.put(data, 0, data.length);
parser.end(true);
assert.deepEqual(reports, [
[0x47, 'START', undefined],
[0x47, 'END', true]
]);
});
//it('identifier with no payload', () => {
// parser.start('G'.charCodeAt(0));
// const data = toUtf32('');
// parser.put(data, 0, data.length);
// parser.end(true);
// assert.deepEqual(reports, [
// [0x47, 'START', undefined],
// [0x47, 'END', true]
// ]);
//});
it('identifier with chunked payload', () => {
parser.start();
let data = toUtf32('Gf=100');
parser.start('G'.charCodeAt(0));
let data = toUtf32('f=100');
parser.put(data, 0, data.length);
data = toUtf32(',a=T');
parser.put(data, 0, data.length);
@@ -100,11 +100,11 @@ describe('ApcParser', () => {
]);
});
it('empty APC sequence', () => {
parser.start();
parser.end(true);
assert.deepEqual(reports, []);
});
//it('empty APC sequence', () => {
// parser.start('G'.charCodeAt(0));
// parser.end(true);
// assert.deepEqual(reports, []);
//});
});
describe('handler registration', () => {
@@ -117,8 +117,8 @@ describe('ApcParser', () => {
it('registerHandler for specific identifier', () => {
const G_CODE = 0x47; // 'G'
parser.registerHandler(G_CODE, new TestHandler(G_CODE, handlerReports, 'kitty'));
parser.start();
const data = toUtf32('Gf=100,a=T;imagedata');
parser.start('G'.charCodeAt(0));
const data = toUtf32('f=100,a=T;imagedata');
parser.put(data, 0, data.length);
parser.end(true);
assert.deepEqual(handlerReports, [
@@ -133,8 +133,8 @@ describe('ApcParser', () => {
const G_CODE = 0x47; // 'G'
const X_CODE = 0x58; // 'X'
parser.registerHandler(G_CODE, new TestHandler(G_CODE, handlerReports, 'kitty'));
parser.start();
const data = toUtf32('Xsome data');
parser.start('X'.charCodeAt(0));
const data = toUtf32('some data');
parser.put(data, 0, data.length);
parser.end(true);
assert.deepEqual(handlerReports, []);
@@ -149,8 +149,8 @@ describe('ApcParser', () => {
const G_CODE = 0x47;
parser.registerHandler(G_CODE, new TestHandler(G_CODE, handlerReports, 'kitty'));
parser.clearHandler(G_CODE);
parser.start();
const data = toUtf32('Gf=100');
parser.start('G'.charCodeAt(0));
const data = toUtf32('f=100');
parser.put(data, 0, data.length);
parser.end(true);
assert.deepEqual(handlerReports, []);
@@ -165,8 +165,8 @@ describe('ApcParser', () => {
const G_CODE = 0x47;
parser.registerHandler(G_CODE, new TestHandler(G_CODE, handlerReports, 'handler1'));
parser.registerHandler(G_CODE, new TestHandler(G_CODE, handlerReports, 'handler2'));
parser.start();
const data = toUtf32('Gdata');
parser.start('G'.charCodeAt(0));
const data = toUtf32('data');
parser.put(data, 0, data.length);
parser.end(true);
assert.deepEqual(handlerReports, [
@@ -183,8 +183,8 @@ describe('ApcParser', () => {
const G_CODE = 0x47;
parser.registerHandler(G_CODE, new TestHandler(G_CODE, handlerReports, 'handler1'));
parser.registerHandler(G_CODE, new TestHandler(G_CODE, handlerReports, 'handler2', true));
parser.start();
const data = toUtf32('Gdata');
parser.start('G'.charCodeAt(0));
const data = toUtf32('data');
parser.put(data, 0, data.length);
parser.end(true);
assert.deepEqual(handlerReports, [
@@ -202,8 +202,8 @@ describe('ApcParser', () => {
parser.registerHandler(G_CODE, new TestHandler(G_CODE, handlerReports, 'handler1'));
const disposable = parser.registerHandler(G_CODE, new TestHandler(G_CODE, handlerReports, 'handler2'));
disposable.dispose();
parser.start();
const data = toUtf32('Gdata');
parser.start('G'.charCodeAt(0));
const data = toUtf32('data');
parser.put(data, 0, data.length);
parser.end(true);
assert.deepEqual(handlerReports, [
@@ -237,8 +237,8 @@ describe('ApcParser', () => {
results.push([G_CODE, data]);
return true;
}));
parser.start();
let data = toUtf32('Gf=100');
parser.start('G'.charCodeAt(0));
let data = toUtf32('f=100');
parser.put(data, 0, data.length);
data = toUtf32(',a=T;payload');
parser.put(data, 0, data.length);
@@ -253,8 +253,8 @@ describe('ApcParser', () => {
results.push([G_CODE, data]);
return true;
}));
parser.start();
const data = toUtf32('Gf=100,a=T;payload');
parser.start('G'.charCodeAt(0));
const data = toUtf32('f=100,a=T;payload');
parser.put(data, 0, data.length);
parser.end(false);
assert.deepEqual(results, []);
@@ -268,8 +268,8 @@ describe('ApcParser', () => {
results.push([G_CODE, data]);
return true;
}));
parser.start();
let data = toUtf32('G');
parser.start('G'.charCodeAt(0));
let data = toUtf32('');
parser.put(data, 0, data.length);
data = toUtf32('A'.repeat(CHUNK_SIZE));
for (let i = 0; i < TEST_PAYLOAD_LIMIT; i += CHUNK_SIZE) {
@@ -287,8 +287,8 @@ describe('ApcParser', () => {
results.push([G_CODE, data]);
return true;
}));
parser.start();
let data = toUtf32('G');
parser.start('G'.charCodeAt(0));
let data = toUtf32('');
parser.put(data, 0, data.length);
data = toUtf32('A'.repeat(CHUNK_SIZE));
for (let i = 0; i < TEST_PAYLOAD_LIMIT; i += CHUNK_SIZE) {
@@ -311,8 +311,8 @@ describe('ApcParser', () => {
it('reset during payload cleans up handlers', () => {
const G_CODE = 0x47;
parser.registerHandler(G_CODE, new TestHandler(G_CODE, handlerReports, 'kitty'));
parser.start();
const data = toUtf32('Gf=100');
parser.start('G'.charCodeAt(0));
const data = toUtf32('f=100');
parser.put(data, 0, data.length);
parser.reset();
assert.deepEqual(handlerReports, [
@@ -353,8 +353,8 @@ describe('ApcParser - async tests', () => {
results.push([G_CODE, data]);
return true;
}));
parser.start();
const data = toUtf32('Gf=100,a=T');
parser.start('G'.charCodeAt(0));
const data = toUtf32('f=100,a=T');
parser.put(data, 0, data.length);
await endP(parser, true);
assert.deepEqual(results, [[G_CODE, 'f=100,a=T']]);