Skip to content

Commit 5a7587b

Browse files
committed
Truffle plugin draft
1 parent 98d9b39 commit 5a7587b

File tree

4 files changed

+93
-23
lines changed

4 files changed

+93
-23
lines changed

bin/exec.js

Lines changed: 0 additions & 23 deletions
This file was deleted.

dist/buidler.plugin.js

Whitespace-only changes.

dist/truffle.plugin.js

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
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+

truffle-plugin.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"commands": {
3+
"coverage": "dist/truffle.plugin.js"
4+
}
5+
}

0 commit comments

Comments
 (0)