diff options
author | Marek Kotewicz <marek.kotewicz@gmail.com> | 2015-06-23 16:00:27 +0800 |
---|---|---|
committer | Marek Kotewicz <marek.kotewicz@gmail.com> | 2015-06-23 16:00:27 +0800 |
commit | 9470fa2d4cd00c795e3bf3b5811e30fa29522e4c (patch) | |
tree | 8aa98457731c908e70b91f6a25fa5cc17c6138c9 | |
parent | 58f2e59e2aa8c20b09cc4e1da0dcb0fd8caea12b (diff) | |
download | dexon-solidity-9470fa2d4cd00c795e3bf3b5811e30fa29522e4c.tar.gz dexon-solidity-9470fa2d4cd00c795e3bf3b5811e30fa29522e4c.tar.zst dexon-solidity-9470fa2d4cd00c795e3bf3b5811e30fa29522e4c.zip |
Squashed 'libjsqrc/ethereumjs/' changes from ca46cb5..ecde334
ecde334 Merge pull request #241 from SilentCicero/master
3af1e82 Update eth.js
86d9b58 Added sendRawTransaction
4228b02 common fixes in requestmanager
47e292a version 0.6.0
c597034 gulp
9417bbf Merge branch 'master' into develop
15df5d6 Merge branch 'master' of https://github.com/ethereum/ethereum.js
e947252 Merge pull request #234 from ethereum/ethers-patch-1
4d165de update license per name change to web3.js
03ae21b special logs will never be nulls, so there is no reason to check for null value
66f1def updated dependencies, gulp
ccb436e Merge branch 'master' into develop
d729884 unrelevant change in example
fdf46ed fixed providor not set in request manager
811e3b2 Merge branch 'develop' of https://github.com/ethereum/ethereum.js into develop
f454dda Merge branch 'develop' of https://github.com/asinyagin/web3.js into develop
4384805 build files
b09bf31 Merge branch 'develop' into allAsync
6ea0d67 Set requests content type to application/json
fe703f5 Merge pull request #229 from ethereum/extendWeb3
a90a85a mereg develop
a2e5fbd add tests for the outputformatters
556eb45 re-add map files
08d2212 small fix on outputFormatters, dont transform null to 0
1495a0c add comlexity push for poll, does only show on travis
7518ed4 changed extend to _extend
1aefebd merged develop
b6c49d4 improved async polling
16252f3 imporved async callback adding, without setinterval
f242489 add optional default block parameter to contract call fixes #159
1d3d727 improved comment
d9ce08e improved filter interval
ddafe00 asyncified filters
d14c706 build and improved extend function
733e19e add extend method and tests
git-subtree-dir: libjsqrc/ethereumjs
git-subtree-split: ecde3345e0e6d4bca0ce03e08ee4957395cd6194
-rw-r--r-- | contract.js | 55 | ||||
-rw-r--r-- | formatters.outputBlockFormatter.js | 70 | ||||
-rw-r--r-- | formatters.outputLogFormatter.js | 32 | ||||
-rw-r--r-- | formatters.outputTransactionFormatter.js | 35 | ||||
-rw-r--r-- | helpers/FakeHttpProvider2.js | 10 | ||||
-rw-r--r-- | helpers/FakeXMLHttpRequest.js | 7 | ||||
-rw-r--r-- | web3.extend.js | 76 |
7 files changed, 254 insertions, 31 deletions
diff --git a/contract.js b/contract.js index 00f9cbcc..2632575f 100644 --- a/contract.js +++ b/contract.js @@ -66,7 +66,7 @@ describe('web3.eth.contract', function () { provider.injectValidation(function (payload) { if (step === 0) { step = 1; - provider.injectResult(3); + provider.injectResult('0x3'); assert.equal(payload.jsonrpc, '2.0'); assert.equal(payload.method, 'eth_newFilter'); assert.deepEqual(payload.params[0], { @@ -105,7 +105,7 @@ describe('web3.eth.contract', function () { '0000000000000000000000000000000000000000000000000000000000000008' }]]); var r = payload.filter(function (p) { - return p.jsonrpc === '2.0' && p.method === 'eth_getFilterChanges' && p.params[0] === 3; + return p.jsonrpc === '2.0' && p.method === 'eth_getFilterChanges' && p.params[0] === '0x3'; }); assert.equal(r.length > 0, true); } @@ -114,7 +114,8 @@ describe('web3.eth.contract', function () { var contract = web3.eth.contract(desc).at(address); var res = 0; - contract.Changed({from: address}).watch(function(err, result) { + var event = contract.Changed({from: address}); + event.watch(function(err, result) { assert.equal(result.args.from, address); assert.equal(result.args.amount, 1); assert.equal(result.args.t1, 1); @@ -133,6 +134,7 @@ describe('web3.eth.contract', function () { provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000032'); var signature = 'balance(address)' var address = '0x1234567890123456789012345678901234567890'; + provider.injectValidation(function (payload) { assert.equal(payload.method, 'eth_call'); assert.deepEqual(payload.params, [{ @@ -147,6 +149,28 @@ describe('web3.eth.contract', function () { assert.deepEqual(new BigNumber(0x32), r); }); + it('should call constant function with default block', function () { + var provider = new FakeHttpProvider(); + web3.setProvider(provider); + web3.reset(); + provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000032'); + var signature = 'balance(address)' + var address = '0x1234567890123456789012345678901234567890'; + + provider.injectValidation(function (payload) { + assert.equal(payload.method, 'eth_call'); + assert.deepEqual(payload.params, [{ + data: '0x' + sha3(signature).slice(0, 8) + '0000000000000000000000001234567890123456789012345678901234567890', + to: address + }, '0xb']); + }); + + var contract = web3.eth.contract(desc).at(address); + + var r = contract.balance(address, 11); + assert.deepEqual(new BigNumber(0x32), r); + }); + it('should sendTransaction to contract function', function () { var provider = new FakeHttpProvider(); web3.setProvider(provider); @@ -218,6 +242,31 @@ describe('web3.eth.contract', function () { }); + it('should explicitly make a call with optional params and defaultBlock', function () { + + var provider = new FakeHttpProvider(); + web3.setProvider(provider); + web3.reset(); + provider.injectResult('0x0000000000000000000000000000000000000000000000000000000000000032'); + var signature = 'balance(address)'; + var address = '0x1234567890123456789012345678901234567890'; + provider.injectValidation(function (payload) { + assert.equal(payload.method, 'eth_call'); + assert.deepEqual(payload.params, [{ + data: '0x' + sha3(signature).slice(0, 8) + '0000000000000000000000001234567890123456789012345678901234567890', + to: address, + from: address, + gas: '0xc350' + }, '0xb']); + }); + + var contract = web3.eth.contract(desc).at(address); + + var r = contract.balance.call(address, {from: address, gas: 50000}, 11); + assert.deepEqual(new BigNumber(0x32), r); + + }); + it('should sendTransaction with optional params', function () { var provider = new FakeHttpProvider(); web3.setProvider(provider); diff --git a/formatters.outputBlockFormatter.js b/formatters.outputBlockFormatter.js index 27225065..a94c87b3 100644 --- a/formatters.outputBlockFormatter.js +++ b/formatters.outputBlockFormatter.js @@ -8,38 +8,72 @@ describe('formatters', function () { it('should return the correct value', function () { assert.deepEqual(formatters.outputBlockFormatter({ - hash: '0x34234kjh23kj4234', - parentHash: '0x34234kjh23kj4234', - miner: '0x34234kjh23kj4234', - stateRoot: '0x34234kjh23kj4234', - sha3Uncles: '0x34234kjh23kj4234', - bloom: '0x34234kjh23kj4234', + hash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', + parentHash: '0x83ffb245cfced97ccc5c75253d6960376d6c6dea93647397a543a72fdaea5265', + miner: '0xdcc6960376d6c6dea93647383ffb245cfced97cf', + stateRoot: '0x54dda68af07643f68739a6e9612ad157a26ae7e2ce81f77842bb5835fbcde583', + sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', + bloom: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', difficulty: '0x3e8', totalDifficulty: '0x3e8', number: '0x3e8', gasLimit: '0x3e8', gasUsed: '0x3e8', timestamp: '0x3e8', - extraData: '0x34234kjh23kj4234', - nonce: '0x34234kjh23kj4234', - children: ['0x34234kjh23kj4234'], + extraData: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', + nonce: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', size: '0x3e8' }), { - hash: '0x34234kjh23kj4234', - parentHash: '0x34234kjh23kj4234', - miner: '0x34234kjh23kj4234', - stateRoot: '0x34234kjh23kj4234', - sha3Uncles: '0x34234kjh23kj4234', - bloom: '0x34234kjh23kj4234', + hash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', + parentHash: '0x83ffb245cfced97ccc5c75253d6960376d6c6dea93647397a543a72fdaea5265', + miner: '0xdcc6960376d6c6dea93647383ffb245cfced97cf', + stateRoot: '0x54dda68af07643f68739a6e9612ad157a26ae7e2ce81f77842bb5835fbcde583', + sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', + bloom: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', difficulty: new BigNumber(1000), totalDifficulty: new BigNumber(1000), number: 1000, gasLimit: 1000, gasUsed: 1000, timestamp: 1000, - extraData: '0x34234kjh23kj4234', - nonce: '0x34234kjh23kj4234', - children: ['0x34234kjh23kj4234'], + extraData: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', + nonce: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', + size: 1000 + }); + }); + it('should return the correct value, when null values are present', function () { + + assert.deepEqual(formatters.outputBlockFormatter({ + hash: null, + parentHash: '0x83ffb245cfced97ccc5c75253d6960376d6c6dea93647397a543a72fdaea5265', + miner: null, + stateRoot: '0x54dda68af07643f68739a6e9612ad157a26ae7e2ce81f77842bb5835fbcde583', + sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', + bloom: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', + difficulty: '0x3e8', + totalDifficulty: '0x3e8', + number: null, + gasLimit: '0x3e8', + gasUsed: '0x3e8', + timestamp: '0x3e8', + extraData: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', + nonce: null, + size: '0x3e8' + }), { + hash: null, + parentHash: '0x83ffb245cfced97ccc5c75253d6960376d6c6dea93647397a543a72fdaea5265', + miner: null, + stateRoot: '0x54dda68af07643f68739a6e9612ad157a26ae7e2ce81f77842bb5835fbcde583', + sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', + bloom: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', + difficulty: new BigNumber(1000), + totalDifficulty: new BigNumber(1000), + number: null, + gasLimit: 1000, + gasUsed: 1000, + timestamp: 1000, + extraData: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', + nonce: null, size: 1000 }); }); diff --git a/formatters.outputLogFormatter.js b/formatters.outputLogFormatter.js index 495a6462..432bfb0d 100644 --- a/formatters.outputLogFormatter.js +++ b/formatters.outputLogFormatter.js @@ -9,17 +9,37 @@ describe('formatters', function () { transactionIndex: '0x3e8', logIndex: '0x3e8', blockNumber: '0x3e8', - transactionHash: '0x7b2274657374223a2274657374227d', - blockHash: '0x7b2274657374223a2274657374227d', - data: '0x7b2274657374223a2274657374227d', + transactionHash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', + blockHash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', + data: '0x7b2274657374223a2274657374227', topics: ['0x68656c6c6f','0x6d79746f70696373'] }), { transactionIndex: 1000, logIndex: 1000, blockNumber: 1000, - transactionHash: '0x7b2274657374223a2274657374227d', - blockHash: '0x7b2274657374223a2274657374227d', - data: '0x7b2274657374223a2274657374227d', + transactionHash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', + blockHash: '0xd6960376d6c6dea93647383ffb245cfced97ccc5c7525397a543a72fdaea5265', + data: '0x7b2274657374223a2274657374227', + topics: ['0x68656c6c6f','0x6d79746f70696373'] + }); + }); + it('should return the correct value, when null values are present', function () { + + assert.deepEqual(formatters.outputLogFormatter({ + transactionIndex: null, + logIndex: null, + blockNumber: null, + transactionHash: null, + blockHash: null, + data: '0x7b2274657374223a2274657374227', + topics: ['0x68656c6c6f','0x6d79746f70696373'] + }), { + transactionIndex: null, + logIndex: null, + blockNumber: null, + transactionHash: null, + blockHash: null, + data: '0x7b2274657374223a2274657374227', topics: ['0x68656c6c6f','0x6d79746f70696373'] }); }); diff --git a/formatters.outputTransactionFormatter.js b/formatters.outputTransactionFormatter.js index ef19b6da..db483160 100644 --- a/formatters.outputTransactionFormatter.js +++ b/formatters.outputTransactionFormatter.js @@ -7,7 +7,7 @@ describe('formatters', function () { it('should return the correct value', function () { assert.deepEqual(formatters.outputTransactionFormatter({ - input: '0x34234kjh23kj4234', + input: '0x3454645634534', from: '0x00000', to: '0x00000', value: '0x3e8', @@ -16,9 +16,9 @@ describe('formatters', function () { nonce: '0xb', transactionIndex: '0x1', blockNumber: '0x3e8', - blockHash: '0x34234bf23bf4234' + blockHash: '0xc9b9cdc2092a9d6589d96662b1fd6949611163fb3910cf8a173cd060f17702f9' }), { - input: '0x34234kjh23kj4234', + input: '0x3454645634534', from: '0x00000', to: '0x00000', value: new BigNumber(1000), @@ -26,9 +26,36 @@ describe('formatters', function () { gasPrice: new BigNumber(1000), nonce: 11, blockNumber: 1000, - blockHash: '0x34234bf23bf4234', + blockHash: '0xc9b9cdc2092a9d6589d96662b1fd6949611163fb3910cf8a173cd060f17702f9', transactionIndex: 1 }); }); + + it('should return the correct value, when null values are present', function () { + + assert.deepEqual(formatters.outputTransactionFormatter({ + input: '0x3454645634534', + from: '0x00000', + to: null, + value: '0x3e8', + gas: '0x3e8', + gasPrice: '0x3e8', + nonce: '0xb', + transactionIndex: null, + blockNumber: null, + blockHash: null + }), { + input: '0x3454645634534', + from: '0x00000', + to: null, + value: new BigNumber(1000), + gas: 1000, + gasPrice: new BigNumber(1000), + nonce: 11, + blockNumber: null, + blockHash: null, + transactionIndex: null + }); + }); }); }); diff --git a/helpers/FakeHttpProvider2.js b/helpers/FakeHttpProvider2.js index 0f26d84b..e287a074 100644 --- a/helpers/FakeHttpProvider2.js +++ b/helpers/FakeHttpProvider2.js @@ -15,11 +15,21 @@ FakeHttpProvider2.prototype.injectResultList = function (list) { FakeHttpProvider2.prototype.getResponse = function () { var result = this.resultList[this.counter]; this.counter++; + + // add fallback result value + if(!result) + result = { + result: undefined + }; + if (result.type === 'batch') { this.injectBatchResults(result.result); } else { this.injectResult(result.result); } + + this.counter = 0; + return this.response; }; diff --git a/helpers/FakeXMLHttpRequest.js b/helpers/FakeXMLHttpRequest.js index a67d7f74..6dc35b98 100644 --- a/helpers/FakeXMLHttpRequest.js +++ b/helpers/FakeXMLHttpRequest.js @@ -6,6 +6,9 @@ var FakeXMLHttpRequest = function () { this.readyState = 4; this.onreadystatechange = null; this.async = false; + this.headers = { + 'Content-Type': 'text/plain' + }; }; FakeXMLHttpRequest.prototype.open = function (method, host, async) { @@ -15,6 +18,10 @@ FakeXMLHttpRequest.prototype.open = function (method, host, async) { this.async = async; }; +FakeXMLHttpRequest.prototype.setRequestHeader = function(name, value) { + this.headers[name] = value; +}; + FakeXMLHttpRequest.prototype.send = function (payload) { assert.equal(typeof payload, 'string'); if (this.async) { diff --git a/web3.extend.js b/web3.extend.js new file mode 100644 index 00000000..dfa863a2 --- /dev/null +++ b/web3.extend.js @@ -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]); + }); + + }); + }); + }); +}); + |