From fbc42e65c11fb48a5e2735e45c6ee9bfbf20054f Mon Sep 17 00:00:00 2001 From: Knut Wannheden Date: Tue, 24 Sep 2024 14:45:02 +0200 Subject: [PATCH] Make parser tests a bit nicer --- openrewrite/package-lock.json | 2 +- openrewrite/package.json | 1 + openrewrite/test/javascript/parser.test.ts | 41 +++++++++++++++++++--- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/openrewrite/package-lock.json b/openrewrite/package-lock.json index 8c30bee..1ddad21 100644 --- a/openrewrite/package-lock.json +++ b/openrewrite/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "dependencies": { "@types/node": "^22.5.4", + "dedent": "^1.5.3", "diff": "^7.0.0", "uuid": "^10.0.0" }, @@ -1816,7 +1817,6 @@ "version": "1.5.3", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", - "dev": true, "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" diff --git a/openrewrite/package.json b/openrewrite/package.json index 892d8c9..c22b43e 100644 --- a/openrewrite/package.json +++ b/openrewrite/package.json @@ -19,6 +19,7 @@ }, "dependencies": { "@types/node": "^22.5.4", + "dedent": "^1.5.3", "diff": "^7.0.0", "uuid": "^10.0.0" }, diff --git a/openrewrite/test/javascript/parser.test.ts b/openrewrite/test/javascript/parser.test.ts index d1fd96c..fd980c0 100644 --- a/openrewrite/test/javascript/parser.test.ts +++ b/openrewrite/test/javascript/parser.test.ts @@ -2,23 +2,54 @@ import {InMemoryExecutionContext, ParserInput} from '../../src/core'; import {JavaScriptParser} from "../../src/javascript"; import * as J from "../../src/java/tree"; import * as JS from "../../src/javascript/tree"; +import dedent from "dedent"; + +describe('Parser API', () => { + const parser = JavaScriptParser.builder().build(); -describe('JavaScriptParser', () => { test('parseInputs', () => { - const parser = JavaScriptParser.builder().build(); - const [sourceFile] = parser.parseInputs([new ParserInput('foo.ts', null, true, () => Buffer.from('1', 'utf8'))], null, new InMemoryExecutionContext()); - console.log(sourceFile); + const [sourceFile] = parser.parseInputs( + [new ParserInput('foo.ts', null, true, () => Buffer.from('1', 'utf8'))], + null, + new InMemoryExecutionContext() + ) as Iterable; + expect(sourceFile).toBeDefined(); }); test('parseStrings', () => { - const parser = JavaScriptParser.builder().build(); const [sourceFile] = parser.parseStrings(` const c = 1; /* c1*/ /*c2 */const d = 1;`) as Iterable; expect(sourceFile).toBeDefined(); + }); +}); + +describe('LST mapping', () => { + const parser = JavaScriptParser.builder().build(); + + test('parseInputs', () => { + const sourceFile = javaScript('1'); + expect(sourceFile).toBeDefined(); + expect(sourceFile.statements).toHaveLength(1); + expect(sourceFile.statements[0]).toBeInstanceOf(JS.ExpressionStatement); + }); + + test('parseStrings', () => { + //language=typescript + const sourceFile = javaScript(` + const c = 1; + /* c1*/ /*c2 */ + const d = 1; + `); + expect(sourceFile).toBeDefined(); expect(sourceFile.statements).toHaveLength(2); sourceFile.statements.forEach(statement => { expect(statement).toBeInstanceOf(J.Unknown); }) }); + + function javaScript(source: string): JS.CompilationUnit { + const [sourceFile] = parser.parseStrings(dedent(source)) as Iterable; + return sourceFile; + } });