mirror of
https://github.com/pezkuwichain/revive.git
synced 2026-04-23 01:28:01 +00:00
126 lines
5.2 KiB
JavaScript
126 lines
5.2 KiB
JavaScript
import { expect } from 'chai';
|
|
import { compile } from '../examples/node/revive.js';
|
|
import { fileURLToPath } from 'url';
|
|
import path from 'path';
|
|
import fs from 'fs';
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = path.dirname(__filename);
|
|
|
|
function loadFixture(fixture) {
|
|
const fixturePath = path.resolve(__dirname, `../fixtures/${fixture}`);
|
|
return JSON.parse(fs.readFileSync(fixturePath, 'utf-8'));
|
|
}
|
|
|
|
describe('Compile Function Tests', function () {
|
|
it('should successfully compile valid Solidity code', async function () {
|
|
const standardInput = loadFixture('storage.json')
|
|
|
|
const result = await compile(standardInput);
|
|
expect(result).to.be.a('string');
|
|
const output = JSON.parse(result);
|
|
expect(output).to.have.property('contracts');
|
|
expect(output.contracts['fixtures/storage.sol']).to.have.property('Storage');
|
|
expect(output.contracts['fixtures/storage.sol'].Storage).to.have.property('abi');
|
|
expect(output.contracts['fixtures/storage.sol'].Storage).to.have.property('evm');
|
|
expect(output.contracts['fixtures/storage.sol'].Storage.evm).to.have.property('bytecode');
|
|
});
|
|
|
|
if (typeof globalThis.Bun == 'undefined') {
|
|
// Running this test with Bun on a Linux host causes:
|
|
// RuntimeError: Out of bounds memory access (evaluating 'getWasmTableEntry(index)(a1, a2, a3, a4, a5)')
|
|
// Once this issue is resolved, the test will be re-enabled.
|
|
it('should successfully compile large Solidity code', async function () {
|
|
const standardInput = loadFixture('token.json')
|
|
|
|
const result = await compile(standardInput);
|
|
expect(result).to.be.a('string');
|
|
const output = JSON.parse(result);
|
|
expect(output).to.have.property('contracts');
|
|
expect(output.contracts['fixtures/token.sol']).to.have.property('MyToken');
|
|
expect(output.contracts['fixtures/token.sol'].MyToken).to.have.property('abi');
|
|
expect(output.contracts['fixtures/token.sol'].MyToken).to.have.property('evm');
|
|
expect(output.contracts['fixtures/token.sol'].MyToken.evm).to.have.property('bytecode');
|
|
});
|
|
|
|
it("should successfully compile a valid Solidity contract that instantiates the token contracts", async function () {
|
|
const standardInput = loadFixture("instantiate_tokens.json");
|
|
|
|
const result = await compile(standardInput);
|
|
expect(result).to.be.a("string");
|
|
const output = JSON.parse(result);
|
|
expect(output).to.have.property("contracts");
|
|
expect(output.contracts["fixtures/instantiate_tokens.sol"]).to.have.property(
|
|
"TokensFactory",
|
|
);
|
|
expect(output.contracts["fixtures/instantiate_tokens.sol"].TokensFactory).to.have.property(
|
|
"abi",
|
|
);
|
|
expect(output.contracts["fixtures/instantiate_tokens.sol"].TokensFactory).to.have.property(
|
|
"evm",
|
|
);
|
|
expect(
|
|
output.contracts["fixtures/instantiate_tokens.sol"].TokensFactory.evm,
|
|
).to.have.property("bytecode");
|
|
});
|
|
}
|
|
|
|
it('should throw an error for invalid Solidity code', async function () {
|
|
const standardInput = loadFixture('invalid_contract_content.json')
|
|
|
|
const result = await compile(standardInput);
|
|
expect(result).to.be.a('string');
|
|
const output = JSON.parse(result);
|
|
expect(output).to.have.property('errors');
|
|
expect(output.errors).to.be.an('array');
|
|
expect(output.errors.length).to.be.greaterThan(0);
|
|
expect(output.errors[0].type).to.exist;
|
|
expect(output.errors[0].type).to.contain("ParserError");
|
|
});
|
|
|
|
it('should return not found error for missing imports', async function () {
|
|
const standardInput = loadFixture('missing_import.json')
|
|
|
|
const result = await compile(standardInput);
|
|
const output = JSON.parse(result);
|
|
expect(output).to.have.property('errors');
|
|
expect(output.errors).to.be.an('array');
|
|
expect(output.errors.length).to.be.greaterThan(0);
|
|
expect(output.errors[0].message).to.exist;
|
|
expect(output.errors[0].message).to.include('Source "nonexistent/console.sol" not found');
|
|
});
|
|
|
|
it("should successfully compile a valid Solidity contract that instantiates another contract", async function () {
|
|
const standardInput = loadFixture("instantiate.json");
|
|
|
|
const result = await compile(standardInput);
|
|
expect(result).to.be.a("string");
|
|
const output = JSON.parse(result);
|
|
expect(output).to.have.property("contracts");
|
|
expect(output.contracts["fixtures/instantiate.sol"]).to.have.property(
|
|
"ChildContract",
|
|
);
|
|
expect(output.contracts["fixtures/instantiate.sol"].ChildContract).to.have.property(
|
|
"abi",
|
|
);
|
|
expect(output.contracts["fixtures/instantiate.sol"].ChildContract).to.have.property(
|
|
"evm",
|
|
);
|
|
expect(
|
|
output.contracts["fixtures/instantiate.sol"].ChildContract.evm,
|
|
).to.have.property("bytecode");
|
|
expect(output.contracts["fixtures/instantiate.sol"]).to.have.property(
|
|
"MainContract",
|
|
);
|
|
expect(output.contracts["fixtures/instantiate.sol"].MainContract).to.have.property(
|
|
"abi",
|
|
);
|
|
expect(output.contracts["fixtures/instantiate.sol"].MainContract).to.have.property(
|
|
"evm",
|
|
);
|
|
expect(
|
|
output.contracts["fixtures/instantiate.sol"].MainContract.evm,
|
|
).to.have.property("bytecode");
|
|
});
|
|
|
|
});
|