Merge pull request #229 from ethereum/extendWeb3
add extend method and tests
This commit is contained in:
commit
fe703f5fae
|
@ -1503,6 +1503,23 @@ Object.defineProperty(web3.eth, 'defaultAccount', {
|
|||
}
|
||||
});
|
||||
|
||||
|
||||
// EXTEND
|
||||
web3._extend = function(extension){
|
||||
/*jshint maxcomplexity: 6 */
|
||||
|
||||
if(extension.property && !web3[extension.property])
|
||||
web3[extension.property] = {};
|
||||
|
||||
setupMethods(web3[extension.property] || web3, extension.methods || []);
|
||||
setupProperties(web3[extension.property] || web3, extension.properties || []);
|
||||
};
|
||||
web3._extend.formatters = formatters;
|
||||
web3._extend.utils = utils;
|
||||
web3._extend.Method = require('./web3/method');
|
||||
web3._extend.Property = require('./web3/property');
|
||||
|
||||
|
||||
/// setups all api methods
|
||||
setupProperties(web3, web3Properties);
|
||||
setupMethods(web3.net, net.methods);
|
||||
|
@ -1515,7 +1532,7 @@ setupMethods(web3.shh, shh.methods);
|
|||
module.exports = web3;
|
||||
|
||||
|
||||
},{"./utils/config":5,"./utils/sha3":6,"./utils/utils":7,"./version.json":8,"./web3/batch":10,"./web3/db":12,"./web3/eth":14,"./web3/filter":16,"./web3/formatters":17,"./web3/net":24,"./web3/property":25,"./web3/requestmanager":27,"./web3/shh":28,"./web3/watches":30}],10:[function(require,module,exports){
|
||||
},{"./utils/config":5,"./utils/sha3":6,"./utils/utils":7,"./version.json":8,"./web3/batch":10,"./web3/db":12,"./web3/eth":14,"./web3/filter":16,"./web3/formatters":17,"./web3/method":22,"./web3/net":24,"./web3/property":25,"./web3/requestmanager":27,"./web3/shh":28,"./web3/watches":30}],10:[function(require,module,exports){
|
||||
/*
|
||||
This file is part of ethereum.js.
|
||||
|
||||
|
@ -2581,7 +2598,7 @@ var inputTransactionFormatter = function (options){
|
|||
* @returns {Object} transaction
|
||||
*/
|
||||
var outputTransactionFormatter = function (tx){
|
||||
if(tx.number !== null)
|
||||
if(tx.blockNumber !== null)
|
||||
tx.blockNumber = utils.toDecimal(tx.blockNumber);
|
||||
if(tx.transactionIndex !== null)
|
||||
tx.transactionIndex = utils.toDecimal(tx.transactionIndex);
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1503,6 +1503,23 @@ Object.defineProperty(web3.eth, 'defaultAccount', {
|
|||
}
|
||||
});
|
||||
|
||||
|
||||
// EXTEND
|
||||
web3._extend = function(extension){
|
||||
/*jshint maxcomplexity: 6 */
|
||||
|
||||
if(extension.property && !web3[extension.property])
|
||||
web3[extension.property] = {};
|
||||
|
||||
setupMethods(web3[extension.property] || web3, extension.methods || []);
|
||||
setupProperties(web3[extension.property] || web3, extension.properties || []);
|
||||
};
|
||||
web3._extend.formatters = formatters;
|
||||
web3._extend.utils = utils;
|
||||
web3._extend.Method = require('./web3/method');
|
||||
web3._extend.Property = require('./web3/property');
|
||||
|
||||
|
||||
/// setups all api methods
|
||||
setupProperties(web3, web3Properties);
|
||||
setupMethods(web3.net, net.methods);
|
||||
|
@ -1515,7 +1532,7 @@ setupMethods(web3.shh, shh.methods);
|
|||
module.exports = web3;
|
||||
|
||||
|
||||
},{"./utils/config":5,"./utils/sha3":6,"./utils/utils":7,"./version.json":8,"./web3/batch":10,"./web3/db":12,"./web3/eth":14,"./web3/filter":16,"./web3/formatters":17,"./web3/net":24,"./web3/property":25,"./web3/requestmanager":27,"./web3/shh":28,"./web3/watches":30}],10:[function(require,module,exports){
|
||||
},{"./utils/config":5,"./utils/sha3":6,"./utils/utils":7,"./version.json":8,"./web3/batch":10,"./web3/db":12,"./web3/eth":14,"./web3/filter":16,"./web3/formatters":17,"./web3/method":22,"./web3/net":24,"./web3/property":25,"./web3/requestmanager":27,"./web3/shh":28,"./web3/watches":30}],10:[function(require,module,exports){
|
||||
/*
|
||||
This file is part of ethereum.js.
|
||||
|
||||
|
@ -2581,7 +2598,7 @@ var inputTransactionFormatter = function (options){
|
|||
* @returns {Object} transaction
|
||||
*/
|
||||
var outputTransactionFormatter = function (tx){
|
||||
if(tx.number !== null)
|
||||
if(tx.blockNumber !== null)
|
||||
tx.blockNumber = utils.toDecimal(tx.blockNumber);
|
||||
if(tx.transactionIndex !== null)
|
||||
tx.transactionIndex = utils.toDecimal(tx.transactionIndex);
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
17
lib/web3.js
17
lib/web3.js
|
@ -149,6 +149,23 @@ Object.defineProperty(web3.eth, 'defaultAccount', {
|
|||
}
|
||||
});
|
||||
|
||||
|
||||
// EXTEND
|
||||
web3._extend = function(extension){
|
||||
/*jshint maxcomplexity: 6 */
|
||||
|
||||
if(extension.property && !web3[extension.property])
|
||||
web3[extension.property] = {};
|
||||
|
||||
setupMethods(web3[extension.property] || web3, extension.methods || []);
|
||||
setupProperties(web3[extension.property] || web3, extension.properties || []);
|
||||
};
|
||||
web3._extend.formatters = formatters;
|
||||
web3._extend.utils = utils;
|
||||
web3._extend.Method = require('./web3/method');
|
||||
web3._extend.Property = require('./web3/property');
|
||||
|
||||
|
||||
/// setups all api methods
|
||||
setupProperties(web3, web3Properties);
|
||||
setupMethods(web3.net, net.methods);
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
var chai = require('chai');
|
||||
var assert = chai.assert;
|
||||
var FakeHttpProvider = require('./helpers/FakeHttpProvider');
|
||||
var web3 = require('../lib/web3');
|
||||
|
||||
|
||||
var tests = [{
|
||||
properties: [new web3._extend.Property({
|
||||
name: 'gasPrice',
|
||||
getter: 'eth_gasPrice',
|
||||
outputFormatter: web3._extend.formatters.outputBigNumberFormatter
|
||||
})]
|
||||
},{
|
||||
methods: [new web3._extend.Method({
|
||||
name: 'getBalance',
|
||||
call: 'eth_getBalance',
|
||||
params: 2,
|
||||
inputFormatter: [web3._extend.utils.toAddress, web3._extend.formatters.inputDefaultBlockNumberFormatter],
|
||||
outputFormatter: web3._extend.formatters.outputBigNumberFormatter
|
||||
})]
|
||||
},{
|
||||
property: 'admin',
|
||||
properties: [new web3._extend.Property({
|
||||
name: 'gasPrice',
|
||||
getter: 'eth_gasPrice',
|
||||
outputFormatter: web3._extend.formatters.outputBigNumberFormatter
|
||||
})],
|
||||
methods: [new web3._extend.Method({
|
||||
name: 'getBalance',
|
||||
call: 'eth_getBalance',
|
||||
params: 2,
|
||||
inputFormatter: [web3._extend.utils.toAddress, web3._extend.formatters.inputDefaultBlockNumberFormatter],
|
||||
outputFormatter: web3._extend.formatters.outputBigNumberFormatter
|
||||
})]
|
||||
}];
|
||||
|
||||
describe('web3', function () {
|
||||
describe('_extend', function () {
|
||||
tests.forEach(function (test, index) {
|
||||
it('test no: ' + index, function () {
|
||||
web3._extend(test);
|
||||
|
||||
|
||||
if(test.properties)
|
||||
test.properties.forEach(function(property){
|
||||
|
||||
var provider = new FakeHttpProvider();
|
||||
web3.setProvider(provider);
|
||||
provider.injectResult('');
|
||||
provider.injectValidation(function (payload) {
|
||||
assert.equal(payload.jsonrpc, '2.0');
|
||||
assert.equal(payload.method, property.getter);
|
||||
});
|
||||
|
||||
if(test.property) {
|
||||
assert.isObject(web3[test.property][property.name]);
|
||||
assert.isFunction(web3[test.property]['get'+ property.name.charAt(0).toUpperCase() + property.name.slice(1)]);
|
||||
} else {
|
||||
assert.isObject(web3[property.name]);
|
||||
assert.isFunction(web3['get'+ property.name.charAt(0).toUpperCase() + property.name.slice(1)]);
|
||||
}
|
||||
});
|
||||
|
||||
if(test.methods)
|
||||
test.methods.forEach(function(property){
|
||||
if(test.property)
|
||||
assert.isFunction(web3[test.property][property.name]);
|
||||
else
|
||||
assert.isFunction(web3[property.name]);
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
Loading…
Reference in New Issue