From db8b4c06296f6eedb1a3273567313dba4358ba91 Mon Sep 17 00:00:00 2001 From: Anton Gilgur Date: Mon, 25 Jul 2022 20:51:16 -0400 Subject: [PATCH] test: add `print-diagnostics` spec - test all the different categories and formattings - full unit test coverage now! (except for `index`/`tscache`, which integration tests cover) --- CONTRIBUTING.md | 1 - __tests__/print-diagnostics.spec.ts | 57 +++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 __tests__/print-diagnostics.spec.ts diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 37b61305..3aea1419 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -31,7 +31,6 @@ Use the [standard GitHub process](https://docs.github.com/en/pull-requests/colla 1. `npm run test:coverage` to run tests and output a test coverage report While this repo now has an assortment of unit tests and integration tests, it still needs more integration tests with various scenarios and expected outcomes. -Test coverage improvements for existing files and untested files is needed as well. ### Building and Self-Build diff --git a/__tests__/print-diagnostics.spec.ts b/__tests__/print-diagnostics.spec.ts new file mode 100644 index 00000000..844a1f0d --- /dev/null +++ b/__tests__/print-diagnostics.spec.ts @@ -0,0 +1,57 @@ +import { test, expect } from "@jest/globals"; +import * as ts from "typescript"; +import { red } from "colors/safe"; + +import { makeContext } from "./fixtures/context"; +import { setTypescriptModule } from "../src/tsproxy"; +import { printDiagnostics } from "../src/print-diagnostics"; + +setTypescriptModule(ts); + +const diagnostic = { + flatMessage: "Compiler option 'include' requires a value of type Array.", + formatted: "\x1B[91merror\x1B[0m\x1B[90m TS5024: \x1B[0mCompiler option 'include' requires a value of type Array.\n", + category: ts.DiagnosticCategory.Error, + code: 5024, + type: 'config' +}; + +test("print-diagnostics - categories", () => { + const context = makeContext(); + + printDiagnostics(context, [diagnostic]); + expect(context.error).toHaveBeenLastCalledWith(diagnostic.formatted); + + printDiagnostics(context, [{ ...diagnostic, category: ts.DiagnosticCategory.Warning } ]); + expect(context.warn).toHaveBeenLastCalledWith(diagnostic.formatted); + + printDiagnostics(context, [{ ...diagnostic, category: ts.DiagnosticCategory.Suggestion } ]); // default case + expect(context.warn).toHaveBeenLastCalledWith(diagnostic.formatted); + + printDiagnostics(context, [{ ...diagnostic, category: ts.DiagnosticCategory.Message } ]); + expect(context.info).toHaveBeenLastCalledWith(diagnostic.formatted); + + // should match exactly, no more + expect(context.error).toBeCalledTimes(1); + expect(context.warn).toBeCalledTimes(2) + expect(context.info).toBeCalledTimes(1); + expect(context.debug).toBeCalledTimes(0); +}); + +test("print-diagnostics - formatting / style", () => { + const context = makeContext(); + const category = "error"; // string version + + printDiagnostics(context, [diagnostic], false); + expect(context.error).toHaveBeenLastCalledWith(`${diagnostic.type} ${category} TS${diagnostic.code}: ${red(diagnostic.flatMessage)}`); + + const fileLine = "0" + printDiagnostics(context, [{ ...diagnostic, fileLine }], false); + expect(context.error).toHaveBeenLastCalledWith(`${fileLine}: ${diagnostic.type} ${category} TS${diagnostic.code}: ${red(diagnostic.flatMessage)}`); + + // should match exactly, no more + expect(context.error).toBeCalledTimes(2); + expect(context.warn).toBeCalledTimes(0) + expect(context.info).toBeCalledTimes(0); + expect(context.debug).toBeCalledTimes(0); +});