Skip to content

Commit

Permalink
Remove ganache-core-sc dev dependency (#554)
Browse files Browse the repository at this point in the history
* Use api.ganache in unit tests
  • Loading branch information
cgewecke authored Oct 31, 2020
1 parent f1d4001 commit 19f1990
Show file tree
Hide file tree
Showing 10 changed files with 175 additions and 1,917 deletions.
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ step_install_nvm: &step_install_nvm
jobs:
unit-test:
docker:
- image: circleci/node:10
- image: circleci/node:12
steps:
- checkout
- run:
Expand Down
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@
"@truffle/contract": "^4.0.36",
"buidler-gas-reporter": "^0.1.3",
"decache": "^4.5.1",
"ganache-core-sc": "^2.7.0-sc.0",
"mocha": "5.2.0",
"nyc": "^14.1.1",
"solc": "^0.5.10",
Expand Down
21 changes: 12 additions & 9 deletions test/units/assert.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,23 @@
const assert = require('assert');
const util = require('./../util/util.js');

const ganache = require('ganache-core-sc');
const client = require('ganache-cli');
const Coverage = require('./../../lib/coverage');
const Api = require('./../../lib/api')

describe('asserts and requires', () => {
let coverage;
let provider;
let collector;
let api;

before(() => ({ provider, collector } = util.initializeProvider(ganache)));
before(async () => {
api = new Api({silent: true});
await api.ganache(client);
})
beforeEach(() => coverage = new Coverage());
after((done) => provider.close(done));
after(async() => await api.finish());

it('should cover assert statements as `if` statements when they pass', async function() {
const contract = await util.bootstrapCoverage('assert/Assert', provider, collector);
const contract = await util.bootstrapCoverage('assert/Assert', api);
coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a(true);
const mapping = coverage.generate(contract.data, util.pathPrefix);
Expand All @@ -36,7 +39,7 @@ describe('asserts and requires', () => {
// NB: Truffle replays failing txs as .calls to obtain the revert reason from the return
// data. Hence the 2X measurements.
it('should cover assert statements as `if` statements when they fail', async function() {
const contract = await util.bootstrapCoverage('assert/Assert', provider, collector);
const contract = await util.bootstrapCoverage('assert/Assert', api);
coverage.addContract(contract.instrumented, util.filePath);

try { await contract.instance.a(false) } catch(err) { /* Invalid opcode */ }
Expand All @@ -57,7 +60,7 @@ describe('asserts and requires', () => {
});

it('should cover multi-line require stmts as `if` statements when they pass', async function() {
const contract = await util.bootstrapCoverage('assert/RequireMultiline', provider, collector);
const contract = await util.bootstrapCoverage('assert/RequireMultiline', api);
coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a(true, true, true);
const mapping = coverage.generate(contract.data, util.pathPrefix);
Expand All @@ -79,7 +82,7 @@ describe('asserts and requires', () => {
// NB: Truffle replays failing txs as .calls to obtain the revert reason from the return
// data. Hence the 2X measurements.
it('should cover multi-line require stmts as `if` statements when they fail', async function() {
const contract = await util.bootstrapCoverage('assert/RequireMultiline', provider, collector);
const contract = await util.bootstrapCoverage('assert/RequireMultiline', api);
coverage.addContract(contract.instrumented, util.filePath);

try { await contract.instance.a(true, true, false) } catch(err) { /* Revert */ }
Expand Down
23 changes: 13 additions & 10 deletions test/units/function.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
const assert = require('assert');
const util = require('./../util/util.js');

const ganache = require('ganache-core-sc');
const client = require('ganache-cli');
const Coverage = require('./../../lib/coverage');
const Api = require('./../../lib/api')

describe('function declarations', () => {
let coverage;
let provider;
let collector;
let api;

before(async () => ({ provider, collector } = await util.initializeProvider(ganache)));
before(async () => {
api = new Api({silent: true});
await api.ganache(client);
})
beforeEach(() => coverage = new Coverage());
after((done) => provider.close(done));
after(async() => await api.finish());

it('should compile after instrumenting an ordinary function declaration', () => {
const info = util.instrumentAndCompile('function/function');
Expand Down Expand Up @@ -54,7 +57,7 @@ describe('function declarations', () => {
});

it('should cover a simple invoked function call', async function() {
const contract = await util.bootstrapCoverage('function/function-call', provider, collector);
const contract = await util.bootstrapCoverage('function/function-call', api);
coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a();
const mapping = coverage.generate(contract.data, util.pathPrefix);
Expand All @@ -73,7 +76,7 @@ describe('function declarations', () => {
});

it('should cover a modifier used on a function', async function() {
const contract = await util.bootstrapCoverage('function/modifier', provider, collector);
const contract = await util.bootstrapCoverage('function/modifier', api);
coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a(0);
const mapping = coverage.generate(contract.data, util.pathPrefix);
Expand All @@ -92,7 +95,7 @@ describe('function declarations', () => {
});

it('should cover a constructor that uses the `constructor` keyword', async function() {
const contract = await util.bootstrapCoverage('function/constructor-keyword', provider, collector);
const contract = await util.bootstrapCoverage('function/constructor-keyword', api);
coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a();
const mapping = coverage.generate(contract.data, util.pathPrefix);
Expand All @@ -115,7 +118,7 @@ describe('function declarations', () => {
//
// NB: 2x values are result of Truffle replaying failing txs to get reason string...
it('should cover a constructor --> method call chain', async function() {
const contract = await util.bootstrapCoverage('function/chainable', provider, collector);
const contract = await util.bootstrapCoverage('function/chainable', api);
coverage.addContract(contract.instrumented, util.filePath);

try { await contract.instance.a() } catch(err){}
Expand All @@ -140,7 +143,7 @@ describe('function declarations', () => {
//
// NB: 2x values are result of Truffle replaying failing txs to get reason string...
it('should cover a constructor --> method --> value call chain', async function() {
const contract = await util.bootstrapCoverage('function/chainable-value', provider, collector);
const contract = await util.bootstrapCoverage('function/chainable-value', api);
coverage.addContract(contract.instrumented, util.filePath);

try { await contract.instance.a() } catch(err){}
Expand Down
33 changes: 18 additions & 15 deletions test/units/if.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
const assert = require('assert');
const util = require('./../util/util.js');

const ganache = require('ganache-core-sc');
const client = require('ganache-cli');
const Coverage = require('./../../lib/coverage');
const Api = require('./../../lib/api')

describe('if, else, and else if statements', () => {
let coverage;
let provider;
let collector;
let api;

before(async () => ({ provider, collector } = await util.initializeProvider(ganache)));
before(async () => {
api = new Api({silent: true});
await api.ganache(client);
})
beforeEach(() => coverage = new Coverage());
after((done) => provider.close(done));
after(async() => await api.finish());

it('should compile after instrumenting unbracketed if-elses', () => {
const info = util.instrumentAndCompile('if/if-else-no-brackets');
Expand All @@ -24,7 +27,7 @@ describe('if, else, and else if statements', () => {
});

it('should cover an if statement with a bracketed consequent', async function() {
const contract = await util.bootstrapCoverage('if/if-with-brackets', provider, collector);
const contract = await util.bootstrapCoverage('if/if-with-brackets', api);
coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a(1);
const mapping = coverage.generate(contract.data, util.pathPrefix);
Expand All @@ -45,7 +48,7 @@ describe('if, else, and else if statements', () => {

// Runs: a(1) => if (x == 1) x = 2;
it('should cover an unbracketed if consequent (single line)', async function(){
const contract = await util.bootstrapCoverage('if/if-no-brackets', provider, collector);
const contract = await util.bootstrapCoverage('if/if-no-brackets', api);
coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a(1);
const mapping = coverage.generate(contract.data, util.pathPrefix);
Expand All @@ -66,7 +69,7 @@ describe('if, else, and else if statements', () => {

// Runs: a(1) => if (x == 1){\n x = 3; }
it('should cover an if statement with multiline bracketed consequent', async function() {
const contract = await util.bootstrapCoverage('if/if-with-brackets-multiline',provider,collector);
const contract = await util.bootstrapCoverage('if/if-with-brackets-multiline',api);

coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a(1);
Expand All @@ -89,7 +92,7 @@ describe('if, else, and else if statements', () => {

// Runs: a(1) => if (x == 1)\n x = 3;
it('should cover an unbracketed if consequent (multi-line)', async function() {
const contract = await util.bootstrapCoverage('if/if-no-brackets-multiline',provider,collector);
const contract = await util.bootstrapCoverage('if/if-no-brackets-multiline',api);

coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a(1);
Expand All @@ -111,7 +114,7 @@ describe('if, else, and else if statements', () => {

// Runs: a(2) => if (x == 1) { x = 3; }
it('should cover a simple if statement with a failing condition', async function() {
const contract = await util.bootstrapCoverage('if/if-with-brackets',provider,collector);
const contract = await util.bootstrapCoverage('if/if-with-brackets',api);

coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a(2);
Expand All @@ -133,7 +136,7 @@ describe('if, else, and else if statements', () => {

// Runs: a(2) => if (x == 1){\n throw;\n }else{\n x = 5; \n}
it('should cover an if statement with a bracketed alternate', async function() {
const contract = await util.bootstrapCoverage('if/else-with-brackets',provider,collector);
const contract = await util.bootstrapCoverage('if/else-with-brackets',api);

coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a(2);
Expand All @@ -154,7 +157,7 @@ describe('if, else, and else if statements', () => {
});

it('should cover an if statement with an unbracketed alternate', async function() {
const contract = await util.bootstrapCoverage('if/else-without-brackets',provider,collector);
const contract = await util.bootstrapCoverage('if/else-without-brackets',api);

coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a(2);
Expand All @@ -176,7 +179,7 @@ describe('if, else, and else if statements', () => {
});

it('should cover an else if statement with an unbracketed alternate', async function() {
const contract = await util.bootstrapCoverage('if/else-if-without-brackets',provider,collector);
const contract = await util.bootstrapCoverage('if/else-if-without-brackets',api);

coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a(2);
Expand All @@ -197,7 +200,7 @@ describe('if, else, and else if statements', () => {
});

it('should cover nested if statements with missing else statements', async function() {
const contract = await util.bootstrapCoverage('if/nested-if-missing-else',provider,collector);
const contract = await util.bootstrapCoverage('if/nested-if-missing-else',api);

coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a(2,3,3);
Expand All @@ -219,7 +222,7 @@ describe('if, else, and else if statements', () => {
});

it('should cover if-elseif-else statements that are at the same depth as each other', async function() {
const contract = await util.bootstrapCoverage('if/if-elseif-else',provider,collector);
const contract = await util.bootstrapCoverage('if/if-elseif-else',api);

coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a(2,3,3);
Expand Down
21 changes: 12 additions & 9 deletions test/units/loops.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,24 @@
const assert = require('assert');
const util = require('./../util/util.js');

const ganache = require('ganache-core-sc');
const client = require('ganache-cli');
const Coverage = require('./../../lib/coverage');
const Api = require('./../../lib/api')

describe('for and while statements', () => {
let coverage;
let provider;
let collector;
let api;

before(async () => ({ provider, collector } = await util.initializeProvider(ganache)));
before(async () => {
api = new Api({silent: true});
await api.ganache(client);
})
beforeEach(() => coverage = new Coverage());
after((done) => provider.close(done));
after(async() => await api.finish());

// Runs: a() => for(var x = 1; x < 10; x++){\n sha3(x);\n }
it('should cover a for statement with a bracketed body (multiline)', async function() {
const contract = await util.bootstrapCoverage('loops/for-with-brackets', provider, collector);
const contract = await util.bootstrapCoverage('loops/for-with-brackets', api);
coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a();
const mapping = coverage.generate(contract.data, util.pathPrefix);
Expand All @@ -34,7 +37,7 @@ describe('for and while statements', () => {

// Runs: a() => for(var x = 1; x < 10; x++)\n sha3(x);\n
it('should cover a for statement with an unbracketed body', async function() {
const contract = await util.bootstrapCoverage('loops/for-no-brackets', provider, collector);
const contract = await util.bootstrapCoverage('loops/for-no-brackets', api);
coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a();
const mapping = coverage.generate(contract.data, util.pathPrefix);
Expand All @@ -53,7 +56,7 @@ describe('for and while statements', () => {

// Runs: a() => var t = true;\n while(t){\n t = false;\n }
it('should cover a while statement with an bracketed body (multiline)', async function() {
const contract = await util.bootstrapCoverage('loops/while-with-brackets', provider, collector);
const contract = await util.bootstrapCoverage('loops/while-with-brackets', api);
coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a();
const mapping = coverage.generate(contract.data, util.pathPrefix);
Expand All @@ -72,7 +75,7 @@ describe('for and while statements', () => {

// Runs: a() => var t = true;\n while(t)\n t = false;\n
it('should cover a while statement with an unbracketed body (multiline)', async function() {
const contract = await util.bootstrapCoverage('loops/while-no-brackets', provider, collector);
const contract = await util.bootstrapCoverage('loops/while-no-brackets', api);
coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a();
const mapping = coverage.generate(contract.data, util.pathPrefix);
Expand Down
25 changes: 14 additions & 11 deletions test/units/statements.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
const assert = require('assert');
const util = require('./../util/util.js');

const ganache = require('ganache-core-sc');
const client = require('ganache-cli');
const Coverage = require('./../../lib/coverage');
const Api = require('./../../lib/api')

describe('generic statements', () => {
let coverage;
let provider;
let collector;
let api;

before(async () => ({ provider, collector } = await util.initializeProvider(ganache)));
before(async () => {
api = new Api({silent: true});
await api.ganache(client);
})
beforeEach(() => coverage = new Coverage());
after((done) => provider.close(done));
after(async() => await api.finish());

it('should compile function defined in a struct', () => {
const info = util.instrumentAndCompile('statements/fn-struct');
Expand Down Expand Up @@ -79,7 +82,7 @@ describe('generic statements', () => {
});

it('should cover an emitted event statement', async function() {
const contract = await util.bootstrapCoverage('statements/emit-coverage', provider, collector);
const contract = await util.bootstrapCoverage('statements/emit-coverage', api);
coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a(0);
const mapping = coverage.generate(contract.data, util.pathPrefix);
Expand All @@ -97,7 +100,7 @@ describe('generic statements', () => {
});

it('should cover a statement following a close brace', async function() {
const contract = await util.bootstrapCoverage('statements/post-close-brace', provider, collector);
const contract = await util.bootstrapCoverage('statements/post-close-brace', api);
coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a(1);
const mapping = coverage.generate(contract.data, util.pathPrefix);
Expand All @@ -117,7 +120,7 @@ describe('generic statements', () => {
});

it('should cover a library statement and an invoked library method', async function() {
const contract = await util.bootstrapCoverage('statements/library', provider, collector);
const contract = await util.bootstrapCoverage('statements/library', api);
coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.not();
const mapping = coverage.generate(contract.data, util.pathPrefix);
Expand All @@ -135,7 +138,7 @@ describe('generic statements', () => {
});

it('should cover a tuple statement', async function() {
const contract = await util.bootstrapCoverage('statements/tuple', provider, collector);
const contract = await util.bootstrapCoverage('statements/tuple', api);
coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a();
const mapping = coverage.generate(contract.data, util.pathPrefix);
Expand All @@ -153,7 +156,7 @@ describe('generic statements', () => {
});

it.skip('should cover a unary statement', async function(){
const contract = await util.bootstrapCoverage('statements/unary', provider, collector);
const contract = await util.bootstrapCoverage('statements/unary', api);
coverage.addContract(contract.instrumented, util.filePath);
await contract.instance.a();
const mapping = coverage.generate(contract.data, util.pathPrefix);
Expand All @@ -162,7 +165,7 @@ describe('generic statements', () => {
})

it('should cover an empty bodied contract statement', async function() {
const contract = await util.bootstrapCoverage('statements/empty-contract-body', provider, collector);
const contract = await util.bootstrapCoverage('statements/empty-contract-body', api);
coverage.addContract(contract.instrumented, util.filePath);
const mapping = coverage.generate(contract.data, util.pathPrefix);

Expand Down
Loading

0 comments on commit 19f1990

Please sign in to comment.