UNPKG

6.34 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6var async_1 = __importDefault(require("async"));
7var fileSystem_1 = __importDefault(require("./fileSystem"));
8var testRunner_1 = require("./testRunner");
9var colors_1 = __importDefault(require("colors"));
10var compiler_1 = require("./compiler");
11var deployer_1 = require("./deployer");
12/**
13 * @dev run test contract files (used for CLI)
14 * @param filepath Path of file
15 * @param isDirectory True, if path is a directory
16 * @param web3 Web3
17 * @param finalCallback optional callback to run finally
18 * @param opts Options
19 */
20function runTestFiles(filepath, isDirectory, web3, finalCallback, opts) {
21 if (finalCallback === void 0) { finalCallback = function () { }; }
22 opts = opts || {};
23 var sourceASTs = {};
24 var Signale = require('signale').Signale;
25 // signale configuration
26 var options = {
27 types: {
28 result: {
29 badge: '\t✓',
30 label: '',
31 color: 'greenBright'
32 },
33 name: {
34 badge: '\n\t◼',
35 label: '',
36 color: 'white'
37 },
38 error: {
39 badge: '\t✘',
40 label: '',
41 color: 'redBright'
42 }
43 }
44 };
45 var signale = new Signale(options);
46 var accounts = opts['accounts'] || null;
47 async_1.default.waterfall([
48 function getAccountList(next) {
49 if (accounts)
50 return next(null);
51 web3.eth.getAccounts(function (_err, _accounts) {
52 accounts = _accounts;
53 next(null);
54 });
55 },
56 function compile(next) {
57 compiler_1.compileFileOrFiles(filepath, isDirectory, { accounts: accounts }, next);
58 },
59 function deployAllContracts(compilationResult, asts, next) {
60 // Extract AST of test contract file source
61 for (var filename in asts) {
62 if (filename.endsWith('_test.sol'))
63 sourceASTs[filename] = asts[filename].ast;
64 }
65 deployer_1.deployAll(compilationResult, web3, false, function (err, contracts) {
66 if (err) {
67 next(err);
68 }
69 next(null, compilationResult, contracts);
70 });
71 },
72 function determineTestContractsToRun(compilationResult, contracts, next) {
73 var contractsToTest = [];
74 var contractsToTestDetails = [];
75 var gatherContractsFrom = function (filename) {
76 if (!filename.endsWith('_test.sol')) {
77 return;
78 }
79 try {
80 Object.keys(compilationResult[filename]).forEach(function (contractName) {
81 contractsToTest.push(contractName);
82 contractsToTestDetails.push(compilationResult[filename][contractName]);
83 });
84 }
85 catch (e) {
86 console.error(e);
87 }
88 };
89 if (isDirectory) {
90 fileSystem_1.default.walkSync(filepath, function (foundpath) {
91 gatherContractsFrom(foundpath);
92 });
93 }
94 else {
95 gatherContractsFrom(filepath);
96 }
97 next(null, contractsToTest, contractsToTestDetails, contracts);
98 },
99 function runTests(contractsToTest, contractsToTestDetails, contracts, next) {
100 var totalPassing = 0;
101 var totalFailing = 0;
102 var totalTime = 0;
103 var errors = [];
104 var _testCallback = function (err, result) {
105 if (err)
106 throw err;
107 if (result.type === 'contract') {
108 signale.name(result.value.white);
109 }
110 else if (result.type === 'testPass') {
111 signale.result(result.value);
112 }
113 else if (result.type === 'testFailure') {
114 signale.result(result.value.red);
115 errors.push(result);
116 }
117 };
118 var _resultsCallback = function (_err, result, cb) {
119 totalPassing += result.passingNum;
120 totalFailing += result.failureNum;
121 totalTime += result.timePassed;
122 cb();
123 };
124 async_1.default.eachOfLimit(contractsToTest, 1, function (contractName, index, cb) {
125 try {
126 var fileAST = sourceASTs[contracts[contractName]['filename']];
127 testRunner_1.runTest(contractName, contracts[contractName], contractsToTestDetails[index], fileAST, { accounts: accounts }, _testCallback, function (err, result) {
128 if (err) {
129 console.log(err);
130 return cb(err);
131 }
132 _resultsCallback(null, result, cb);
133 });
134 }
135 catch (e) {
136 console.error(e);
137 }
138 }, function (err) {
139 if (err) {
140 return next(err);
141 }
142 console.log('\n');
143 if (totalPassing > 0) {
144 console.log(colors_1.default.green(totalPassing + ' passing ') + colors_1.default.grey('(' + totalTime + 's)'));
145 }
146 if (totalFailing > 0) {
147 console.log(colors_1.default.red(totalFailing + ' failing'));
148 }
149 console.log('');
150 errors.forEach(function (error, index) {
151 console.log(' ' + (index + 1) + ') ' + error.context + ' ' + error.value);
152 console.log('');
153 console.log(colors_1.default.red('\t error: ' + error.errMsg));
154 });
155 console.log('');
156 next();
157 });
158 }
159 ], finalCallback);
160}
161exports.runTestFiles = runTestFiles;
162//# sourceMappingURL=runTestFiles.js.map
\No newline at end of file