summaryrefslogtreecommitdiff
path: root/cli/tests/testdata/compiler_api_test.ts
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2022-05-17 19:50:31 +0200
committerGitHub <noreply@github.com>2022-05-17 13:50:31 -0400
commitf57aac77ff9ce514730504066daca0a61a959d32 (patch)
tree34be59895172b93a255c933d0f2e579dbf3a3ccc /cli/tests/testdata/compiler_api_test.ts
parent9766399a3fefcab322051b4a7af41f9d40d79150 (diff)
BREAKING: Remove unstable Deno.emit and Deno.formatDiagnostics APIs (#14463)
Diffstat (limited to 'cli/tests/testdata/compiler_api_test.ts')
-rw-r--r--cli/tests/testdata/compiler_api_test.ts664
1 files changed, 0 insertions, 664 deletions
diff --git a/cli/tests/testdata/compiler_api_test.ts b/cli/tests/testdata/compiler_api_test.ts
deleted file mode 100644
index 81f049ac1..000000000
--- a/cli/tests/testdata/compiler_api_test.ts
+++ /dev/null
@@ -1,664 +0,0 @@
-// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
-import {
- assert,
- assertEquals,
- assertRejects,
- assertStringIncludes,
-} from "../../../test_util/std/testing/asserts.ts";
-
-Deno.test({
- name: "Deno.emit() - sources provided",
- async fn() {
- const { diagnostics, files, ignoredOptions, stats } = await Deno.emit(
- "/foo.ts",
- {
- sources: {
- "/foo.ts": `import * as bar from "./bar.ts";\n\nconsole.log(bar);\n`,
- "/bar.ts": `export const bar = "bar";\n`,
- },
- },
- );
- assertEquals(diagnostics.length, 0);
- assert(!ignoredOptions);
- assertEquals(stats.length, 12);
- const keys = Object.keys(files).sort();
- assert(keys[0].endsWith("/bar.ts.js"));
- assert(keys[1].endsWith("/bar.ts.js.map"));
- assert(keys[2].endsWith("/foo.ts.js"));
- assert(keys[3].endsWith("/foo.ts.js.map"));
- },
-});
-
-Deno.test({
- name: "Deno.emit() - no sources provided",
- async fn() {
- const { diagnostics, files, ignoredOptions, stats } = await Deno.emit(
- "./subdir/mod1.ts",
- );
- assertEquals(diagnostics.length, 0);
- assert(!ignoredOptions);
- assertEquals(stats.length, 12);
- const keys = Object.keys(files).sort();
- assertEquals(keys.length, 6);
- assert(keys[0].endsWith("subdir/mod1.ts.js"));
- assert(keys[1].endsWith("subdir/mod1.ts.js.map"));
- },
-});
-
-Deno.test({
- name: "Deno.emit() - data url",
- async fn() {
- const data =
- "data:application/javascript;base64,Y29uc29sZS5sb2coImhlbGxvIHdvcmxkIik7";
- const { diagnostics, files, ignoredOptions, stats } = await Deno.emit(data);
- assertEquals(diagnostics.length, 0);
- assert(!ignoredOptions);
- assertEquals(stats.length, 0);
- const keys = Object.keys(files);
- assertEquals(keys.length, 1);
- assertEquals(keys[0], data);
- assertStringIncludes(files[keys[0]], 'console.log("hello world");');
- },
-});
-
-Deno.test({
- name: "Deno.emit() - compiler options effects emit",
- async fn() {
- const { diagnostics, files, ignoredOptions, stats } = await Deno.emit(
- "/foo.ts",
- {
- compilerOptions: {
- module: "amd",
- sourceMap: false,
- },
- sources: { "/foo.ts": `export const foo = "foo";` },
- },
- );
- assertEquals(diagnostics.length, 0);
- assert(!ignoredOptions);
- assertEquals(stats.length, 12);
- const keys = Object.keys(files);
- assertEquals(keys.length, 1);
- const key = keys[0];
- assert(key.endsWith("/foo.ts.js"));
- assert(files[key].startsWith("define("));
- },
-});
-
-Deno.test({
- name: "Deno.emit() - pass lib in compiler options",
- async fn() {
- const { diagnostics, files, ignoredOptions, stats } = await Deno.emit(
- "file:///foo.ts",
- {
- compilerOptions: {
- lib: ["dom", "es2018", "deno.ns"],
- },
- sources: {
- "file:///foo.ts": `console.log(document.getElementById("foo"));
- console.log(Deno.args);`,
- },
- },
- );
- assertEquals(diagnostics.length, 0);
- assert(!ignoredOptions);
- assertEquals(stats.length, 12);
- const keys = Object.keys(files).sort();
- assertEquals(keys, ["file:///foo.ts.js", "file:///foo.ts.js.map"]);
- },
-});
-
-Deno.test({
- name: "Deno.emit() - type references can be loaded",
- async fn() {
- const { diagnostics, files, ignoredOptions, stats } = await Deno.emit(
- "file:///a.ts",
- {
- sources: {
- "file:///a.ts": `/// <reference types="./b.d.ts" />
- const b = new B();
- console.log(b.b);`,
- "file:///b.d.ts": `declare class B {
- b: string;
- }`,
- },
- },
- );
- assertEquals(diagnostics.length, 0);
- assert(!ignoredOptions);
- assertEquals(stats.length, 12);
- const keys = Object.keys(files).sort();
- assertEquals(keys, ["file:///a.ts.js", "file:///a.ts.js.map"]);
- },
-});
-
-Deno.test({
- name: "Deno.emit() - compilerOptions.types",
- async fn() {
- const { diagnostics, files, ignoredOptions, stats } = await Deno.emit(
- "file:///a.ts",
- {
- compilerOptions: {
- types: ["file:///b.d.ts"],
- },
- sources: {
- "file:///a.ts": `const b = new B();
- console.log(b.b);`,
- "file:///b.d.ts": `declare class B {
- b: string;
- }`,
- },
- },
- );
- assertEquals(diagnostics.length, 0);
- assert(!ignoredOptions);
- assertEquals(stats.length, 12);
- const keys = Object.keys(files).sort();
- assertEquals(keys, ["file:///a.ts.js", "file:///a.ts.js.map"]);
- },
-});
-
-Deno.test({
- name: "Deno.emit() - import maps",
- async fn() {
- const { diagnostics, files, ignoredOptions, stats } = await Deno.emit(
- "file:///a.ts",
- {
- importMap: {
- imports: {
- "b": "./b.ts",
- },
- },
- importMapPath: "file:///import-map.json",
- sources: {
- "file:///a.ts": `import * as b from "b"
- console.log(b);`,
- "file:///b.ts": `export const b = "b";`,
- },
- },
- );
- assertEquals(diagnostics.length, 0);
- assert(!ignoredOptions);
- assertEquals(stats.length, 12);
- const keys = Object.keys(files).sort();
- assertEquals(
- keys,
- [
- "file:///a.ts.js",
- "file:///a.ts.js.map",
- "file:///b.ts.js",
- "file:///b.ts.js.map",
- ],
- );
- },
-});
-
-Deno.test({
- name: "Deno.emit() - allowSyntheticDefaultImports true by default",
- async fn() {
- const { diagnostics, files, ignoredOptions } = await Deno.emit(
- "file:///a.ts",
- {
- sources: {
- "file:///a.ts": `import b from "./b.js";\n`,
- "file:///b.js":
- `/// <reference types="./b.d.ts";\n\nconst b = "b";\n\nexport default b;\n`,
- "file:///b.d.ts": `declare const b: "b";\nexport = b;\n`,
- },
- },
- );
- assertEquals(diagnostics.length, 0);
- assert(!ignoredOptions);
- const keys = Object.keys(files).sort();
- assertEquals(keys, [
- "file:///a.ts.js",
- "file:///a.ts.js.map",
- "file:///b.js",
- ]);
- },
-});
-
-Deno.test({
- name: "Deno.emit() - no check",
- async fn() {
- const { diagnostics, files, ignoredOptions, stats } = await Deno.emit(
- "/foo.ts",
- {
- check: false,
- sources: {
- "/foo.ts": `export enum Foo { Foo, Bar, Baz };\n`,
- },
- },
- );
- assertEquals(diagnostics.length, 0);
- assert(!ignoredOptions);
- assertEquals(stats.length, 3);
- const keys = Object.keys(files).sort();
- assert(keys[0].endsWith("/foo.ts.js"));
- assert(keys[1].endsWith("/foo.ts.js.map"));
- assert(files[keys[0]].startsWith("export var Foo;"));
- },
-});
-
-Deno.test({
- name: "Deno.emit() - no check - config effects emit",
- async fn() {
- const { diagnostics, files, ignoredOptions, stats } = await Deno.emit(
- "/foo.ts",
- {
- check: false,
- compilerOptions: { removeComments: true },
- sources: {
- "/foo.ts":
- `/** This is JSDoc */\nexport enum Foo { Foo, Bar, Baz };\n`,
- },
- },
- );
- assertEquals(diagnostics.length, 0);
- assert(!ignoredOptions);
- assertEquals(stats.length, 3);
- const keys = Object.keys(files).sort();
- assert(keys[0].endsWith("/foo.ts.js"));
- assert(keys[1].endsWith("/foo.ts.js.map"));
- assert(!files[keys[0]].includes("This is JSDoc"));
- },
-});
-
-Deno.test({
- name: "Deno.emit() - bundle as module script - with sources",
- async fn() {
- const { diagnostics, files, ignoredOptions, stats } = await Deno.emit(
- "/foo.ts",
- {
- bundle: "module",
- sources: {
- "/foo.ts": `export * from "./bar.ts";\n`,
- "/bar.ts": `export const bar = "bar";\n`,
- },
- },
- );
- assertEquals(diagnostics.length, 0);
- assert(!ignoredOptions);
- assertEquals(stats.length, 12);
- assertEquals(
- Object.keys(files).sort(),
- ["deno:///bundle.js", "deno:///bundle.js.map"].sort(),
- );
- assert(files["deno:///bundle.js"].includes(`const bar = "bar"`));
- },
-});
-
-Deno.test({
- name: "Deno.emit() - bundle as module script - no sources",
- async fn() {
- const { diagnostics, files, ignoredOptions, stats } = await Deno.emit(
- "./subdir/mod1.ts",
- {
- bundle: "module",
- },
- );
- assertEquals(diagnostics.length, 0);
- assert(!ignoredOptions);
- assertEquals(stats.length, 12);
- assertEquals(
- Object.keys(files).sort(),
- ["deno:///bundle.js", "deno:///bundle.js.map"].sort(),
- );
- assert(files["deno:///bundle.js"].length);
- },
-});
-
-Deno.test({
- name: "Deno.emit() - bundle as module script - include js modules",
- async fn() {
- const { diagnostics, files, ignoredOptions, stats } = await Deno.emit(
- "/foo.js",
- {
- bundle: "module",
- sources: {
- "/foo.js": `export * from "./bar.js";\n`,
- "/bar.js": `export const bar = "bar";\n`,
- },
- },
- );
- assertEquals(diagnostics.length, 0);
- assert(!ignoredOptions);
- assertEquals(stats.length, 0);
- assertEquals(
- Object.keys(files).sort(),
- ["deno:///bundle.js.map", "deno:///bundle.js"].sort(),
- );
- assert(files["deno:///bundle.js"].includes(`const bar = "bar"`));
- },
-});
-
-Deno.test({
- name: "Deno.emit() - generates diagnostics",
- async fn() {
- const { diagnostics, files } = await Deno.emit(
- "/foo.ts",
- {
- sources: {
- "/foo.ts": `document.getElementById("foo");`,
- },
- },
- );
- assertEquals(diagnostics.length, 1);
- const keys = Object.keys(files).sort();
- assert(keys[0].endsWith("/foo.ts.js"));
- assert(keys[1].endsWith("/foo.ts.js.map"));
- },
-});
-
-// See https://github.com/denoland/deno/issues/6908
-Deno.test({
- name: "Deno.emit() - invalid syntax does not panic",
- async fn() {
- const { diagnostics } = await Deno.emit("/main.js", {
- sources: {
- "/main.js": `
- export class Foo {
- constructor() {
- console.log("foo");
- }
- export get() {
- console.log("bar");
- }
- }`,
- },
- });
- assertEquals(diagnostics.length, 1);
- assert(
- diagnostics[0].messageText!.startsWith(
- "The module's source code could not be parsed: Unexpected token `get`. Expected * for generator, private key, identifier or async at file:",
- ),
- );
- },
-});
-
-Deno.test({
- name: 'Deno.emit() - allows setting of "importsNotUsedAsValues"',
- async fn() {
- const { diagnostics } = await Deno.emit("/a.ts", {
- sources: {
- "/a.ts": `import { B } from "./b.ts";
- const b: B = { b: "b" };`,
- "/b.ts": `export interface B {
- b:string;
- };`,
- },
- compilerOptions: {
- importsNotUsedAsValues: "error",
- },
- });
- assert(diagnostics);
- assertEquals(diagnostics.length, 1);
- assert(diagnostics[0].messageText);
- assert(diagnostics[0].messageText.includes("This import is never used"));
- },
-});
-
-Deno.test({
- name: "Deno.emit() - Unknown media type does not panic",
- async fn() {
- await Deno.emit("https://example.com/foo", {
- sources: {
- "https://example.com/foo": `let foo: string = "foo";`,
- },
- });
- },
-});
-
-Deno.test({
- name: "Deno.emit() - non-normalized specifier and source can compile",
- async fn() {
- const specifier = "https://example.com/foo//bar.ts";
- const { files } = await Deno.emit(specifier, {
- sources: {
- [specifier]: `export let foo: string = "foo";`,
- },
- });
- assertEquals(files[`${specifier}.js`], 'export let foo = "foo";\n');
- assert(typeof files[`${specifier}.js.map`] === "string");
- },
-});
-
-Deno.test({
- name: `Deno.emit() - bundle as classic script iife`,
- async fn() {
- const { diagnostics, files } = await Deno.emit("/a.ts", {
- bundle: "classic",
- sources: {
- "/a.ts": `import { b } from "./b.ts";
- console.log(b);`,
- "/b.ts": `export const b = "b";`,
- },
- });
- const ignoreDirecives = [
- "// deno-fmt-ignore-file",
- "// deno-lint-ignore-file",
- "// This code was bundled using `deno bundle` and it's not recommended to edit it manually",
- "",
- "",
- ].join("\n");
- assert(diagnostics);
- assertEquals(diagnostics.length, 0);
- assertEquals(Object.keys(files).length, 2);
- assert(
- files["deno:///bundle.js"].startsWith(
- ignoreDirecives + "(function() {\n",
- ),
- );
- assert(files["deno:///bundle.js"].endsWith("})();\n"));
- assert(files["deno:///bundle.js.map"]);
- },
-});
-
-Deno.test({
- name: `Deno.emit() - throws descriptive error when unable to load import map`,
- async fn() {
- await assertRejects(
- async () => {
- await Deno.emit("/a.ts", {
- bundle: "classic",
- sources: {
- "/a.ts": `console.log("hello");`,
- },
- importMapPath: "file:///import_map_does_not_exist.json",
- });
- },
- Error,
- "Unable to load 'file:///import_map_does_not_exist.json' import map",
- );
- },
-});
-
-Deno.test({
- name: `Deno.emit() - support source maps with bundle option`,
- async fn() {
- {
- const { diagnostics, files } = await Deno.emit("/a.ts", {
- bundle: "classic",
- sources: {
- "/a.ts": `import { b } from "./b.ts";
- console.log(b);`,
- "/b.ts": `export const b = "b";`,
- },
- compilerOptions: {
- inlineSourceMap: true,
- sourceMap: false,
- },
- });
- assert(diagnostics);
- assertEquals(diagnostics.length, 0);
- assertEquals(Object.keys(files).length, 1);
- assertStringIncludes(files["deno:///bundle.js"], "sourceMappingURL");
- }
-
- const { diagnostics, files } = await Deno.emit("/a.ts", {
- bundle: "classic",
- sources: {
- "/a.ts": `import { b } from "./b.ts";
- console.log(b);`,
- "/b.ts": `export const b = "b";`,
- },
- });
- assert(diagnostics);
- assertEquals(diagnostics.length, 0);
- assertEquals(Object.keys(files).length, 2);
- assert(files["deno:///bundle.js"]);
- assert(files["deno:///bundle.js.map"]);
- },
-});
-
-Deno.test({
- name: `Deno.emit() - graph errors as diagnostics`,
- ignore: Deno.build.os === "windows",
- async fn() {
- const { diagnostics } = await Deno.emit("/a.ts", {
- sources: {
- "/a.ts": `import { b } from "./b.ts";
- console.log(b);`,
- },
- });
- assert(diagnostics);
- assertEquals(diagnostics, [
- {
- category: 1,
- code: 2305,
- start: { line: 0, character: 9 },
- end: { line: 0, character: 10 },
- messageText:
- `Module '"deno:///missing_dependency.d.ts"' has no exported member 'b'.`,
- messageChain: null,
- source: null,
- sourceLine: 'import { b } from "./b.ts";',
- fileName: "file:///a.ts",
- relatedInformation: null,
- },
- {
- category: 1,
- code: 900001,
- start: null,
- end: null,
- messageText: 'Module not found "file:///b.ts".',
- messageChain: null,
- source: null,
- sourceLine: null,
- fileName: "file:///b.ts",
- relatedInformation: null,
- },
- ]);
- assert(
- Deno.formatDiagnostics(diagnostics).includes(
- 'Module not found "file:///b.ts".',
- ),
- );
- },
-});
-
-Deno.test({
- name: "Deno.emit() - no check respects inlineSources compiler option",
- async fn() {
- const { files } = await Deno.emit(
- "file:///a.ts",
- {
- check: false,
- compilerOptions: {
- types: ["file:///b.d.ts"],
- inlineSources: true,
- },
- sources: {
- "file:///a.ts": `const b = new B();
- console.log(b.b);`,
- "file:///b.d.ts": `declare class B {
- b: string;
- }`,
- },
- },
- );
- const sourceMap: { sourcesContent?: string[] } = JSON.parse(
- files["file:///a.ts.js.map"],
- );
- assert(sourceMap.sourcesContent);
- assertEquals(sourceMap.sourcesContent.length, 1);
- },
-});
-
-Deno.test({
- name: "Deno.emit() - JSX import source pragma",
- async fn() {
- const { files } = await Deno.emit(
- "file:///a.tsx",
- {
- sources: {
- "file:///a.tsx": `/** @jsxImportSource https://example.com/jsx */
-
- export function App() {
- return (
- <div><></></div>
- );
- }`,
- "https://example.com/jsx/jsx-runtime": `export function jsx(
- _type,
- _props,
- _key,
- _source,
- _self,
- ) {}
- export const jsxs = jsx;
- export const jsxDEV = jsx;
- export const Fragment = Symbol("Fragment");
- console.log("imported", import.meta.url);
- `,
- },
- },
- );
- assert(files["file:///a.tsx.js"]);
- assert(
- files["file:///a.tsx.js"].startsWith(
- `import { Fragment as _Fragment, jsx as _jsx } from "https://example.com/jsx/jsx-runtime";\n`,
- ),
- );
- },
-});
-
-Deno.test({
- name: "Deno.emit() - JSX import source no pragma",
- async fn() {
- const { files } = await Deno.emit(
- "file:///a.tsx",
- {
- compilerOptions: {
- jsx: "react-jsx",
- jsxImportSource: "https://example.com/jsx",
- },
- sources: {
- "file:///a.tsx": `export function App() {
- return (
- <div><></></div>
- );
- }`,
- "https://example.com/jsx/jsx-runtime": `export function jsx(
- _type,
- _props,
- _key,
- _source,
- _self,
- ) {}
- export const jsxs = jsx;
- export const jsxDEV = jsx;
- export const Fragment = Symbol("Fragment");
- console.log("imported", import.meta.url);
- `,
- },
- },
- );
- assert(files["file:///a.tsx.js"]);
- assert(
- files["file:///a.tsx.js"].startsWith(
- `import { Fragment as _Fragment, jsx as _jsx } from "https://example.com/jsx/jsx-runtime";\n`,
- ),
- );
- },
-});