You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
4.2 KiB
106 lines
4.2 KiB
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
var async = require("async");
|
|
require('colors');
|
|
var Compiler = require("./compiler.js");
|
|
var Deployer = require("./deployer.js");
|
|
var runTest = require("./testRunner.js");
|
|
var Web3 = require("web3");
|
|
var remix_simulator_1 = __importDefault(require("remix-simulator"));
|
|
var createWeb3Provider = function () {
|
|
var web3 = new Web3();
|
|
web3.setProvider(new remix_simulator_1.default());
|
|
return web3;
|
|
};
|
|
function runTestSources(contractSources, testCallback, resultCallback, finalCallback, importFileCb, opts) {
|
|
opts = opts || {};
|
|
var web3 = opts.web3 || createWeb3Provider();
|
|
var accounts = opts.accounts || null;
|
|
async.waterfall([
|
|
function getAccountList(next) {
|
|
if (accounts)
|
|
return next();
|
|
web3.eth.getAccounts(function (_err, _accounts) {
|
|
accounts = _accounts;
|
|
next();
|
|
});
|
|
},
|
|
function compile(next) {
|
|
Compiler.compileContractSources(contractSources, importFileCb, next);
|
|
},
|
|
function deployAllContracts(compilationResult, next) {
|
|
Deployer.deployAll(compilationResult, web3, function (err, contracts) {
|
|
if (err) {
|
|
next(err);
|
|
}
|
|
next(null, compilationResult, contracts);
|
|
});
|
|
},
|
|
function determineTestContractsToRun(compilationResult, contracts, next) {
|
|
var contractsToTest = [];
|
|
var contractsToTestDetails = [];
|
|
var _loop_1 = function (filename) {
|
|
if (filename.indexOf('_test.sol') < 0) {
|
|
return "continue";
|
|
}
|
|
Object.keys(compilationResult[filename]).forEach(function (contractName) {
|
|
contractsToTestDetails.push(compilationResult[filename][contractName]);
|
|
contractsToTest.push(contractName);
|
|
});
|
|
};
|
|
for (var filename in compilationResult) {
|
|
_loop_1(filename);
|
|
}
|
|
next(null, contractsToTest, contractsToTestDetails, contracts);
|
|
},
|
|
function runTests(contractsToTest, contractsToTestDetails, contracts, next) {
|
|
var totalPassing = 0;
|
|
var totalFailing = 0;
|
|
var totalTime = 0;
|
|
var errors = [];
|
|
var _testCallback = function (result) {
|
|
if (result.type === 'testFailure') {
|
|
errors.push(result);
|
|
}
|
|
testCallback(result);
|
|
};
|
|
var _resultsCallback = function (_err, result, cb) {
|
|
resultCallback(_err, result, function () { });
|
|
totalPassing += result.passingNum;
|
|
totalFailing += result.failureNum;
|
|
totalTime += result.timePassed;
|
|
cb();
|
|
};
|
|
async.eachOfLimit(contractsToTest, 1, function (contractName, index, cb) {
|
|
runTest(contractName, contracts(contractName), contractsToTestDetails[index], { accounts: accounts }, _testCallback, function (err, result) {
|
|
if (err) {
|
|
return cb(err);
|
|
}
|
|
_resultsCallback(null, result, cb);
|
|
});
|
|
}, function (err) {
|
|
if (err) {
|
|
return next(err);
|
|
}
|
|
var finalResults = {
|
|
totalPassing: 0,
|
|
totalFailing: 0,
|
|
totalTime: 0,
|
|
errors: [],
|
|
};
|
|
finalResults.totalPassing = totalPassing || 0;
|
|
finalResults.totalFailing = totalFailing || 0;
|
|
finalResults.totalTime = totalTime || 0;
|
|
finalResults.errors = [];
|
|
errors.forEach(function (error, _index) {
|
|
finalResults.errors.push({ context: error.context, value: error.value, message: error.errMsg });
|
|
});
|
|
next(null, finalResults);
|
|
});
|
|
}
|
|
], finalCallback);
|
|
}
|
|
module.exports = runTestSources;
|
|
//# sourceMappingURL=runTestSources.js.map
|