@@ -14,8 +14,8 @@ let page: Page;
1414const width = 800 ;
1515const height = 600 ;
1616
17- describe ( 'Parser Integration Tests' , function ( ) : void {
18- before ( async function ( ) : Promise < any > {
17+ describe ( 'Parser Integration Tests' , function ( ) : void {
18+ before ( async function ( ) : Promise < any > {
1919 const browserType = getBrowserType ( ) ;
2020 browser = await browserType . launch ( {
2121 headless : process . argv . indexOf ( '--headless' ) !== - 1
@@ -39,7 +39,35 @@ describe('Parser Integration Tests', function(): void {
3939 }, '');
4040 ` ) ;
4141 await writeSync ( page , '\x1b[38;5;123mparams\x1b[38:2::50:100:150msubparams' ) ;
42- assert . deepEqual ( await page . evaluate ( `(() => window._customCsiHandlerParams)();` ) , [ [ 38 , 5 , 123 ] , [ 38 , [ 2 , - 1 , 50 , 100 , 150 ] ] ] ) ;
42+ assert . deepEqual ( await page . evaluate ( `window._customCsiHandlerParams` ) , [
43+ [ 38 , 5 , 123 ] ,
44+ [ 38 , [ 2 , - 1 , 50 , 100 , 150 ] ]
45+ ] ) ;
46+ } ) ;
47+ it ( 'async' , async ( ) => {
48+ await page . evaluate ( `
49+ window.term.reset();
50+ window._customCsiHandlerCallStack = [];
51+ const _customCsiHandlerA = window.term.parser.registerCsiHandler({intermediates:'+', final: 'Z'}, params => {
52+ window._customCsiHandlerCallStack.push(['A', params]);
53+ return false;
54+ });
55+ const _customCsiHandlerB = window.term.parser.registerCsiHandler({intermediates:'+', final: 'Z'}, async params => {
56+ await new Promise(res => setTimeout(res, 50));
57+ window._customCsiHandlerCallStack.push(['B', params]);
58+ return false;
59+ });
60+ const _customCsiHandlerC = window.term.parser.registerCsiHandler({intermediates:'+', final: 'Z'}, params => {
61+ window._customCsiHandlerCallStack.push(['C', params]);
62+ return false;
63+ });
64+ ` ) ;
65+ await writeSync ( page , '\x1b[1;2+Z' ) ;
66+ assert . deepEqual ( await page . evaluate ( `window._customCsiHandlerCallStack` ) , [
67+ [ 'C' , [ 1 , 2 ] ] ,
68+ [ 'B' , [ 1 , 2 ] ] ,
69+ [ 'A' , [ 1 , 2 ] ]
70+ ] ) ;
4371 } ) ;
4472 } ) ;
4573 describe ( 'registerDcsHandler' , ( ) => {
@@ -61,7 +89,35 @@ describe('Parser Integration Tests', function(): void {
6189 });
6290 ` ) ;
6391 await writeSync ( page , '\x1bP1;2+psome data\x1b\\\\' ) ;
64- assert . deepEqual ( await page . evaluate ( `(() => window._customDcsHandlerCallStack)();` ) , [ [ 'C' , [ 1 , 2 ] , 'some data' ] , [ 'B' , [ 1 , 2 ] , 'some data' ] ] ) ;
92+ assert . deepEqual ( await page . evaluate ( `window._customDcsHandlerCallStack` ) , [
93+ [ 'C' , [ 1 , 2 ] , 'some data' ] ,
94+ [ 'B' , [ 1 , 2 ] , 'some data' ]
95+ ] ) ;
96+ } ) ;
97+ it ( 'async' , async ( ) => {
98+ await page . evaluate ( `
99+ window.term.reset();
100+ window._customDcsHandlerCallStack = [];
101+ const _customDcsHandlerA = window.term.parser.registerDcsHandler({intermediates:'+', final: 'q'}, (data, params) => {
102+ window._customDcsHandlerCallStack.push(['A', params, data]);
103+ return false;
104+ });
105+ const _customDcsHandlerB = window.term.parser.registerDcsHandler({intermediates:'+', final: 'q'}, async (data, params) => {
106+ await new Promise(res => setTimeout(res, 50));
107+ window._customDcsHandlerCallStack.push(['B', params, data]);
108+ return false;
109+ });
110+ const _customDcsHandlerC = window.term.parser.registerDcsHandler({intermediates:'+', final: 'q'}, (data, params) => {
111+ window._customDcsHandlerCallStack.push(['C', params, data]);
112+ return false;
113+ });
114+ ` ) ;
115+ await writeSync ( page , '\x1bP1;2+qsome data\x1b\\\\' ) ;
116+ assert . deepEqual ( await page . evaluate ( `window._customDcsHandlerCallStack` ) , [
117+ [ 'C' , [ 1 , 2 ] , 'some data' ] ,
118+ [ 'B' , [ 1 , 2 ] , 'some data' ] ,
119+ [ 'A' , [ 1 , 2 ] , 'some data' ]
120+ ] ) ;
65121 } ) ;
66122 } ) ;
67123 describe ( 'registerEscHandler' , ( ) => {
@@ -83,7 +139,28 @@ describe('Parser Integration Tests', function(): void {
83139 });
84140 ` ) ;
85141 await writeSync ( page , '\x1b(B' ) ;
86- assert . deepEqual ( await page . evaluate ( `(() => window._customEscHandlerCallStack)();` ) , [ 'C' , 'B' ] ) ;
142+ assert . deepEqual ( await page . evaluate ( `window._customEscHandlerCallStack` ) , [ 'C' , 'B' ] ) ;
143+ } ) ;
144+ it ( 'async' , async ( ) => {
145+ await page . evaluate ( `
146+ window.term.reset();
147+ window._customEscHandlerCallStack = [];
148+ const _customEscHandlerA = window.term.parser.registerEscHandler({intermediates:'(', final: 'Z'}, () => {
149+ window._customEscHandlerCallStack.push('A');
150+ return false;
151+ });
152+ const _customEscHandlerB = window.term.parser.registerEscHandler({intermediates:'(', final: 'Z'}, async () => {
153+ await new Promise(res => setTimeout(res, 50));
154+ window._customEscHandlerCallStack.push('B');
155+ return false;
156+ });
157+ const _customEscHandlerC = window.term.parser.registerEscHandler({intermediates:'(', final: 'Z'}, () => {
158+ window._customEscHandlerCallStack.push('C');
159+ return false;
160+ });
161+ ` ) ;
162+ await writeSync ( page , '\x1b(Z' ) ;
163+ assert . deepEqual ( await page . evaluate ( `window._customEscHandlerCallStack` ) , [ 'C' , 'B' , 'A' ] ) ;
87164 } ) ;
88165 } ) ;
89166 describe ( 'registerOscHandler' , ( ) => {
@@ -105,7 +182,35 @@ describe('Parser Integration Tests', function(): void {
105182 });
106183 ` ) ;
107184 await writeSync ( page , '\x1b]1234;some data\x07' ) ;
108- assert . deepEqual ( await page . evaluate ( `(() => window._customOscHandlerCallStack)();` ) , [ [ 'C' , 'some data' ] , [ 'B' , 'some data' ] ] ) ;
185+ assert . deepEqual ( await page . evaluate ( `window._customOscHandlerCallStack` ) , [
186+ [ 'C' , 'some data' ] ,
187+ [ 'B' , 'some data' ]
188+ ] ) ;
189+ } ) ;
190+ it ( 'async' , async ( ) => {
191+ await page . evaluate ( `
192+ window.term.reset();
193+ window._customOscHandlerCallStack = [];
194+ const _customOscHandlerA = window.term.parser.registerOscHandler(666, data => {
195+ window._customOscHandlerCallStack.push(['A', data]);
196+ return false;
197+ });
198+ const _customOscHandlerB = window.term.parser.registerOscHandler(666, async data => {
199+ await new Promise(res => setTimeout(res, 50));
200+ window._customOscHandlerCallStack.push(['B', data]);
201+ return false;
202+ });
203+ const _customOscHandlerC = window.term.parser.registerOscHandler(666, data => {
204+ window._customOscHandlerCallStack.push(['C', data]);
205+ return false;
206+ });
207+ ` ) ;
208+ await writeSync ( page , '\x1b]666;some data\x07' ) ;
209+ assert . deepEqual ( await page . evaluate ( `window._customOscHandlerCallStack` ) , [
210+ [ 'C' , 'some data' ] ,
211+ [ 'B' , 'some data' ] ,
212+ [ 'A' , 'some data' ]
213+ ] ) ;
109214 } ) ;
110215 } ) ;
111216} ) ;
0 commit comments