@patchworkdev/common
Version:
Patchwork Development Kit
79 lines (78 loc) • 3.75 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 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");
}
});
}
}
});