Skip to content

Commit ea7f020

Browse files
committed
feat(@embark/test-runner): introduce artifacts.require API
This commit adds a convenience API `artifacts.require(name)` that aims to make requiring artifacts a little bit more straight forward. Usage: ``` const SimpleStorage = artifacts.require('SimpleStorage'); const EmbarkJS = artifacts.require('EmbarkJS'); ```
1 parent e29a93b commit ea7f020

21 files changed

+111
-83
lines changed

dapps/templates/boilerplate/test/contract_spec.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
/*global contract, it*/
1+
/*global artifacts, contract, it*/
22
/*
3-
const SimpleStorage = require('Embark/contracts/SimpleStorage');
3+
const SimpleStorage = artifacts.require('SimpleStorage');
44
55
let accounts;
66

dapps/templates/demo/test/simple_storage_spec.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
/*global contract, config, it, assert, web3*/
2-
const SimpleStorage = require('Embark/contracts/SimpleStorage');
1+
/*global artifacts, contract, config, it, assert, web3*/
2+
const SimpleStorage = artifacts.require('SimpleStorage');
33

44
let accounts;
55

dapps/templates/simple/test/contract_spec.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
/*global contract, it*/
1+
/*global artifacts, contract, it*/
22
/*
3-
const SimpleStorage = require('Embark/contracts/SimpleStorage');
3+
const SimpleStorage = artifacts.require('SimpleStorage');
44
55
let accounts;
66

dapps/tests/app/test/another_storage_spec.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
/*global contract, config, it, web3*/
1+
/*global artifacts, contract, config, it, web3*/
22
const assert = require('assert');
3-
const AnotherStorage = require('Embark/contracts/AnotherStorage');
4-
const SimpleStorage = require('Embark/contracts/SimpleStorage');
3+
const AnotherStorage = artifacts.require('AnotherStorage');
4+
const SimpleStorage = artifacts.require('SimpleStorage');
55

66
let accounts, defaultAccount;
77
const numAddresses = 10;

dapps/tests/app/test/array_references_spec.js

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
/*global contract, config, it, web3*/
1+
/*global artifacts, contract, config, it, web3*/
22
const assert = require('assert');
3-
const SomeContract = require('Embark/contracts/SomeContract');
4-
const MyToken2 = require('Embark/contracts/MyToken2');
3+
const SomeContract = artifacts.require('SomeContract');
4+
const MyToken2 = artifacts.require('MyToken2');
55

