aboutsummaryrefslogtreecommitdiffstats
path: root/packages/website/md/docs/sol_coverage/usage.md
diff options
context:
space:
mode:
authorFabio Berger <me@fabioberger.com>2019-01-11 07:47:57 +0800
committerFabio Berger <me@fabioberger.com>2019-01-11 07:47:57 +0800
commit583e690b7a028c85809a8be2c7afe3b65264adbe (patch)
treebc7ba2fe96833633455daaebf44d7382d0e20b7d /packages/website/md/docs/sol_coverage/usage.md
parenta516b00a0397a567fd233bd955206d46321cc178 (diff)
parenta5b7a351609a5e6689bb97990216153f64302462 (diff)
downloaddexon-sol-tools-583e690b7a028c85809a8be2c7afe3b65264adbe.tar
dexon-sol-tools-583e690b7a028c85809a8be2c7afe3b65264adbe.tar.gz
dexon-sol-tools-583e690b7a028c85809a8be2c7afe3b65264adbe.tar.bz2
dexon-sol-tools-583e690b7a028c85809a8be2c7afe3b65264adbe.tar.lz
dexon-sol-tools-583e690b7a028c85809a8be2c7afe3b65264adbe.tar.xz
dexon-sol-tools-583e690b7a028c85809a8be2c7afe3b65264adbe.tar.zst
dexon-sol-tools-583e690b7a028c85809a8be2c7afe3b65264adbe.zip
Merge branch 'development' into fix/dev-tools-pages/finalTouches
* development: (49 commits) upgrade to ddex api v3 (#1507) Add new deployment related instructions to pipeline README (#1499) feature: implement logging and friendly wallet name for Opera Fix prettier Add missing dependencies Remove second yarn call Add .gitkeep Rename sol-trace-based-tools-common to sol-tracing-utils Update packages/sol-trace/README.md Update packages/sol-trace/CHANGELOG.json Update packages/sol-trace-based-tools-common/src/source_maps.ts Update packages/sol-trace-based-tools-common/CHANGELOG.json Update packages/sol-profiler/CHANGELOG.json Update packages/sol-coverage/CHANGELOG.json Update packages/monorepo-scripts/src/test_installation.ts chore: changelog update fix: account for undefined errors in promisify, not only null Clean up docs before publish In README's, don't mention non-existent tests (#1497) fix: use getBackendBaseUrl instead of hardcoded string ...
Diffstat (limited to 'packages/website/md/docs/sol_coverage/usage.md')
-rw-r--r--packages/website/md/docs/sol_coverage/usage.md62
1 files changed, 62 insertions, 0 deletions
diff --git a/packages/website/md/docs/sol_coverage/usage.md b/packages/website/md/docs/sol_coverage/usage.md
new file mode 100644
index 000000000..dd3cdf597
--- /dev/null
+++ b/packages/website/md/docs/sol_coverage/usage.md
@@ -0,0 +1,62 @@
+Sol-coverage uses transaction traces in order to figure out which lines of Solidity source code have been covered by your tests. In order for it to gather these traces, you must add the `CoverageSubprovider` to the [ProviderEngine](https://github.com/MetaMask/provider-engine) instance you use when running your Solidity tests. If you're unfamiliar with ProviderEngine, please read the [Web3 Provider explained](https://0x.org/wiki#Web3-Provider-Explained) wiki article.
+
+The CoverageSubprovider eavesdrops on the `eth_sendTransaction` and `eth_call` RPC calls and collects traces after each call using `debug_traceTransaction`. `eth_call`'s' don't generate traces - so we take a snapshot, re-submit it as a transaction, get the trace and then revert the snapshot.
+
+Coverage subprovider needs some info about your contracts (`srcMap`, `bytecode`). It gets that info from your project's artifacts. Some frameworks have their own artifact format. Some artifact formats don't actually contain all the neccessary data.
+
+In order to use `CoverageSubprovider` with your favorite framework you need to pass an `artifactsAdapter` to it.
+
+### Sol-compiler
+
+If you are generating your artifacts with [@0x/sol-compiler](https://0x.org/docs/sol-compiler) you can use the `SolCompilerArtifactsAdapter` we've implemented for you.
+
+```typescript
+import { SolCompilerArtifactsAdapter } from '@0x/sol-coverage';
+const artifactsPath = 'src/artifacts';
+const contractsPath = 'src/contracts';
+const artifactsAdapter = new SolCompilerArtifactsAdapter(artifactsPath, contractsPath);
+```
+
+### Truffle
+
+If your project is using [Truffle](https://truffleframework.com/), we've written a `TruffleArtifactsAdapter`for you.
+
+```typescript
+import { TruffleArtifactAdapter } from '@0x/sol-coverage';
+const contractsPath = 'src/contracts';
+const artifactAdapter = new TruffleArtifactAdapter(contractsDir);
+```
+
+Because truffle artifacts don't have all the data we need - we actually will recompile your contracts under the hood. That's why you don't need to pass an `artifactsPath`.
+
+### Other framework/toolset
+
+You'll need to write your own artifacts adapter. It should extend `AbstractArtifactsAdapter`.
+Look at the code of the two adapters above for examples.
+
+### Usage
+
+```typescript
+import { CoverageSubprovider } from '@0x/sol-coverage';
+import ProviderEngine = require('web3-provider-engine');
+
+const provider = new ProviderEngine();
+
+const artifactsPath = 'src/artifacts';
+const contractsPath = 'src/contracts';
+const networkId = 50;
+// Some calls might not have `from` address specified. Nevertheless - transactions need to be submitted from an address with at least some funds. defaultFromAddress is the address that will be used to submit those calls as transactions from.
+const defaultFromAddress = '0x5409ed021d9299bf6814279a6a1411a7e866a631';
+const isVerbose = true;
+const coverageSubprovider = new CoverageSubprovider(artifactsAdapter, defaultFromAddress, isVerbose);
+
+provider.addProvider(coverageSubprovider);
+```
+
+After your test suite is complete (e.g in the Mocha global `after` hook), you'll need to call:
+
+```typescript
+await coverageSubprovider.writeCoverageAsync();
+```
+
+This will create a `coverage.json` file in a `coverage` directory. This file has an [Istanbul format](https://github.com/gotwarlost/istanbul/blob/master/coverage.json.md) - so you can use it with any of the existing Istanbul reporters.