diff --git a/src/harness/test262Runner.ts b/src/harness/test262Runner.ts index 756ff82ef97..0473a1c5aec 100644 --- a/src/harness/test262Runner.ts +++ b/src/harness/test262Runner.ts @@ -27,9 +27,12 @@ class Test262BaselineRunner extends RunnerBase { } function getFlagName(flags: any, f: number): any { - if (f === 0) return 0; + if (f === 0) { + return 0; + } + var result = ""; - ts.forEach(Object.getOwnPropertyNames(flags),(v: any) => { + ts.forEach(Object.getOwnPropertyNames(flags), (v: any) => { if (isFinite(v)) { v = +v; if (f === +v) { @@ -51,45 +54,56 @@ class Test262BaselineRunner extends RunnerBase { function getParserContextFlagName(f: number) { return getFlagName((ts).ParserContextFlags, f); } function serializeNode(n: ts.Node): any { - var o = { kind: getKindName(n.kind) }; - ts.forEach(Object.getOwnPropertyNames(n), i => { - switch (i) { + var o: any = { kind: getKindName(n.kind) }; + + ts.forEach(Object.getOwnPropertyNames(n), propertyName => { + switch (propertyName) { case "parent": case "symbol": case "locals": case "localSymbol": case "kind": case "semanticDiagnostics": - case "parseDiagnostics": - case "grammarDiagnostics": - return undefined; + case "id": + case "nodeCount": + case "symbolCount": + case "identifierCount": + // Blacklist of items we never put in the baseline file. + break; case "flags": - (o)[i] = getNodeFlagName(n.flags); - return undefined; + // Print out flags with their enum names. + o[propertyName] = getNodeFlagName(n.flags); + break; case "parserContextFlags": - (o)[i] = getParserContextFlagName(n.parserContextFlags); - return undefined; + o[propertyName] = getParserContextFlagName(n.parserContextFlags); + break; case "nextContainer": if (n.nextContainer) { - (o)[i] = { kind: n.nextContainer.kind, pos: n.nextContainer.pos, end: n.nextContainer.end }; - return undefined; + o[propertyName] = { kind: n.nextContainer.kind, pos: n.nextContainer.pos, end: n.nextContainer.end }; } + break; case "text": - if (n.kind === ts.SyntaxKind.SourceFile) return undefined; + // Include 'text' field for identifiers/literals, but not for source files. + if (n.kind !== ts.SyntaxKind.SourceFile) { + o[propertyName] = (n)[propertyName]; + } + break; default: - (o)[i] = ((n)[i]); + o[propertyName] = (n)[propertyName]; } + return undefined; }); + return o; } - return JSON.stringify(file,(k, v) => { + return JSON.stringify(file, (k, v) => { return (v && typeof v.pos === "number") ? serializeNode(v) : v; }, " "); }