66
config({
77
contracts: {
@@ -38,4 +38,3 @@ contract("SomeContract", function() {
3838
});
3939

4040
});
41-

dapps/tests/app/test/embarkJS_spec.js

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
/*global describe, it, web3, config*/
1+
/*global artifacts, describe, it, web3, config*/
22
const assert = require('assert');
3-
const SimpleStorage = require('Embark/contracts/SimpleStorage');
4-
const EmbarkJS = require('Embark/EmbarkJS');
3+
const SimpleStorage = artifacts.require('SimpleStorage');
4+
const EmbarkJS = artifacts.require('EmbarkJS');
55

66
config({
77
namesystem: {
@@ -58,4 +58,3 @@ describe("EmbarkJS functions", function() {
5858
assert.strictEqual(parseInt(result, 10), 100);
5959
});
6060
});
61-

dapps/tests/app/test/expiration_spec.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
/*global contract, config, it, assert, mineAtTimestamp*/
2-
const Expiration = require('Embark/contracts/Expiration');
1+
/*global artifacts, contract, config, it, assert, mineAtTimestamp*/
2+
const Expiration = artifacts.require('Expiration');
33
const now = Math.floor(new Date().getTime()/1000.0); // Get unix epoch. The getTime method returns the time in milliseconds.
44

55
config({

dapps/tests/app/test/interface_spec.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
/*global contract, config, it*/
1+
/*global artifacts, contract, config, it*/
22
const assert = require('assert');
3-
const AnotherStorage = require('Embark/contracts/AnotherStorage');
3+
const AnotherStorage = artifacts.require('AnotherStorage');
44

55
// FIXME this doesn't work and no idea how it ever worked because ERC20 is not defined anywhere
66
// config({
@@ -22,4 +22,3 @@ contract("AnotherStorageWithInterface", function() {
2222
assert.strictEqual(result.toString(), '0x0000000000000000000000000000000000000000');
2323
});
2424
});
25-

dapps/tests/app/test/lib_test_spec.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
/*global contract, config, it*/
1+
/*global artifacts, contract, config, it*/
22
const assert = require('assert');
3-
const Test2 = require('Embark/contracts/Test2');
3+
const Test2 = artifacts.require('Test2');
44

55
config({
66
contracts: {

dapps/tests/app/test/namesystem_spec.js

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
/*global describe, it, config*/
1+
/*global artifacts, describe, it, config*/
22
const assert = require('assert');
3-
const MyToken = require('Embark/contracts/MyToken');
4-
const MyToken2 = require('Embark/contracts/MyToken2');
5-
const EmbarkJS = require('Embark/EmbarkJS');
3+
const MyToken = artifacts.require('MyToken');
4+
const MyToken2 = artifacts.require('MyToken2');
5+
const EmbarkJS = artifacts.require('EmbarkJS');
66

77
let accounts;
88

@@ -55,4 +55,3 @@ describe("ENS functions", function() {
5555
assert.strictEqual(myToken2Name, 'MyToken2.embark.eth');
5656
});
5757
});
58-

dapps/tests/app/test/plugin_storage_spec.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
/*global contract, config, it*/
1+
/*global artifacts, contract, config, it*/
22
const assert = require('assert');
3-
const PluginStorage = require('Embark/contracts/PluginStorage');
4-
const SimpleStorage = require('Embark/contracts/SimpleStorage');
3+
const PluginStorage = artifacts.require('PluginStorage');
4+
const SimpleStorage = artifacts.require('SimpleStorage');
55

66
config({
77
contracts: {

dapps/tests/app/test/simple_storage_deploy_spec.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
/*global contract, it, assert, before, web3*/
2-
const SimpleStorage = require('Embark/contracts/SimpleStorage');
3-
const {Utils} = require('Embark/EmbarkJS');
1+
/*global artifacts, contract, it, assert, before, web3*/
2+
const SimpleStorage = artifacts.require('SimpleStorage');
3+
const {Utils} = artifacts.require('EmbarkJS');
44

55
contract("SimpleStorage Deploy", function () {
66
let simpleStorageInstance;

dapps/tests/app/test/simple_storage_spec.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*global contract, config, it, assert, web3*/
2-
const SimpleStorage = require('Embark/contracts/SimpleStorage');
2+
const SimpleStorage = artifacts.require('SimpleStorage');
33
let accounts;
4-
const {Utils} = require('Embark/EmbarkJS');
4+
const {Utils} = artifacts.require('EmbarkJS');
55

66
config({
77
contracts: {

dapps/tests/app/test/token_spec.js

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
/*global describe, config, it, web3*/
1+
/*global artifacts, describe, config, it, web3*/
22
const assert = require('assert');
3-
const Token = require('Embark/contracts/Token');
4-
const MyToken = require('Embark/contracts/MyToken');
5-
const MyToken2 = require('Embark/contracts/MyToken2');
6-
const AlreadyDeployedToken = require('Embark/contracts/AlreadyDeployedToken');
7-
const Test = require('Embark/contracts/Test');
8-
const SomeContract = require('Embark/contracts/SomeContract');
3+
const Token = artifacts.require('Token');
4+
const MyToken = artifacts.require('MyToken');
5+
const MyToken2 = artifacts.require('MyToken2');
6+
const AlreadyDeployedToken = artifacts.require('AlreadyDeployedToken');
7+
const Test = artifacts.require('Test');
8+
const SomeContract = artifacts.require('SomeContract');
99

1010
config({
1111
namesystem: {

dapps/tests/contracts/test/another_storage_spec.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
/*global contract, config, it*/
1+
/*global artifacts, contract, config, it*/
22
const assert = require('assert');
3-
const AnotherStorage = require('Embark/contracts/AnotherStorage');
4-
const SimpleStorage = require('Embark/contracts/SimpleStorage');
3+
const AnotherStorage = artifacts.require('AnotherStorage');
4+
const SimpleStorage = artifacts.require('SimpleStorage');
55
let accounts;
66

77
config({

dapps/tests/contracts/test/array_references_spec.js

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
/*global contract, config, it*/
1+
/*global artifacts, contract, config, it*/
22
const assert = require('assert');
3-
const SomeContract = require('Embark/contracts/SomeContract');
4-
const SimpleStorage = require('Embark/contracts/SimpleStorage');
5-
const MyToken2 = require('Embark/contracts/MyToken2');
3+
const SomeContract = artifacts.require('SomeContract');
4+
const SimpleStorage = artifacts.require('SimpleStorage');
5+
const MyToken2 = artifacts.require('MyToken2');
66

77
config({
88
contracts: {
@@ -42,4 +42,3 @@ contract("SomeContract", function() {
4242
});
4343

4444
});
45-

dapps/tests/contracts/test/lib_test_spec.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
/*global contract, config, it*/
1+
/*global artifacts, contract, config, it*/
22
const assert = require('assert');
3-
const Test2 = require('Embark/contracts/Test2');
3+
const Test2 = artifacts.require('Test2');
44

55
config({
66
contracts: {

dapps/tests/contracts/test/simple_storage_spec.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
/*global contract, config, it*/
1+
/*global artifacts, contract, config, it*/
22
const assert = require('assert');
3-
const SimpleStorage = require('Embark/contracts/SimpleStorage');
3+
const SimpleStorage = artifacts.require('SimpleStorage');
44

55
config({
66
contracts: {

dapps/tests/contracts/test/token_spec.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
/*global describe, config, it*/
1+
/*global artifacts, describe, config, it*/
22
const assert = require('assert');
3-
const Token = require('Embark/contracts/Token');
4-
const MyToken = require('Embark/contracts/MyToken');
5-
const MyToken2 = require('Embark/contracts/MyToken2');
6-
const AlreadyDeployedToken = require('Embark/contracts/AlreadyDeployedToken');
7-
const Test = require('Embark/contracts/Test');
3+
const Token = artifacts.require('Token');
4+
const MyToken = artifacts.require('MyToken');
5+
const MyToken2 = artifacts.require('MyToken2');
6+
const AlreadyDeployedToken = artifacts.require('AlreadyDeployedToken');
7+
const Test = artifacts.require('Test');
88

99
config({
1010
contracts: {

packages/plugins/mocha-tests/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
"@babel/runtime-corejs3": "7.7.4",
5151
"@types/async": "3.0.3",
5252
"async": "3.1.0",
53+
"colors": "1.4.0",
5354
"core-js": "3.4.3",
5455
"embark-i18n": "^5.1.1",
5556
"embark-utils": "^5.2.0-nightly.1",

packages/plugins/mocha-tests/src/lib/index.js

+53-21
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'colors';
12
import {__} from 'embark-i18n';
23

34
const async = require('async');
@@ -31,6 +32,31 @@ class MochaTestRunner {
3132
);
3233
}
3334

35+
static originalRequire = require('module').prototype.require;
36+
37+
static requireArtifact(artifactName, compiledContracts) {
38+
if (artifactName === 'EmbarkJS') return EmbarkJS;
39+
40+
const instance = compiledContracts[artifactName];
41+
42+
if (!instance) {
43+
compiledContracts[artifactName] = {};
44+
}
45+
46+
if (!compiledContracts[artifactName].abiDefinition) {
47+
return compiledContracts[artifactName];
48+
}
49+
50+
try {
51+
return Object.setPrototypeOf(
52+
instance,
53+
EmbarkJS.Blockchain.Contract(instance)
54+
);
55+
} catch (e) {
56+
return instance;
57+
}
58+
}
59+
3460
addFile(path) {
3561
if (!this.match(path)) {
3662
throw new Error(`invalid JavaScript test path: ${path}`);
@@ -49,7 +75,6 @@ class MochaTestRunner {
4975
this.options = options;
5076

5177
const Module = require("module");
52-
const originalRequire = require("module").prototype.require;
5378

5479
let accounts = [];
5580
let compiledContracts = {};
@@ -185,29 +210,29 @@ class MochaTestRunner {
185210
return seriesCb(null, 0);
186211
}
187212

213+
let testRunner = this;
214+
188215
Module.prototype.require = function(req) {
216+
if (["Embark/EmbarkJS", "EmbarkJS"].includes(req)) {
217+
testRunner.logger.warn(
218+
`${__('WARNING!')} ${__('Use')} ${`artifacts.require('EmbarkJS')`.cyan}, ${__('the syntax').yellow} ${`require('${req}')`.cyan} ${__('has been deprecated and will be removed in future versions').yellow}`
219+
);
220+
return MochaTestRunner.requireArtifact("EmbarkJS");
221+
}
222+
189223
const prefix = "Embark/contracts/";
190224
if (req.startsWith(prefix)) {
191-
const contractClass = req.replace(prefix, "");
192-
const instance = compiledContracts[contractClass];
193-
194-
if (!instance) {
195-
compiledContracts[contractClass] = {};
196-
}
197-
if (!compiledContracts[contractClass].abiDefinition) {
198-
return compiledContracts[contractClass];
199-
}
200-
try {
201-
return Object.setPrototypeOf(instance, EmbarkJS.Blockchain.Contract(instance));
202-
} catch (e) {
203-
return instance;
204-
}
205-
}
206-
if (req === "Embark/EmbarkJS") {
207-
return EmbarkJS;
225+
const artifactName = req.replace(prefix, "");
226+
testRunner.logger.warn(
227+
`${__('WARNING!')} ${__('Use')} ${`artifacts.require('${artifactName}')`.cyan}, ${__('the syntax').yellow} ${`require('${req}')`.cyan} ${__('has been deprecated and will be removed in future versions').yellow}`
228+
);
229+
return MochaTestRunner.requireArtifact(
230+
artifactName,
231+
compiledContracts
232+
);
208233
}
209234

210-
return originalRequire.apply(this, arguments);
235+
return MochaTestRunner.originalRequire.call(this, req);
211236
};
212237

213238
const mocha = new Mocha();
@@ -222,11 +247,18 @@ class MochaTestRunner {
222247
global.config = config;
223248
});
224249

250+
global.artifacts = {
251+
require: (artifactName) => MochaTestRunner.requireArtifact(
252+
artifactName,
253+
compiledContracts
254+
)
255+
};
256+
225257
mocha.suite.timeout(TEST_TIMEOUT);
226258
mocha.addFile(file);
227259

228260
mocha.run((failures) => {
229-
Module.prototype.require = originalRequire;
261+
Module.prototype.require = MochaTestRunner.originalRequire;
230262
seriesCb(null, failures);
231263
});
232264
});
@@ -237,7 +269,7 @@ class MochaTestRunner {
237269
}
238270
], (err) => {
239271
this.embark.config.plugins.runActionsForEvent('tests:finished', () => {
240-
Module.prototype.require = originalRequire;
272+
Module.prototype.require = MochaTestRunner.originalRequire;
241273
cb(err);
242274
});
243275

0 commit comments

Comments
 (0)