microsoft/typespec

Public

mirrored from https://github.com/microsoft/typespecAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
61ba17d2d29dedf4553b21a055aa6b442a304688

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

e2e/e2e-tests.js

128lines · modecode

1// @ts-check
2import { existsSync, readdirSync, rmSync, writeFileSync } from "fs";
3import { join } from "path";
4import { repoRoot, run } from "../eng/scripts/helpers.js";
5
6const e2eTestDir = join(repoRoot, "e2e");
7const npxCmd = process.platform === "win32" ? "npx.cmd" : "npx";
8
9function main() {
10 printInfo();
11 cleanE2EDirectory();
12 const packages = packPackages();
13
14 console.log("Check packages exists");
15 run("ls", [`${repoRoot}/common/temp/artifacts/packages`]);
16
17 console.log("Check cli is working");
18 runTypeSpec(packages["@typespec/compiler"], ["--help"], { cwd: e2eTestDir });
19 console.log("Cli is working");
20
21 testBasicLatest(packages);
22 testBasicCurrentTgz(packages);
23}
24main();
25
26function printInfo() {
27 console.log("-".repeat(100));
28 console.log("Npm Version: ");
29 run("npm", ["-v"]);
30 console.log("-".repeat(100));
31}
32
33function cleanE2EDirectory() {
34 run("git", ["clean", "-xfd"], { cwd: e2eTestDir });
35}
36
37function packPackages() {
38 run("rush", ["publish", "--publish", "--pack", "--include-all"]);
39 const outputFolder = join(repoRoot, "common/temp/artifacts/packages");
40 const files = readdirSync(outputFolder);
41 console.log("Built packages:", files);
42
43 function resolvePackage(start) {
44 const pkgName = files.find((x) => x.startsWith(start));
45 if (pkgName === undefined) {
46 throw new Error(`Cannot resolve package starting with "${start}"`);
47 }
48 return join(outputFolder, pkgName);
49 }
50
51 return {
52 "@typespec/compiler": resolvePackage("typespec-compiler-"),
53 "@typespec/openapi": resolvePackage("typespec-openapi-"),
54 "@typespec/openapi3": resolvePackage("typespec-openapi3-"),
55 "@typespec/http": resolvePackage("typespec-http-"),
56 "@typespec/rest": resolvePackage("typespec-rest-"),
57 "@typespec/versioning": resolvePackage("typespec-versioning-"),
58 };
59}
60
61function runTypeSpec(compilerTgz, args, options) {
62 run(npxCmd, ["-y", "-p", compilerTgz, "tsp", ...args], { ...options });
63}
64
65function testBasicLatest(packages) {
66 const basicLatestDir = join(e2eTestDir, "basic-latest");
67 const outputDir = join(basicLatestDir, "tsp-output");
68 console.log("Clearing basic-latest output");
69 rmSync(outputDir, { recursive: true, force: true });
70 console.log("Cleared basic-latest output");
71
72 console.log("Installing basic-latest dependencies");
73 runTypeSpec(packages["@typespec/compiler"], ["install"], { cwd: basicLatestDir });
74 console.log("Installed basic-latest dependencies");
75
76 console.log("Running tsp compile .");
77 runTypeSpec(packages["@typespec/compiler"], ["compile", ".", "--emit", "@typespec/openapi3"], {
78 cwd: basicLatestDir,
79 });
80 console.log("Completed tsp compile .");
81
82 expectOpenApiOutput(outputDir);
83}
84
85function testBasicCurrentTgz(packages) {
86 const basicCurrentDir = join(e2eTestDir, "basic-current");
87 const outputDir = join(basicCurrentDir, "tsp-output");
88 console.log("Clearing basic-current");
89 rmSync(outputDir, { recursive: true, force: true });
90 console.log("Cleared basic-current");
91
92 console.log("Generating package.json for basic-current");
93 const packageJson = {
94 name: "@typespec/e2e-test-basic-current",
95 dependencies: {
96 "@typespec/compiler": packages["@typespec/compiler"],
97 "@typespec/http": packages["@typespec/http"],
98 "@typespec/rest": packages["@typespec/rest"],
99 "@typespec/openapi": packages["@typespec/openapi"],
100 "@typespec/openapi3": packages["@typespec/openapi3"],
101 "@typespec/versioning": packages["@typespec/versioning"],
102 },
103 private: true,
104 };
105 writeFileSync(join(basicCurrentDir, "package.json"), JSON.stringify(packageJson, null, 2));
106 console.log("Generated package.json for basic-current");
107
108 console.log("Installing basic-current dependencies");
109 runTypeSpec(packages["@typespec/compiler"], ["install"], { cwd: basicCurrentDir });
110 console.log("Installed basic-current dependencies");
111
112 console.log(`Running tsp compile . in "${basicCurrentDir}"`);
113 runTypeSpec(packages["@typespec/compiler"], ["compile", ".", "--emit", "@typespec/openapi3"], {
114 cwd: basicCurrentDir,
115 });
116 console.log("Completed tsp compile .");
117
118 expectOpenApiOutput(outputDir);
119}
120
121function expectOpenApiOutput(outputDir) {
122 const expectedOutputFile = join(outputDir, "@typespec/openapi3/openapi.yaml");
123 if (existsSync(expectedOutputFile)) {
124 console.log("Output created successfully.");
125 } else {
126 throw new Error(`Test failed to produce openapi output at "${expectedOutputFile}"`);
127 }
128}
129