|
14 | 14 | Test options override |
15 | 15 | --------------------- |
16 | 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) |
| 17 | + contracts_build_directory, /users/myPath/to/someProject/.coverageArtifacts/contracts |
| 18 | + provider ganache.provider (async b/c vm must be resolved) |
19 | 19 | logger add filter for unused variables... |
20 | 20 |
|
21 | 21 | Truffle Lib API |
|
26 | 26 | */ |
27 | 27 |
|
28 | 28 | const SolidityCoverage = require('./../lib/app.js'); |
| 29 | +const req = require('req-cwd'); |
29 | 30 |
|
30 | 31 | module.exports = async (config) => |
31 | | - let truffle; |
| 32 | + let error; |
32 | 33 |
|
33 | 34 | try { |
34 | | - truffle = loadTruffleLibrary(); |
35 | 35 |
|
36 | | - const coverageConfigPath = coveragePaths.config(config) |
37 | | - const coverageConfig = req.silent(coverageConfigPath) || {}; |
38 | | - |
39 | | - app.contractsDir = coveragePaths.contracts(config, coverageConfig); |
| 36 | + // Load truffle lib & coverage config |
| 37 | + const truffle = loadTruffleLibrary(); |
| 38 | + const coverageConfig = req.silent('./.solcover.js') || {}; |
40 | 39 |
|
| 40 | + // Start |
41 | 41 | const app = new SolidityCoverage(coverageConfig); |
42 | | - app.generateEnvironment(); |
43 | | - app.instrument(config.contracts_directory); |
44 | 42 |
|
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); |
| 43 | + // Write instrumented sources to temp folder |
| 44 | + app.contractsDirectory = coveragePaths.contracts(config, app); |
| 45 | + app.generateEnvironment(config.contracts_directory, app.contractsDirectory); |
| 46 | + app.instrument(); |
| 47 | + |
| 48 | + // Have truffle use temp folders |
| 49 | + config.contracts_directory = app.contractsDirectory; |
| 50 | + config.build_directory = coveragePaths.artifacts.root(config, app); |
| 51 | + config.contracts_build_directory = coveragePaths.artifacts.contracts(config, app); |
| 52 | + |
| 53 | + // Compile w/out optimization |
49 | 54 | config.compilers.solc.settings.optimization.enabled = false; |
50 | 55 | await truffle.contracts.compile(config); |
51 | 56 |
|
52 | | - // Test using compiled, instrumented sources |
53 | | - config.provider = await app.getCoverageProvider(); |
| 57 | + // Launch provider & run tests |
| 58 | + config.provider = await app.getCoverageProvider(truffle); |
54 | 59 | try { |
55 | 60 | await truffle.test.run(config) |
56 | | - } catch (err) { |
| 61 | + } catch (e) { |
| 62 | + error = e; |
57 | 63 | app.testsErrored = true; |
58 | 64 | } |
59 | 65 |
|
| 66 | + // Produce report |
60 | 67 | app.generateCoverage(); |
61 | 68 |
|
62 | | - } catch(err){ |
63 | | - return app.cleanUp(err); |
| 69 | + } catch(e){ |
| 70 | + error = e; |
64 | 71 | } |
65 | 72 |
|
66 | | - return app.cleanUp(); |
| 73 | + // Finish |
| 74 | + return app.cleanUp(error); |
67 | 75 | } |
68 | 76 |
|
69 | 77 | // -------------------------------------- Helpers -------------------------------------------------- |
70 | 78 | function loadTruffleLibrary(){ |
71 | 79 |
|
72 | 80 | try { return require("truffle") } catch(err) {}; |
73 | | - try { return require("sc-truffle")} catch(err) {}; |
| 81 | + try { return require("./truffle.library")} catch(err) {}; |
74 | 82 |
|
75 | 83 | throw new Error(utils.errors.NO_TRUFFLE_LIB) |
76 | 84 | } |
77 | 85 |
|
78 | 86 | 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'), |
| 87 | + contracts: (t, c) => path.join(path.dirname(t.contracts_directory), c.contractsDirName)), |
81 | 88 |
|
82 | 89 | 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)) |
| 90 | + root: (t, c) => path.join(path.dirname(t.build_directory), c.artifactsDirName), |
| 91 | + contracts: (t, c) => { |
| 92 | + const root = path.join(path.dirname(t.build_directory), c.artifactsDirName); |
| 93 | + return path.join(root, path.basename(t.contracts_build_directory)); |
| 94 | + } |
85 | 95 | } |
86 | 96 | } |
87 | 97 |
|
|
0 commit comments