@patchworkdev/common
Version:
Patchwork Development Kit
48 lines (47 loc) • 2.55 kB
JavaScript
;
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);
});
}
});