aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Kotewicz <marek.kotewicz@gmail.com>2015-02-04 06:14:19 +0800
committerMarek Kotewicz <marek.kotewicz@gmail.com>2015-02-04 06:14:19 +0800
commitd9b422cfbc5959c1f476e32633a1aec432610b94 (patch)
treecfccda92c2335d95363419dd835ad29e31c48fb1
parent46f47eaf3824b9eb9d6f0756d9023e1ac12ecf02 (diff)
downloaddexon-solidity-d9b422cfbc5959c1f476e32633a1aec432610b94.tar.gz
dexon-solidity-d9b422cfbc5959c1f476e32633a1aec432610b94.tar.zst
dexon-solidity-d9b422cfbc5959c1f476e32633a1aec432610b94.zip
Squashed 'libjsqrc/ethereumjs/' changes from f1a5cf9..a0cfa3c
a0cfa3c version upgrade e58e2f5 jsonrpc.js tests && jsonrpc response validation is more strict 45134de jsonrpc.js file && batch polling f3ce1f0 simplified polling && jsonrpc payload creation ddc1719 tests && fixes for utils methods fdcc1af clearing tests 4a54b8c version upgrade 0.0.12 git-subtree-dir: libjsqrc/ethereumjs git-subtree-split: a0cfa3ca21163f26f3f71a0e2ce0a1e617554c72
-rw-r--r--abi.inputParser.js (renamed from abi.parsers.js)438
-rw-r--r--abi.outputParser.js461
-rw-r--r--db.methods.js2
-rw-r--r--eth.methods.js2
-rw-r--r--jsonrpc.isValidResponse.js128
-rw-r--r--jsonrpc.toBatchPayload.js47
-rw-r--r--jsonrpc.toPayload.js40
-rw-r--r--shh.methods.js2
-rw-r--r--test.utils.js (renamed from utils.js)0
-rw-r--r--utils.extractDisplayName.js42
-rw-r--r--utils.extractTypeName.js55
-rw-r--r--web3.methods.js2
12 files changed, 777 insertions, 442 deletions
diff --git a/abi.parsers.js b/abi.inputParser.js
index 12bccf5a..12b73515 100644
--- a/abi.parsers.js
+++ b/abi.inputParser.js
@@ -423,443 +423,5 @@ describe('abi', function() {
});
});
-
- describe('outputParser', function() {
- it('should parse output string', function() {
-
- // given
- var d = clone(description);
-
- d[0].outputs = [
- { type: "string" }
- ];
-
- // when
- var parser = abi.outputParser(d);
-
- // then
- assert.equal(
- parser.test("0x" +
- "0000000000000000000000000000000000000000000000000000000000000005" +
- "68656c6c6f000000000000000000000000000000000000000000000000000000")[0],
- 'hello'
- );
- assert.equal(
- parser.test("0x" +
- "0000000000000000000000000000000000000000000000000000000000000005" +
- "776f726c64000000000000000000000000000000000000000000000000000000")[0],
- 'world'
- );
-
- });
-
- it('should parse output uint', function() {
-
- // given
- var d = clone(description);
-
- d[0].outputs = [
- { type: 'uint' }
- ];
-
- // when
- var parser = abi.outputParser(d);
-
- // then
- assert.equal(parser.test("0x0000000000000000000000000000000000000000000000000000000000000001")[0], 1);
- assert.equal(parser.test("0x000000000000000000000000000000000000000000000000000000000000000a")[0], 10);
- assert.equal(
- parser.test("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")[0].toString(10),
- new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).toString(10)
- );
- assert.equal(
- parser.test("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0")[0].toString(10),
- new BigNumber("fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0", 16).toString(10)
- );
- });
-
- it('should parse output uint256', function() {
-
- // given
- var d = clone(description);
-
- d[0].outputs = [
- { type: 'uint256' }
- ];
-
- // when
- var parser = abi.outputParser(d);
-
- // then
- assert.equal(parser.test("0x0000000000000000000000000000000000000000000000000000000000000001")[0], 1);
- assert.equal(parser.test("0x000000000000000000000000000000000000000000000000000000000000000a")[0], 10);
- assert.equal(
- parser.test("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")[0].toString(10),
- new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).toString(10)
- );
- assert.equal(
- parser.test("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0")[0].toString(10),
- new BigNumber("fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0", 16).toString(10)
- );
- });
-
- it('should parse output uint128', function() {
-
- // given
- var d = clone(description);
-
- d[0].outputs = [
- { type: 'uint128' }
- ];
-
- // when
- var parser = abi.outputParser(d);
-
- // then
- assert.equal(parser.test("0x0000000000000000000000000000000000000000000000000000000000000001")[0], 1);
- assert.equal(parser.test("0x000000000000000000000000000000000000000000000000000000000000000a")[0], 10);
- assert.equal(
- parser.test("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")[0].toString(10),
- new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).toString(10)
- );
- assert.equal(
- parser.test("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0")[0].toString(10),
- new BigNumber("fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0", 16).toString(10)
- );
- });
-
- it('should parse output int', function() {
-
- // given
- var d = clone(description);
-
- d[0].outputs = [
- { type: 'int' }
- ];
-
- // when
- var parser = abi.outputParser(d);
-
- // then
- assert.equal(parser.test("0x0000000000000000000000000000000000000000000000000000000000000001")[0], 1);
- assert.equal(parser.test("0x000000000000000000000000000000000000000000000000000000000000000a")[0], 10);
- assert.equal(parser.test("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")[0], -1);
- assert.equal(parser.test("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0")[0], -16);
- });
-
- it('should parse output int256', function() {
-
- // given
- var d = clone(description);
-
- d[0].outputs = [
- { type: 'int256' }
- ];
-
- // when
- var parser = abi.outputParser(d);
-
- // then
- assert.equal(parser.test("0x0000000000000000000000000000000000000000000000000000000000000001")[0], 1);
- assert.equal(parser.test("0x000000000000000000000000000000000000000000000000000000000000000a")[0], 10);
- assert.equal(parser.test("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")[0], -1);
- assert.equal(parser.test("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0")[0], -16);
- });
-
- it('should parse output int128', function() {
-
- // given
- var d = clone(description);
-
- d[0].outputs = [
- { type: 'int128' }
- ];
-
- // when
- var parser = abi.outputParser(d);
-
- // then
- assert.equal(parser.test("0x0000000000000000000000000000000000000000000000000000000000000001")[0], 1);
- assert.equal(parser.test("0x000000000000000000000000000000000000000000000000000000000000000a")[0], 10);
- assert.equal(parser.test("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")[0], -1);
- assert.equal(parser.test("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0")[0], -16);
- });
-
- it('should parse output hash', function() {
-
- // given
- var d = clone(description);
-
- d[0].outputs = [
- { type: 'hash' }
- ];
-
- // when
- var parser = abi.outputParser(d);
-
- // then
- assert.equal(
- parser.test("0x000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1")[0],
- "0x000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1"
- );
- });
-
- it('should parse output hash256', function() {
-
- // given
- var d = clone(description);
-
- d[0].outputs = [
- { type: 'hash256' }
- ];
-
- // when
- var parser = abi.outputParser(d);
-
- // then
- assert.equal(
- parser.test("0x000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1")[0],
- "0x000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1"
- );
- });
-
- it('should parse output hash160', function() {
-
- // given
- var d = clone(description);
-
- d[0].outputs = [
- { type: 'hash160' }
- ];
-
- // when
- var parser = abi.outputParser(d);
-
- // then
- assert.equal(
- parser.test("0x000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1")[0],
- "0x000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1"
- );
- // TODO shouldnt' the expected hash be shorter?
- });
-
- it('should parse output address', function() {
-
- // given
- var d = clone(description);
-
- d[0].outputs = [
- { type: 'address' }
- ];
-
- // when
- var parser = abi.outputParser(d);
-
- // then
- assert.equal(
- parser.test("0x000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1")[0],
- "0x407d73d8a49eeb85d32cf465507dd71d507100c1"
- );
- });
-
- it('should parse output bool', function() {
-
- // given
- var d = clone(description);
-
- d[0].outputs = [
- { type: 'bool' }
- ];
-
- // when
- var parser = abi.outputParser(d);
-
- // then
- assert.equal(parser.test("0x0000000000000000000000000000000000000000000000000000000000000001")[0], true);
- assert.equal(parser.test("0x0000000000000000000000000000000000000000000000000000000000000000")[0], false);
-
-
- });
-
- it('should parse output real', function() {
-
- // given
- var d = clone(description);
-
- d[0].outputs = [
- { type: 'real' }
- ];
-
- // when
- var parser = abi.outputParser(d);
-
- // then
- assert.equal(parser.test("0x0000000000000000000000000000000100000000000000000000000000000000")[0], 1);
- assert.equal(parser.test("0x0000000000000000000000000000000220000000000000000000000000000000")[0], 2.125);
- assert.equal(parser.test("0x0000000000000000000000000000000880000000000000000000000000000000")[0], 8.5);
- assert.equal(parser.test("0xffffffffffffffffffffffffffffffff00000000000000000000000000000000")[0], -1);
-
- });
-
- it('should parse output ureal', function() {
-
- // given
- var d = clone(description);
-
- d[0].outputs = [
- { type: 'ureal' }
- ];
-
- // when
- var parser = abi.outputParser(d);
-
- // then
- assert.equal(parser.test("0x0000000000000000000000000000000100000000000000000000000000000000")[0], 1);
- assert.equal(parser.test("0x0000000000000000000000000000000220000000000000000000000000000000")[0], 2.125);
- assert.equal(parser.test("0x0000000000000000000000000000000880000000000000000000000000000000")[0], 8.5);
-
- });
-
-
- it('should parse multiple output strings', function() {
-
- // given
- var d = clone(description);
-
- d[0].outputs = [
- { type: "string" },
- { type: "string" }
- ];
-
- // when
- var parser = abi.outputParser(d);
-
- // then
- assert.equal(
- parser.test("0x" +
- "0000000000000000000000000000000000000000000000000000000000000005" +
- "0000000000000000000000000000000000000000000000000000000000000005" +
- "68656c6c6f000000000000000000000000000000000000000000000000000000" +
- "776f726c64000000000000000000000000000000000000000000000000000000")[0],
- 'hello'
- );
- assert.equal(
- parser.test("0x" +
- "0000000000000000000000000000000000000000000000000000000000000005" +
- "0000000000000000000000000000000000000000000000000000000000000005" +
- "68656c6c6f000000000000000000000000000000000000000000000000000000" +
- "776f726c64000000000000000000000000000000000000000000000000000000")[1],
- 'world'
- );
-
- });
-
- it('should use proper method name', function () {
-
- // given
- var d = clone(description);
- d[0].name = 'helloworld(int)';
- d[0].outputs = [
- { type: "int" }
- ];
-
- // when
- var parser = abi.outputParser(d);
-
- // then
- assert.equal(parser.helloworld("0x0000000000000000000000000000000000000000000000000000000000000001")[0], 1);
- assert.equal(parser.helloworld['int']("0x0000000000000000000000000000000000000000000000000000000000000001")[0], 1);
-
- });
-
-
- it('should parse multiple methods', function () {
-
- // given
- var d = [{
- name: "test",
- type: "function",
- inputs: [{ type: "int" }],
- outputs: [{ type: "int" }]
- },{
- name: "test2",
- type: "function",
- inputs: [{ type: "string" }],
- outputs: [{ type: "string" }]
- }];
-
- // when
- var parser = abi.outputParser(d);
-
- //then
- assert.equal(parser.test("0000000000000000000000000000000000000000000000000000000000000001")[0], 1);
- assert.equal(parser.test2("0x" +
- "0000000000000000000000000000000000000000000000000000000000000005" +
- "68656c6c6f000000000000000000000000000000000000000000000000000000")[0],
- "hello"
- );
-
- });
-
- it('should parse output array', function () {
-
- // given
- var d = clone(description);
- d[0].outputs = [
- { type: 'int[]' }
- ];
-
- // when
- var parser = abi.outputParser(d);
-
- // then
- assert.equal(parser.test("0x" +
- "0000000000000000000000000000000000000000000000000000000000000002" +
- "0000000000000000000000000000000000000000000000000000000000000005" +
- "0000000000000000000000000000000000000000000000000000000000000006")[0][0],
- 5
- );
- assert.equal(parser.test("0x" +
- "0000000000000000000000000000000000000000000000000000000000000002" +
- "0000000000000000000000000000000000000000000000000000000000000005" +
- "0000000000000000000000000000000000000000000000000000000000000006")[0][1],
- 6
- );
-
- });
-
- it('should parse 0x value', function () {
-
- // given
- var d = clone(description);
- d[0].outputs = [
- { type: 'int' }
- ];
-
- // when
- var parser = abi.outputParser(d);
-
- // then
- assert.equal(parser.test("0x")[0], 0);
-
- });
-
- it('should parse 0x value', function () {
-
- // given
- var d = clone(description);
- d[0].outputs = [
- { type: 'uint' }
- ];
-
- // when
- var parser = abi.outputParser(d);
-
- // then
- assert.equal(parser.test("0x")[0], 0);
-
- });
-
- });
});
diff --git a/abi.outputParser.js b/abi.outputParser.js
new file mode 100644
index 00000000..723c408f
--- /dev/null
+++ b/abi.outputParser.js
@@ -0,0 +1,461 @@
+var assert = require('assert');
+var BigNumber = require('bignumber.js');
+var abi = require('../lib/abi.js');
+var clone = function (object) { return JSON.parse(JSON.stringify(object)); };
+
+var description = [{
+ "name": "test",
+ "type": "function",
+ "inputs": [{
+ "name": "a",
+ "type": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "d",
+ "type": "uint256"
+ }
+ ]
+}];
+
+describe('abi', function() {
+ describe('outputParser', function() {
+ it('should parse output string', function() {
+
+ // given
+ var d = clone(description);
+
+ d[0].outputs = [
+ { type: "string" }
+ ];
+
+ // when
+ var parser = abi.outputParser(d);
+
+ // then
+ assert.equal(
+ parser.test("0x" +
+ "0000000000000000000000000000000000000000000000000000000000000005" +
+ "68656c6c6f000000000000000000000000000000000000000000000000000000")[0],
+ 'hello'
+ );
+ assert.equal(
+ parser.test("0x" +
+ "0000000000000000000000000000000000000000000000000000000000000005" +
+ "776f726c64000000000000000000000000000000000000000000000000000000")[0],
+ 'world'
+ );
+
+ });
+
+ it('should parse output uint', function() {
+
+ // given
+ var d = clone(description);
+
+ d[0].outputs = [
+ { type: 'uint' }
+ ];
+
+ // when
+ var parser = abi.outputParser(d);
+
+ // then
+ assert.equal(parser.test("0x0000000000000000000000000000000000000000000000000000000000000001")[0], 1);
+ assert.equal(parser.test("0x000000000000000000000000000000000000000000000000000000000000000a")[0], 10);
+ assert.equal(
+ parser.test("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")[0].toString(10),
+ new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).toString(10)
+ );
+ assert.equal(
+ parser.test("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0")[0].toString(10),
+ new BigNumber("fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0", 16).toString(10)
+ );
+ });
+
+ it('should parse output uint256', function() {
+
+ // given
+ var d = clone(description);
+
+ d[0].outputs = [
+ { type: 'uint256' }
+ ];
+
+ // when
+ var parser = abi.outputParser(d);
+
+ // then
+ assert.equal(parser.test("0x0000000000000000000000000000000000000000000000000000000000000001")[0], 1);
+ assert.equal(parser.test("0x000000000000000000000000000000000000000000000000000000000000000a")[0], 10);
+ assert.equal(
+ parser.test("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")[0].toString(10),
+ new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).toString(10)
+ );
+ assert.equal(
+ parser.test("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0")[0].toString(10),
+ new BigNumber("fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0", 16).toString(10)
+ );
+ });
+
+ it('should parse output uint128', function() {
+
+ // given
+ var d = clone(description);
+
+ d[0].outputs = [
+ { type: 'uint128' }
+ ];
+
+ // when
+ var parser = abi.outputParser(d);
+
+ // then
+ assert.equal(parser.test("0x0000000000000000000000000000000000000000000000000000000000000001")[0], 1);
+ assert.equal(parser.test("0x000000000000000000000000000000000000000000000000000000000000000a")[0], 10);
+ assert.equal(
+ parser.test("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")[0].toString(10),
+ new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).toString(10)
+ );
+ assert.equal(
+ parser.test("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0")[0].toString(10),
+ new BigNumber("fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0", 16).toString(10)
+ );
+ });
+
+ it('should parse output int', function() {
+
+ // given
+ var d = clone(description);
+
+ d[0].outputs = [
+ { type: 'int' }
+ ];
+
+ // when
+ var parser = abi.outputParser(d);
+
+ // then
+ assert.equal(parser.test("0x0000000000000000000000000000000000000000000000000000000000000001")[0], 1);
+ assert.equal(parser.test("0x000000000000000000000000000000000000000000000000000000000000000a")[0], 10);
+ assert.equal(parser.test("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")[0], -1);
+ assert.equal(parser.test("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0")[0], -16);
+ });
+
+ it('should parse output int256', function() {
+
+ // given
+ var d = clone(description);
+
+ d[0].outputs = [
+ { type: 'int256' }
+ ];
+
+ // when
+ var parser = abi.outputParser(d);
+
+ // then
+ assert.equal(parser.test("0x0000000000000000000000000000000000000000000000000000000000000001")[0], 1);
+ assert.equal(parser.test("0x000000000000000000000000000000000000000000000000000000000000000a")[0], 10);
+ assert.equal(parser.test("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")[0], -1);
+ assert.equal(parser.test("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0")[0], -16);
+ });
+
+ it('should parse output int128', function() {
+
+ // given
+ var d = clone(description);
+
+ d[0].outputs = [
+ { type: 'int128' }
+ ];
+
+ // when
+ var parser = abi.outputParser(d);
+
+ // then
+ assert.equal(parser.test("0x0000000000000000000000000000000000000000000000000000000000000001")[0], 1);
+ assert.equal(parser.test("0x000000000000000000000000000000000000000000000000000000000000000a")[0], 10);
+ assert.equal(parser.test("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")[0], -1);
+ assert.equal(parser.test("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0")[0], -16);
+ });
+
+ it('should parse output hash', function() {
+
+ // given
+ var d = clone(description);
+
+ d[0].outputs = [
+ { type: 'hash' }
+ ];
+
+ // when
+ var parser = abi.outputParser(d);
+
+ // then
+ assert.equal(
+ parser.test("0x000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1")[0],
+ "0x000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1"
+ );
+ });
+
+ it('should parse output hash256', function() {
+
+ // given
+ var d = clone(description);
+
+ d[0].outputs = [
+ { type: 'hash256' }
+ ];
+
+ // when
+ var parser = abi.outputParser(d);
+
+ // then
+ assert.equal(
+ parser.test("0x000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1")[0],
+ "0x000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1"
+ );
+ });
+
+ it('should parse output hash160', function() {
+
+ // given
+ var d = clone(description);
+
+ d[0].outputs = [
+ { type: 'hash160' }
+ ];
+
+ // when
+ var parser = abi.outputParser(d);
+
+ // then
+ assert.equal(
+ parser.test("0x000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1")[0],
+ "0x000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1"
+ );
+ // TODO shouldnt' the expected hash be shorter?
+ });
+
+ it('should parse output address', function() {
+
+ // given
+ var d = clone(description);
+
+ d[0].outputs = [
+ { type: 'address' }
+ ];
+
+ // when
+ var parser = abi.outputParser(d);
+
+ // then
+ assert.equal(
+ parser.test("0x000000000000000000000000407d73d8a49eeb85d32cf465507dd71d507100c1")[0],
+ "0x407d73d8a49eeb85d32cf465507dd71d507100c1"
+ );
+ });
+
+ it('should parse output bool', function() {
+
+ // given
+ var d = clone(description);
+
+ d[0].outputs = [
+ { type: 'bool' }
+ ];
+
+ // when
+ var parser = abi.outputParser(d);
+
+ // then
+ assert.equal(parser.test("0x0000000000000000000000000000000000000000000000000000000000000001")[0], true);
+ assert.equal(parser.test("0x0000000000000000000000000000000000000000000000000000000000000000")[0], false);
+
+
+ });
+
+ it('should parse output real', function() {
+
+ // given
+ var d = clone(description);
+
+ d[0].outputs = [
+ { type: 'real' }
+ ];
+
+ // when
+ var parser = abi.outputParser(d);
+
+ // then
+ assert.equal(parser.test("0x0000000000000000000000000000000100000000000000000000000000000000")[0], 1);
+ assert.equal(parser.test("0x0000000000000000000000000000000220000000000000000000000000000000")[0], 2.125);
+ assert.equal(parser.test("0x0000000000000000000000000000000880000000000000000000000000000000")[0], 8.5);
+ assert.equal(parser.test("0xffffffffffffffffffffffffffffffff00000000000000000000000000000000")[0], -1);
+
+ });
+
+ it('should parse output ureal', function() {
+
+ // given
+ var d = clone(description);
+
+ d[0].outputs = [
+ { type: 'ureal' }
+ ];
+
+ // when
+ var parser = abi.outputParser(d);
+
+ // then
+ assert.equal(parser.test("0x0000000000000000000000000000000100000000000000000000000000000000")[0], 1);
+ assert.equal(parser.test("0x0000000000000000000000000000000220000000000000000000000000000000")[0], 2.125);
+ assert.equal(parser.test("0x0000000000000000000000000000000880000000000000000000000000000000")[0], 8.5);
+
+ });
+
+
+ it('should parse multiple output strings', function() {
+
+ // given
+ var d = clone(description);
+
+ d[0].outputs = [
+ { type: "string" },
+ { type: "string" }
+ ];
+
+ // when
+ var parser = abi.outputParser(d);
+
+ // then
+ assert.equal(
+ parser.test("0x" +
+ "0000000000000000000000000000000000000000000000000000000000000005" +
+ "0000000000000000000000000000000000000000000000000000000000000005" +
+ "68656c6c6f000000000000000000000000000000000000000000000000000000" +
+ "776f726c64000000000000000000000000000000000000000000000000000000")[0],
+ 'hello'
+ );
+ assert.equal(
+ parser.test("0x" +
+ "0000000000000000000000000000000000000000000000000000000000000005" +
+ "0000000000000000000000000000000000000000000000000000000000000005" +
+ "68656c6c6f000000000000000000000000000000000000000000000000000000" +
+ "776f726c64000000000000000000000000000000000000000000000000000000")[1],
+ 'world'
+ );
+
+ });
+
+ it('should use proper method name', function () {
+
+ // given
+ var d = clone(description);
+ d[0].name = 'helloworld(int)';
+ d[0].outputs = [
+ { type: "int" }
+ ];
+
+ // when
+ var parser = abi.outputParser(d);
+
+ // then
+ assert.equal(parser.helloworld("0x0000000000000000000000000000000000000000000000000000000000000001")[0], 1);
+ assert.equal(parser.helloworld['int']("0x0000000000000000000000000000000000000000000000000000000000000001")[0], 1);
+
+ });
+
+
+ it('should parse multiple methods', function () {
+
+ // given
+ var d = [{
+ name: "test",
+ type: "function",
+ inputs: [{ type: "int" }],
+ outputs: [{ type: "int" }]
+ },{
+ name: "test2",
+ type: "function",
+ inputs: [{ type: "string" }],
+ outputs: [{ type: "string" }]
+ }];
+
+ // when
+ var parser = abi.outputParser(d);
+
+ //then
+ assert.equal(parser.test("0000000000000000000000000000000000000000000000000000000000000001")[0], 1);
+ assert.equal(parser.test2("0x" +
+ "0000000000000000000000000000000000000000000000000000000000000005" +
+ "68656c6c6f000000000000000000000000000000000000000000000000000000")[0],
+ "hello"
+ );
+
+ });
+
+ it('should parse output array', function () {
+
+ // given
+ var d = clone(description);
+ d[0].outputs = [
+ { type: 'int[]' }
+ ];
+
+ // when
+ var parser = abi.outputParser(d);
+
+ // then
+ assert.equal(parser.test("0x" +
+ "0000000000000000000000000000000000000000000000000000000000000002" +
+ "0000000000000000000000000000000000000000000000000000000000000005" +
+ "0000000000000000000000000000000000000000000000000000000000000006")[0][0],
+ 5
+ );
+ assert.equal(parser.test("0x" +
+ "0000000000000000000000000000000000000000000000000000000000000002" +
+ "0000000000000000000000000000000000000000000000000000000000000005" +
+ "0000000000000000000000000000000000000000000000000000000000000006")[0][1],
+ 6
+ );
+
+ });
+
+ it('should parse 0x value', function () {
+
+ // given
+ var d = clone(description);
+ d[0].outputs = [
+ { type: 'int' }
+ ];
+
+ // when
+ var parser = abi.outputParser(d);
+
+ // then
+ assert.equal(parser.test("0x")[0], 0);
+
+ });
+
+ it('should parse 0x value', function () {
+
+ // given
+ var d = clone(description);
+ d[0].outputs = [
+ { type: 'uint' }
+ ];
+
+ // when
+ var parser = abi.outputParser(d);
+
+ // then
+ assert.equal(parser.test("0x")[0], 0);
+
+ });
+
+ });
+});
+
diff --git a/db.methods.js b/db.methods.js
index 8f8f5409..2ad38457 100644
--- a/db.methods.js
+++ b/db.methods.js
@@ -1,7 +1,7 @@
var assert = require('assert');
var web3 = require('../index.js');
-var u = require('./utils.js');
+var u = require('./test.utils.js');
describe('web3', function() {
describe('db', function() {
diff --git a/eth.methods.js b/eth.methods.js
index 7a031c4c..8f10b441 100644
--- a/eth.methods.js
+++ b/eth.methods.js
@@ -1,6 +1,6 @@
var assert = require('assert');
var web3 = require('../index.js');
-var u = require('./utils.js');
+var u = require('./test.utils.js');
describe('web3', function() {
describe('eth', function() {
diff --git a/jsonrpc.isValidResponse.js b/jsonrpc.isValidResponse.js
new file mode 100644
index 00000000..2fe20049
--- /dev/null
+++ b/jsonrpc.isValidResponse.js
@@ -0,0 +1,128 @@
+var assert = require('assert');
+var jsonrpc = require('../lib/jsonrpc');
+
+describe('jsonrpc', function () {
+ describe('isValidResponse', function () {
+ it('should validate basic jsonrpc response', function () {
+
+ // given
+ var response = {
+ jsonrpc: '2.0',
+ id: 1,
+ result: []
+ };
+
+ // when
+ var valid = jsonrpc.isValidResponse(response);
+
+ // then
+ assert.equal(valid, true);
+ });
+
+ it('should validate basic undefined response', function () {
+
+ // given
+ var response = undefined;
+
+ // when
+ var valid = jsonrpc.isValidResponse(response);
+
+ // then
+ assert.equal(valid, false);
+ });
+
+ it('should validate jsonrpc response without jsonrpc field', function () {
+
+ // given
+ var response = {
+ id: 1,
+ result: []
+ };
+
+ // when
+ var valid = jsonrpc.isValidResponse(response);
+
+ // then
+ assert.equal(valid, false);
+ });
+
+ it('should validate jsonrpc response with wrong jsonrpc version', function () {
+
+ // given
+ var response = {
+ jsonrpc: '1.0',
+ id: 1,
+ result: []
+ };
+
+ // when
+ var valid = jsonrpc.isValidResponse(response);
+
+ // then
+ assert.equal(valid, false);
+ });
+
+ it('should validate jsonrpc response without id number', function () {
+
+ // given
+ var response = {
+ jsonrpc: '2.0',
+ result: []
+ };
+
+ // when
+ var valid = jsonrpc.isValidResponse(response);
+
+ // then
+ assert.equal(valid, false);
+ });
+
+ it('should validate jsonrpc response with wrong id field', function () {
+
+ // given
+ var response = {
+ jsonrpc: '2.0',
+ id: 'x',
+ result: []
+ };
+
+ // when
+ var valid = jsonrpc.isValidResponse(response);
+
+ // then
+ assert.equal(valid, false);
+ });
+
+ it('should validate jsonrpc response without result field', function () {
+
+ // given
+ var response = {
+ jsonrpc: '2.0',
+ id: 1
+ };
+
+ // when
+ var valid = jsonrpc.isValidResponse(response);
+
+ // then
+ assert.equal(valid, false);
+ });
+
+ it('should validate jsonrpc response with result field === false', function () {
+
+ // given
+ var response = {
+ jsonrpc: '2.0',
+ id: 1,
+ result: false
+ };
+
+ // when
+ var valid = jsonrpc.isValidResponse(response);
+
+ // then
+ assert.equal(valid, true);
+ });
+
+ });
+});
diff --git a/jsonrpc.toBatchPayload.js b/jsonrpc.toBatchPayload.js
new file mode 100644
index 00000000..1c1aafeb
--- /dev/null
+++ b/jsonrpc.toBatchPayload.js
@@ -0,0 +1,47 @@
+var assert = require('assert');
+var jsonrpc = require('../lib/jsonrpc');
+
+describe('jsonrpc', function () {
+ describe('toBatchPayload', function () {
+ it('should create basic batch payload', function () {
+
+ // given
+ var messages = [{
+ method: 'helloworld'
+ }, {
+ method: 'test2',
+ params: [1]
+ }];
+
+ // when
+ var payload = jsonrpc.toBatchPayload(messages);
+
+ // then
+ assert.equal(payload instanceof Array, true);
+ assert.equal(payload.length, 2);
+ assert.equal(payload[0].jsonrpc, '2.0');
+ assert.equal(payload[1].jsonrpc, '2.0');
+ assert.equal(payload[0].method, 'helloworld');
+ assert.equal(payload[1].method, 'test2');
+ assert.equal(payload[0].params instanceof Array, true);
+ assert.equal(payload[1].params.length, 1);
+ assert.equal(payload[1].params[0], 1);
+ assert.equal(typeof payload[0].id, 'number');
+ assert.equal(typeof payload[1].id, 'number');
+ assert.equal(payload[0].id + 1, payload[1].id);
+ });
+
+ it('should create batch payload for empty input array', function () {
+
+ // given
+ var messages = [];
+
+ // when
+ var payload = jsonrpc.toBatchPayload(messages);
+
+ // then
+ assert.equal(payload instanceof Array, true);
+ assert.equal(payload.length, 0);
+ });
+ });
+});
diff --git a/jsonrpc.toPayload.js b/jsonrpc.toPayload.js
new file mode 100644
index 00000000..6d6f003b
--- /dev/null
+++ b/jsonrpc.toPayload.js
@@ -0,0 +1,40 @@
+var assert = require('assert');
+var jsonrpc = require('../lib/jsonrpc');
+
+describe('jsonrpc', function () {
+ describe('toPayload', function () {
+ it('should create basic payload', function () {
+
+ // given
+ var method = 'helloworld';
+
+ // when
+ var payload = jsonrpc.toPayload(method);
+
+ // then
+ assert.equal(payload.jsonrpc, '2.0');
+ assert.equal(payload.method, method);
+ assert.equal(payload.params instanceof Array, true);
+ assert.equal(payload.params.length, 0);
+ assert.equal(typeof payload.id, 'number');
+ });
+
+ it('should create payload with params', function () {
+
+ // given
+ var method = 'helloworld1';
+ var params = [123, 'test'];
+
+ // when
+ var payload = jsonrpc.toPayload(method, params);
+
+ // then
+ assert.equal(payload.jsonrpc, '2.0');
+ assert.equal(payload.method, method);
+ assert.equal(payload.params.length, 2);
+ assert.equal(payload.params[0], params[0]);
+ assert.equal(payload.params[1], params[1]);
+ assert.equal(typeof payload.id, 'number');
+ });
+ });
+});
diff --git a/shh.methods.js b/shh.methods.js
index fe2dae71..91ca3cab 100644
--- a/shh.methods.js
+++ b/shh.methods.js
@@ -1,6 +1,6 @@
var assert = require('assert');
var web3 = require('../index.js');
-var u = require('./utils.js');
+var u = require('./test.utils.js');
describe('web3', function() {
describe('shh', function() {
diff --git a/utils.js b/test.utils.js
index 8a1e9a0b..8a1e9a0b 100644
--- a/utils.js
+++ b/test.utils.js
diff --git a/utils.extractDisplayName.js b/utils.extractDisplayName.js
new file mode 100644
index 00000000..148653ab
--- /dev/null
+++ b/utils.extractDisplayName.js
@@ -0,0 +1,42 @@
+var assert = require('assert');
+var utils = require('../lib/utils.js');
+
+describe('utils', function () {
+ describe('extractDisplayName', function () {
+ it('should extract display name from method with no params', function () {
+
+ // given
+ var test = 'helloworld()';
+
+ // when
+ var displayName = utils.extractDisplayName(test);
+
+ // then
+ assert.equal(displayName, 'helloworld');
+ });
+
+ it('should extract display name from method with one param' , function () {
+
+ // given
+ var test = 'helloworld1(int)';
+
+ // when
+ var displayName = utils.extractDisplayName(test);
+
+ // then
+ assert.equal(displayName, 'helloworld1');
+ });
+
+ it('should extract display name from method with two params' , function () {
+
+ // given
+ var test = 'helloworld2(int,string)';
+
+ // when
+ var displayName = utils.extractDisplayName(test);
+
+ // then
+ assert.equal(displayName, 'helloworld2');
+ });
+ });
+});
diff --git a/utils.extractTypeName.js b/utils.extractTypeName.js
new file mode 100644
index 00000000..2b4bbe76
--- /dev/null
+++ b/utils.extractTypeName.js
@@ -0,0 +1,55 @@
+var assert = require('assert');
+var utils = require('../lib/utils.js');
+
+describe('utils', function () {
+ describe('extractTypeName', function () {
+ it('should extract type name from method with no params', function () {
+
+ // given
+ var test = 'helloworld()';
+
+ // when
+ var typeName = utils.extractTypeName(test);
+
+ // then
+ assert.equal(typeName, '');
+ });
+
+ it('should extract type name from method with one param', function () {
+
+ // given
+ var test = 'helloworld1(int)';
+
+ // when
+ var typeName = utils.extractTypeName(test);
+
+ // then
+ assert.equal(typeName, 'int');
+ });
+
+ it('should extract type name from method with two params', function () {
+
+ // given
+ var test = 'helloworld2(int,string)';
+
+ // when
+ var typeName = utils.extractTypeName(test);
+
+ // then
+ assert.equal(typeName, 'int,string');
+ });
+
+ it('should extract type name from method with spaces between params', function () {
+
+ // given
+ var test = 'helloworld3(int, string)';
+
+ // when
+ var typeName = utils.extractTypeName(test);
+
+ // then
+ assert.equal(typeName, 'int,string');
+ });
+
+ });
+});
diff --git a/web3.methods.js b/web3.methods.js
index d08495dd..06de41da 100644
--- a/web3.methods.js
+++ b/web3.methods.js
@@ -1,6 +1,6 @@
var assert = require('assert');
var web3 = require('../index.js');
-var u = require('./utils.js');
+var u = require('./test.utils.js');
describe('web3', function() {
u.methodExists(web3, 'sha3');