UNPKG

@patchworkdev/common

Version:

Patchwork Development Kit

79 lines (78 loc) 3.75 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 ts_node_1 = require("ts-node"); const contractSchema_1 = require("./contractSchema"); const contractSchemaJsonParser_1 = require("./contractSchemaJsonParser"); const mainContractGen_1 = require("./mainContractGen"); describe('generateSolidityCodeFromJSON', () => { const testDirectory = './src/codegen/test_data'; const files = fs_1.default.readdirSync(testDirectory); const jsonFiles = files.filter((file) => file.endsWith('.json')); const solFiles = files.filter((file) => file.endsWith('.sol')); const gen = new mainContractGen_1.MainContractGen(); const groupedFiles = jsonFiles.reduce((acc, jsonFile) => { const baseName = path_1.default.basename(jsonFile, '.json'); acc[baseName] = { json: path_1.default.join(testDirectory, jsonFile), sol: path_1.default.join(testDirectory, baseName + 'Generated.sol'), }; return acc; }, {}); for (const [baseName, files] of Object.entries(groupedFiles)) { if (solFiles.includes(baseName + '.sol')) { it(`should generate the correct Solidity code for ${baseName}.json`, () => { const jsonData = JSON.parse(fs_1.default.readFileSync(files.json, 'utf8')); const solidityExpected = fs_1.default.readFileSync(files.sol, 'utf8'); const solidityGenerated = gen.gen(new contractSchema_1.ContractSchemaImpl((0, contractSchemaJsonParser_1.parseJson)(jsonData))); expect(solidityGenerated).toEqual(solidityExpected); }); } } }); describe('generateSolidityCodeFromTS', () => { (0, ts_node_1.register)({ "compilerOptions": { "rootDir": "src", "outDir": "dist" } }); const testDirectory = './src/codegen/test_data'; const files = fs_1.default.readdirSync(testDirectory); const tsFiles = files.filter((file) => file.endsWith('.ts')); const solFiles = files.filter((file) => file.endsWith('.sol')); const gen = new mainContractGen_1.MainContractGen(); const groupedFiles = tsFiles.reduce((acc, tsFile) => { const baseName = path_1.default.basename(tsFile, '.ts'); acc[baseName] = { ts: path_1.default.join(testDirectory, tsFile).replace('src/codegen/', './'), js: path_1.default.join(testDirectory, baseName + '.js'), sol: path_1.default.join(testDirectory, baseName + 'Generated.sol'), }; return acc; }, {}); for (const [baseName, files] of Object.entries(groupedFiles)) { if (solFiles.includes(baseName + '.sol')) { it(`should generate the correct Solidity code for ${baseName}.ts`, () => { const solidityExpected = fs_1.default.readFileSync(files.sol, 'utf8'); let result; try { console.log("ts-node compile start", files.ts); result = require(files.ts); console.log("ts-node compile success"); const t = result.default; const solidityGenerated = gen.gen(new contractSchema_1.ContractSchemaImpl(t)); expect(solidityGenerated).toEqual(solidityExpected); } catch (err) { console.log("Error:", err.message); throw new Error("ts-node compile failed"); } }); } } });