Reduce payload size to speed up unit tests

Reduces 11s -> 8s for full run
This commit is contained in:
Daniel Imms
2026-01-31 15:17:10 -08:00
parent 5ecdc7da44
commit 7ceb15bb83
4 changed files with 61 additions and 18 deletions
+1
View File
@@ -53,6 +53,7 @@
"lint-fix": "eslint --fix src/ addons/ demo/",
"lint-api": "eslint --config eslint.config.typings.mjs --max-warnings 0 typings/",
"test-unit": "node ./bin/test_unit.js",
"test-unit-slow-tests": "npm run test-unit | grep \"ms)\"",
"test-unit-coverage": "node ./bin/test_unit.js --coverage",
"test-unit-dev": "cross-env NODE_PATH='./out' mocha",
"test-integration": "node ./bin/test_integration.js --workers=75%",
+20 -6
View File
@@ -6,7 +6,6 @@ import { assert } from 'chai';
import { ApcParser, ApcHandler } from 'common/parser/ApcParser';
import { StringToUtf32, utf32ToString } from 'common/input/TextDecoder';
import { IApcHandler } from 'common/parser/Types';
import { PAYLOAD_LIMIT } from 'common/parser/Constants';
function toUtf32(s: string): Uint32Array {
const utf32 = new Uint32Array(s.length);
@@ -216,6 +215,21 @@ describe('ApcParser', () => {
});
describe('ApcHandler convenience class', () => {
const TEST_PAYLOAD_LIMIT = 100;
const CHUNK_SIZE = 10;
let originalPayloadLimit: number;
beforeEach(() => {
const handlerConstructor = ApcHandler as unknown as { PAYLOAD_LIMIT: number };
originalPayloadLimit = handlerConstructor.PAYLOAD_LIMIT;
handlerConstructor.PAYLOAD_LIMIT = TEST_PAYLOAD_LIMIT;
});
afterEach(() => {
const handlerConstructor = ApcHandler as unknown as { PAYLOAD_LIMIT: number };
handlerConstructor.PAYLOAD_LIMIT = originalPayloadLimit;
});
it('should be called once on end(true)', () => {
const G_CODE = 0x47;
const results: [number, string][] = [];
@@ -257,12 +271,12 @@ describe('ApcParser', () => {
parser.start();
let data = toUtf32('G');
parser.put(data, 0, data.length);
data = toUtf32('A'.repeat(1000));
for (let i = 0; i < PAYLOAD_LIMIT; i += 1000) {
data = toUtf32('A'.repeat(CHUNK_SIZE));
for (let i = 0; i < TEST_PAYLOAD_LIMIT; i += CHUNK_SIZE) {
parser.put(data, 0, data.length);
}
parser.end(true);
assert.deepEqual(results, [[G_CODE, 'A'.repeat(PAYLOAD_LIMIT)]]);
assert.deepEqual(results, [[G_CODE, 'A'.repeat(TEST_PAYLOAD_LIMIT)]]);
});
it('should abort for payload over limit', function(): void {
@@ -276,8 +290,8 @@ describe('ApcParser', () => {
parser.start();
let data = toUtf32('G');
parser.put(data, 0, data.length);
data = toUtf32('A'.repeat(1000));
for (let i = 0; i < PAYLOAD_LIMIT; i += 1000) {
data = toUtf32('A'.repeat(CHUNK_SIZE));
for (let i = 0; i < TEST_PAYLOAD_LIMIT; i += CHUNK_SIZE) {
parser.put(data, 0, data.length);
}
data = toUtf32('A');
+20 -6
View File
@@ -7,7 +7,6 @@ import { DcsParser, DcsHandler } from 'common/parser/DcsParser';
import { IDcsHandler, IParams, IFunctionIdentifier } from 'common/parser/Types';
import { utf32ToString, StringToUtf32 } from 'common/input/TextDecoder';
import { Params } from 'common/parser/Params';
import { PAYLOAD_LIMIT } from 'common/parser/Constants';
function toUtf32(s: string): Uint32Array {
const utf32 = new Uint32Array(s.length);
@@ -176,6 +175,21 @@ describe('DcsParser', () => {
});
});
describe('DcsHandlerFactory', () => {
const TEST_PAYLOAD_LIMIT = 100;
const CHUNK_SIZE = 10;
let originalPayloadLimit: number;
beforeEach(() => {
const handlerConstructor = DcsHandler as unknown as { PAYLOAD_LIMIT: number };
originalPayloadLimit = handlerConstructor.PAYLOAD_LIMIT;
handlerConstructor.PAYLOAD_LIMIT = TEST_PAYLOAD_LIMIT;
});
afterEach(() => {
const handlerConstructor = DcsHandler as unknown as { PAYLOAD_LIMIT: number };
handlerConstructor.PAYLOAD_LIMIT = originalPayloadLimit;
});
it('should be called once on end(true)', () => {
parser.registerHandler(identifier({intermediates: '+', final: 'p'}), new DcsHandler((data, params) => { reports.push([params.toArray(), data]); return true; }));
parser.hook(identifier({intermediates: '+', final: 'p'}), Params.fromArray([1, 2, 3]));
@@ -230,19 +244,19 @@ describe('DcsParser', () => {
this.timeout(30000);
parser.registerHandler(identifier({intermediates: '+', final: 'p'}), new DcsHandler((data, params) => { reports.push([params.toArray(), data]); return true; }));
parser.hook(identifier({intermediates: '+', final: 'p'}), Params.fromArray([1, 2, 3]));
const data = toUtf32('A'.repeat(1000));
for (let i = 0; i < PAYLOAD_LIMIT; i += 1000) {
const data = toUtf32('A'.repeat(CHUNK_SIZE));
for (let i = 0; i < TEST_PAYLOAD_LIMIT; i += CHUNK_SIZE) {
parser.put(data, 0, data.length);
}
parser.unhook(true);
assert.deepEqual(reports, [[[1, 2, 3], 'A'.repeat(PAYLOAD_LIMIT)]]);
assert.deepEqual(reports, [[[1, 2, 3], 'A'.repeat(TEST_PAYLOAD_LIMIT)]]);
});
it('should abort for payload limit +1', function(): void {
this.timeout(30000);
parser.registerHandler(identifier({intermediates: '+', final: 'p'}), new DcsHandler((data, params) => { reports.push([params.toArray(), data]); return true; }));
parser.hook(identifier({intermediates: '+', final: 'p'}), Params.fromArray([1, 2, 3]));
let data = toUtf32('A'.repeat(1000));
for (let i = 0; i < PAYLOAD_LIMIT; i += 1000) {
let data = toUtf32('A'.repeat(CHUNK_SIZE));
for (let i = 0; i < TEST_PAYLOAD_LIMIT; i += CHUNK_SIZE) {
parser.put(data, 0, data.length);
}
data = toUtf32('A');
+20 -6
View File
@@ -6,7 +6,6 @@ import { assert } from 'chai';
import { OscParser, OscHandler } from 'common/parser/OscParser';
import { StringToUtf32, utf32ToString } from 'common/input/TextDecoder';
import { IOscHandler } from 'common/parser/Types';
import { PAYLOAD_LIMIT } from 'common/parser/Constants';
function toUtf32(s: string): Uint32Array {
const utf32 = new Uint32Array(s.length);
@@ -170,6 +169,21 @@ describe('OscParser', () => {
});
});
describe('OscHandlerFactory', () => {
const TEST_PAYLOAD_LIMIT = 100;
const CHUNK_SIZE = 10;
let originalPayloadLimit: number;
beforeEach(() => {
const handlerConstructor = OscHandler as unknown as { PAYLOAD_LIMIT: number };
originalPayloadLimit = handlerConstructor.PAYLOAD_LIMIT;
handlerConstructor.PAYLOAD_LIMIT = TEST_PAYLOAD_LIMIT;
});
afterEach(() => {
const handlerConstructor = OscHandler as unknown as { PAYLOAD_LIMIT: number };
handlerConstructor.PAYLOAD_LIMIT = originalPayloadLimit;
});
it('should be called once on end(true)', () => {
parser.registerHandler(1234, new OscHandler(data => { reports.push([1234, data]); return true; }));
parser.start();
@@ -226,12 +240,12 @@ describe('OscParser', () => {
parser.start();
let data = toUtf32('1234;');
parser.put(data, 0, data.length);
data = toUtf32('A'.repeat(1000));
for (let i = 0; i < PAYLOAD_LIMIT; i += 1000) {
data = toUtf32('A'.repeat(CHUNK_SIZE));
for (let i = 0; i < TEST_PAYLOAD_LIMIT; i += CHUNK_SIZE) {
parser.put(data, 0, data.length);
}
parser.end(true);
assert.deepEqual(reports, [[1234, 'A'.repeat(PAYLOAD_LIMIT)]]);
assert.deepEqual(reports, [[1234, 'A'.repeat(TEST_PAYLOAD_LIMIT)]]);
});
it('should abort for payload limit +1', function(): void {
this.timeout(30000);
@@ -239,8 +253,8 @@ describe('OscParser', () => {
parser.start();
let data = toUtf32('1234;');
parser.put(data, 0, data.length);
data = toUtf32('A'.repeat(1000));
for (let i = 0; i < PAYLOAD_LIMIT; i += 1000) {
data = toUtf32('A'.repeat(CHUNK_SIZE));
for (let i = 0; i < TEST_PAYLOAD_LIMIT; i += CHUNK_SIZE) {
parser.put(data, 0, data.length);
}
data = toUtf32('A');