193fb6ee3Sopenharmony_ciimport { Tokenizer } from 'parse5'; 293fb6ee3Sopenharmony_ciimport { generateTokenizationTests } from 'parse5-test-utils/utils/generate-tokenization-tests.js'; 393fb6ee3Sopenharmony_ciimport * as assert from 'node:assert'; 493fb6ee3Sopenharmony_ci 593fb6ee3Sopenharmony_ciconst dataPath = new URL('../../../../test/data/html5lib-tests/tokenizer', import.meta.url); 693fb6ee3Sopenharmony_ciconst tokenizerOpts = { 793fb6ee3Sopenharmony_ci sourceCodeLocationInfo: true, 893fb6ee3Sopenharmony_ci}; 993fb6ee3Sopenharmony_ci 1093fb6ee3Sopenharmony_cigenerateTokenizationTests('Tokenizer', dataPath.pathname, (handler) => new Tokenizer(tokenizerOpts, handler)); 1193fb6ee3Sopenharmony_ci 1293fb6ee3Sopenharmony_cifunction noop(): void { 1393fb6ee3Sopenharmony_ci // Noop 1493fb6ee3Sopenharmony_ci} 1593fb6ee3Sopenharmony_ci 1693fb6ee3Sopenharmony_cidescribe('Tokenizer methods', () => { 1793fb6ee3Sopenharmony_ci it('should pause and resume', () => { 1893fb6ee3Sopenharmony_ci let count = 0; 1993fb6ee3Sopenharmony_ci const tokenizer = new Tokenizer(tokenizerOpts, { 2093fb6ee3Sopenharmony_ci onComment(t): void { 2193fb6ee3Sopenharmony_ci assert.strictEqual(t.data, 'INIT'); 2293fb6ee3Sopenharmony_ci assert.strictEqual(count++, 0); 2393fb6ee3Sopenharmony_ci 2493fb6ee3Sopenharmony_ci tokenizer.pause(); 2593fb6ee3Sopenharmony_ci tokenizer.write('<!doctype foo>', false); 2693fb6ee3Sopenharmony_ci }, 2793fb6ee3Sopenharmony_ci onDoctype(t): void { 2893fb6ee3Sopenharmony_ci assert.strictEqual(t.name, 'foo'); 2993fb6ee3Sopenharmony_ci assert.strictEqual(count++, 2); 3093fb6ee3Sopenharmony_ci 3193fb6ee3Sopenharmony_ci expect(() => tokenizer.resume()).toThrow('Parser was already resumed'); 3293fb6ee3Sopenharmony_ci tokenizer.write('<next>', true); 3393fb6ee3Sopenharmony_ci }, 3493fb6ee3Sopenharmony_ci onStartTag(t): void { 3593fb6ee3Sopenharmony_ci assert.strictEqual(count++, 3); 3693fb6ee3Sopenharmony_ci assert.strictEqual(t.tagName, 'next'); 3793fb6ee3Sopenharmony_ci }, 3893fb6ee3Sopenharmony_ci onEndTag: noop, 3993fb6ee3Sopenharmony_ci onEof: noop, 4093fb6ee3Sopenharmony_ci onCharacter: noop, 4193fb6ee3Sopenharmony_ci onNullCharacter: noop, 4293fb6ee3Sopenharmony_ci onWhitespaceCharacter: noop, 4393fb6ee3Sopenharmony_ci }); 4493fb6ee3Sopenharmony_ci 4593fb6ee3Sopenharmony_ci tokenizer.write('<!--INIT-->', false); 4693fb6ee3Sopenharmony_ci assert.strictEqual(count++, 1); 4793fb6ee3Sopenharmony_ci expect(tokenizer).toHaveProperty('paused', true); 4893fb6ee3Sopenharmony_ci 4993fb6ee3Sopenharmony_ci tokenizer.resume(); 5093fb6ee3Sopenharmony_ci 5193fb6ee3Sopenharmony_ci assert.strictEqual(count, 4); 5293fb6ee3Sopenharmony_ci }); 5393fb6ee3Sopenharmony_ci 5493fb6ee3Sopenharmony_ci it('should throw if setting the state to an unknown value', () => { 5593fb6ee3Sopenharmony_ci const tokenizer = new Tokenizer(tokenizerOpts, {} as any); 5693fb6ee3Sopenharmony_ci tokenizer.state = -1; 5793fb6ee3Sopenharmony_ci expect(() => tokenizer.write('foo', true)).toThrow('Unknown state'); 5893fb6ee3Sopenharmony_ci }); 5993fb6ee3Sopenharmony_ci}); 60