import JSONParser from "../../src/jsonparser.js"; import Tokenizer from "../../src/tokenizer.js"; import TokenParser from "../../src/tokenparser.js"; import { ParsedTokenInfo } from "../../src/utils/types/parsedTokenInfo.js"; import { ParsedElementInfo } from "../../src/utils/types/parsedElementInfo.js"; export type TestData = { value: string | string[] | Iterable; paths?: string[]; expected: unknown[]; }; type ParseableData = string | Iterable; type InputData = T | T[] | (() => Generator); function iterableData(data: InputData): Iterable { if (typeof data === "function") return (data as () => Generator)(); if (Array.isArray(data)) return data; return [data]; } export function runJSONParserTest( jsonparser: JSONParser, data: InputData, onValue: (parsedElementInfo: ParsedElementInfo) => void = () => { /* Do nothing */ }, ) { jsonparser.onValue = onValue; for (const value of iterableData(data)) { jsonparser.write(value); } // jsonparser.end(); } export function runTokenizerTest( tokenizer: Tokenizer, data: InputData, onToken: (parsedElementInfo: ParsedTokenInfo) => void = () => { /* Do nothing */ }, ) { tokenizer.onToken = onToken; for (const value of iterableData(data)) { tokenizer.write(value); } tokenizer.end(); } export function runTokenParserTest( tokenParser: TokenParser, data: InputData>, onValue: (parsedElementInfo: ParsedElementInfo) => void = () => { /* Do nothing */ }, ) { tokenParser.onValue = onValue; for (const value of iterableData(data)) { tokenParser.write(value); } tokenParser.end(); }