Skip to content
This repository was archived by the owner on Mar 5, 2025. It is now read-only.

Commit 733e19e

Browse files
committed
add extend method and tests
1 parent 61f1ba6 commit 733e19e

File tree

8 files changed

+453
-110
lines changed

8 files changed

+453
-110
lines changed

dist/web3-light.js

Lines changed: 93 additions & 53 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/web3-light.js.map

Lines changed: 85 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/web3-light.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/web3.js

Lines changed: 93 additions & 53 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/web3.js.map

Lines changed: 85 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/web3.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/web3.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,23 @@ Object.defineProperty(web3.eth, 'defaultAccount', {
149149
}
150150
});
151151

152+
153+
// EXTEND
154+
web3.extend = function(extension){
155+
if(!web3[extension.property])
156+
web3[extension.property] = {};
157+
158+
if(extension.methods)
159+
setupMethods(extension.property ? web3[extension.property] : web3, extension.methods);
160+
if(extension.properties)
161+
setupProperties(extension.property ? web3[extension.property] : web3, extension.properties);
162+
};
163+
web3.extend.formatters = formatters;
164+
web3.extend.utils = utils;
165+
web3.extend.Method = require('./web3/method');
166+
web3.extend.Property = require('./web3/property');
167+
168+
152169
/// setups all api methods
153170
setupProperties(web3, web3Properties);
154171
setupMethods(web3.net, net.methods);

test/web3.extend.js

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
var chai = require('chai');
2+
var assert = chai.assert;
3+
var FakeHttpProvider = require('./helpers/FakeHttpProvider');
4+
var web3 = require('../lib/web3');
5+
6+
7+
var tests = [{
8+
properties: [new web3.extend.Property({
9+
name: 'gasPrice',
10+
getter: 'eth_gasPrice',
11+
outputFormatter: web3.extend.formatters.outputBigNumberFormatter
12+
})]
13+
},{
14+
methods: [new web3.extend.Method({
15+
name: 'getBalance',
16+
call: 'eth_getBalance',
17+
params: 2,
18+
inputFormatter: [web3.extend.utils.toAddress, web3.extend.formatters.inputDefaultBlockNumberFormatter],
19+
outputFormatter: web3.extend.formatters.outputBigNumberFormatter
20+
})]
21+
},{
22+
property: 'admin',
23+
properties: [new web3.extend.Property({
24+
name: 'gasPrice',
25+
getter: 'eth_gasPrice',
26+
outputFormatter: web3.extend.formatters.outputBigNumberFormatter
27+
})],
28+
methods: [new web3.extend.Method({
29+
name: 'getBalance',
30+
call: 'eth_getBalance',
31+
params: 2,
32+
inputFormatter: [web3.extend.utils.toAddress, web3.extend.formatters.inputDefaultBlockNumberFormatter],
33+
outputFormatter: web3.extend.formatters.outputBigNumberFormatter
34+
})]
35+
}];
36+
37+
describe('web3', function () {
38+
describe('extend', function () {
39+
tests.forEach(function (test, index) {
40+
it('test no: ' + index, function () {
41+
web3.extend(test);
42+
43+
44+
if(test.properties)
45+
test.properties.forEach(function(property){
46+
47+
var provider = new FakeHttpProvider();
48+
web3.setProvider(provider);
49+
provider.injectResult('');
50+
provider.injectValidation(function (payload) {
51+
assert.equal(payload.jsonrpc, '2.0');
52+
assert.equal(payload.method, property.getter);
53+
});
54+
55+
if(test.property) {
56+
assert.isObject(web3[test.property][property.name]);
57+
assert.isFunction(web3[test.property]['get'+ property.name.charAt(0).toUpperCase() + property.name.slice(1)]);
58+
} else {
59+
assert.isObject(web3[property.name]);
60+
assert.isFunction(web3['get'+ property.name.charAt(0).toUpperCase() + property.name.slice(1)]);
61+
}
62+
});
63+
64+
if(test.methods)
65+
test.methods.forEach(function(property){
66+
if(test.property)
67+
assert.isFunction(web3[test.property][property.name]);
68+
else
69+
assert.isFunction(web3[property.name]);
70+
});
71+
72+
});
73+
});
74+
});
75+
});
76+

0 commit comments

Comments
 (0)