UNPKG

@patchworkdev/common

Version:

Patchwork Development Kit

48 lines (47 loc) 2.55 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const contractSchemaJsonParser_1 = require("../codegen/contractSchemaJsonParser"); const tsContractConfigGen_1 = require("./tsContractConfigGen"); const contractSchema_1 = require("../codegen/contractSchema"); describe("TypeScriptContractConfigGen", () => { const testDirectory = "./src/codegen/test_data"; const files = fs_1.default.readdirSync(testDirectory); const jsonFiles = files.filter((file) => file.endsWith(".json")); const tsFiles = files.filter((file) => file.endsWith(".ts")); const groupedFiles = jsonFiles.reduce((acc, jsonFile) => { const baseName = path_1.default.basename(jsonFile, ".json"); const tsFile = baseName + ".ts"; if (tsFiles.includes(tsFile)) { acc[baseName] = { json: path_1.default.join(testDirectory, jsonFile), ts: path_1.default.join(testDirectory, tsFile), }; } return acc; }, {}); for (const [baseName, files] of Object.entries(groupedFiles)) { it(`should generate matching TypeScript for ${baseName}`, () => { // 1. Construct ContractSchema from JSON const jsonString = fs_1.default.readFileSync(files.json, "utf8"); const jsonData = JSON.parse(jsonString); const contractConfig = (0, contractSchemaJsonParser_1.parseJson)(jsonData); // 2. Call TSContractConfigGen with the ContractSchema const generator = new tsContractConfigGen_1.TSContractConfigGen(); const generatedTypeScript = generator.gen(new contractSchema_1.ContractSchemaImpl(contractConfig)); // 3. Read the existing TypeScript file const existingTypeScript = fs_1.default.readFileSync(files.ts, "utf8"); // 4. Compare generated TypeScript with existing TypeScript const normalizeTypeScript = (content) => content.replace(/\s/g, '') .replace(/\/\*[\s\S]*?\*\//g, '') .replace(/\/\/.*/g, ''); const normalizedGenerated = normalizeTypeScript(generatedTypeScript); const normalizedExisting = normalizeTypeScript(existingTypeScript); expect(normalizedGenerated).toEqual(normalizedExisting); }); } });