diff --git a/package.json b/package.json index c319f0b3..bc66fbd4 100644 --- a/package.json +++ b/package.json @@ -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%", diff --git a/src/common/parser/ApcParser.test.ts b/src/common/parser/ApcParser.test.ts index 3401baab..f337e5c0 100644 --- a/src/common/parser/ApcParser.test.ts +++ b/src/common/parser/ApcParser.test.ts @@ -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'); diff --git a/src/common/parser/DcsParser.test.ts b/src/common/parser/DcsParser.test.ts index c6cc0994..0c09199a 100644 --- a/src/common/parser/DcsParser.test.ts +++ b/src/common/parser/DcsParser.test.ts @@ -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'); diff --git a/src/common/parser/OscParser.test.ts b/src/common/parser/OscParser.test.ts index b88171c8..cad73352 100644 --- a/src/common/parser/OscParser.test.ts +++ b/src/common/parser/OscParser.test.ts @@ -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');