193fb6ee3Sopenharmony_ciimport type { ParserOptions, TreeAdapterTypeMap } from 'parse5'; 293fb6ee3Sopenharmony_ciimport { ParserStream } from '../../lib/index.js'; 393fb6ee3Sopenharmony_ciimport { makeChunks } from 'parse5-test-utils/utils/common.js'; 493fb6ee3Sopenharmony_ci 593fb6ee3Sopenharmony_ciexport function parseChunked<T extends TreeAdapterTypeMap>( 693fb6ee3Sopenharmony_ci test: { input: string; fragmentContext?: T['parentNode'] }, 793fb6ee3Sopenharmony_ci opts: ParserOptions<T>, 893fb6ee3Sopenharmony_ci minChunkSize?: number, 993fb6ee3Sopenharmony_ci maxChunkSize?: number 1093fb6ee3Sopenharmony_ci): { node: TreeAdapterTypeMap['document']; chunks: string[] } { 1193fb6ee3Sopenharmony_ci const parserStream = test.fragmentContext 1293fb6ee3Sopenharmony_ci ? ParserStream.getFragmentStream(test.fragmentContext, opts) 1393fb6ee3Sopenharmony_ci : new ParserStream(opts); 1493fb6ee3Sopenharmony_ci const chunks = makeChunks(test.input, minChunkSize, maxChunkSize); 1593fb6ee3Sopenharmony_ci 1693fb6ee3Sopenharmony_ci // NOTE: set small waterline for testing purposes 1793fb6ee3Sopenharmony_ci parserStream.parser.tokenizer.preprocessor.bufferWaterline = 8; 1893fb6ee3Sopenharmony_ci 1993fb6ee3Sopenharmony_ci for (let i = 0; i < chunks.length - 1; i++) { 2093fb6ee3Sopenharmony_ci parserStream.write(chunks[i]); 2193fb6ee3Sopenharmony_ci } 2293fb6ee3Sopenharmony_ci 2393fb6ee3Sopenharmony_ci parserStream.end(chunks[chunks.length - 1]); 2493fb6ee3Sopenharmony_ci 2593fb6ee3Sopenharmony_ci return { 2693fb6ee3Sopenharmony_ci node: test.fragmentContext ? parserStream.getFragment() : parserStream.document, 2793fb6ee3Sopenharmony_ci chunks, 2893fb6ee3Sopenharmony_ci }; 2993fb6ee3Sopenharmony_ci} 30