|
| 1 | +/* |
| 2 | + TruffleConfig Paths |
| 3 | + =========================== |
| 4 | + build_directory /users/myPath/to/someProject/build |
| 5 | + contracts_directory. /users/myPath/to/someProject/contracts |
| 6 | + working_directory /users/myPath/to/someProject |
| 7 | + contracts_build_directory /users/myPath/to/someProject/build/contracts |
| 8 | +
|
| 9 | + Compilation options override |
| 10 | + ---------------------------- |
| 11 | + build_directory /users/myPath/to/someProject/.coverageArtifacts |
| 12 | + contracts_directory /users/myPath/to/someProject/.coverageContracts |
| 13 | +
|
| 14 | + Test options override |
| 15 | + --------------------- |
| 16 | + contracts_directory, /users/myPath/to/someProject/.coverageContracts |
| 17 | + contracts_build_directory, /users/myPath/to/someProject/.coverageArtifact/contracts |
| 18 | + provider ganache.provider (w/ vm resolved) |
| 19 | + logger add filter for unused variables... |
| 20 | +
|
| 21 | + Truffle Lib API |
| 22 | + =============== |
| 23 | + load: const truffle = require("truffle") (or require("sc-truffle")) |
| 24 | + compilation: await truffle.contracts.compile(config) |
| 25 | + test: await truffle.test.run(config) |
| 26 | +*/ |
| 27 | + |
| 28 | +const SolidityCoverage = require('./../lib/app.js'); |
| 29 | + |
| 30 | +module.exports = async (config) => |
| 31 | + let truffle; |
| 32 | + |
| 33 | + try { |
| 34 | + truffle = loadTruffleLibrary(); |
| 35 | + |
| 36 | + const coverageConfigPath = coveragePaths.config(config) |
| 37 | + const coverageConfig = req.silent(coverageConfigPath) || {}; |
| 38 | + |
| 39 | + app.contractsDir = coveragePaths.contracts(config, coverageConfig); |
| 40 | + |
| 41 | + const app = new SolidityCoverage(coverageConfig); |
| 42 | + app.generateEnvironment(); |
| 43 | + app.instrument(config.contracts_directory); |
| 44 | + |
| 45 | + // Compile instrumented sources / optimization off |
| 46 | + config.contracts_directory = app.contractsDir; |
| 47 | + config.build_directory = coveragePaths.artifacts.root(config, coverageConfig); |
| 48 | + config.contracts_build_directory = coveragePaths.artifacts.contracts(config, coverageConfig); |
| 49 | + config.compilers.solc.settings.optimization.enabled = false; |
| 50 | + await truffle.contracts.compile(config); |
| 51 | + |
| 52 | + // Test using compiled, instrumented sources |
| 53 | + config.provider = await app.getCoverageProvider(); |
| 54 | + try { |
| 55 | + await truffle.test.run(config) |
| 56 | + } catch (err) { |
| 57 | + app.testsErrored = true; |
| 58 | + } |
| 59 | + |
| 60 | + app.generateCoverage(); |
| 61 | + |
| 62 | + } catch(err){ |
| 63 | + return app.cleanUp(err); |
| 64 | + } |
| 65 | + |
| 66 | + return app.cleanUp(); |
| 67 | +} |
| 68 | + |
| 69 | +// -------------------------------------- Helpers -------------------------------------------------- |
| 70 | +function loadTruffleLibrary(){ |
| 71 | + |
| 72 | + try { return require("truffle") } catch(err) {}; |
| 73 | + try { return require("sc-truffle")} catch(err) {}; |
| 74 | + |
| 75 | + throw new Error(utils.errors.NO_TRUFFLE_LIB) |
| 76 | +} |
| 77 | + |
| 78 | +const coveragePaths = { |
| 79 | + contracts: (t, c) => path.join(path.dirname(t.contracts_directory), c.contractsDirName)), |
| 80 | + config: (t) => path.join(t.working_directory, '.solcover.js'), |
| 81 | + |
| 82 | + artifacts: { |
| 83 | + root: (t, c) => path.join(path.dirname(t.build_directory), c.artifactsDirName), |
| 84 | + contracts: (c, t) => path.join(c.build_directory, path.basename(t.contracts_build_directory)) |
| 85 | + } |
| 86 | +} |
| 87 | + |
| 88 | + |
0 commit comments