UNPKG

@patchworkdev/common

Version:

Patchwork Development Kit

55 lines (47 loc) 2.3 kB
import fs from "fs"; import path from "path"; import { ContractSchemaImpl } from "../codegen/contractSchema"; import { parseJson } from "../codegen/contractSchemaJsonParser"; import { JSONContractConfigGen } from "./jsonContractConfigGen"; type GroupedFiles = { [key: string]: { json: string; sol: string; }; }; describe("JSONContractConfigGen", () => { const testDirectory: string = "./src/codegen/test_data"; const files: string[] = fs.readdirSync(testDirectory); const jsonFiles: string[] = files.filter((file: string) => file.endsWith(".json")); const solFiles: string[] = files.filter((file: string) => file.endsWith(".sol")); const groupedFiles: GroupedFiles = jsonFiles.reduce<GroupedFiles>( (acc: GroupedFiles, jsonFile: string) => { const baseName: string = path.basename(jsonFile, ".json"); acc[baseName] = { json: path.join(testDirectory, jsonFile), sol: path.join(testDirectory, baseName + ".sol"), }; return acc; }, {} ); for (const [baseName, files] of Object.entries(groupedFiles)) { if (solFiles.includes(baseName + ".sol")) { it(`should generate matching JSON for ${baseName}`, () => { // 1. Construct ContractSchema from JSON const originalJsonString: string = fs.readFileSync(files.json, "utf8"); const originalJson = JSON.parse(originalJsonString); const contractConfig = parseJson(originalJson); // 2. Call JSONContractConfigGen with the ContractSchema const generator = new JSONContractConfigGen(); const generatedJsonString: string = generator.gen(new ContractSchemaImpl(contractConfig)); // 3. Compare generated JSON with original JSON const generatedJson = JSON.parse(generatedJsonString); // Remove whitespace and newlines for comparison const normalizedOriginal = JSON.stringify(originalJson).replace(/\s/g, ''); const normalizedGenerated = JSON.stringify(generatedJson).replace(/\s/g, ''); expect(normalizedGenerated).toEqual(normalizedOriginal); }); } } });