From 6a74eb6993e618496080f76718a0393acbc72447 Mon Sep 17 00:00:00 2001 From: Karel Bilek Date: Sun, 14 Feb 2016 16:12:16 +0100 Subject: [PATCH] Renaming Path to Bip32Path, invalid to fixtures Only thing I haven't been able to do is to add "undefined" to fixtures. So I could not properly test that node.derivePath() properly fails as it should. However, I added "null" there, and "null" and "undefined" behave in similar way in JavaScript, so that should catch that. --- src/hdnode.js | 2 +- src/types.js | 4 +-- test/fixtures/hdnode.json | 21 +++++++++++ test/hdnode.js | 75 +++++++++------------------------------ 4 files changed, 40 insertions(+), 62 deletions(-) diff --git a/src/hdnode.js b/src/hdnode.js index e478bb2..784acf5 100644 --- a/src/hdnode.js +++ b/src/hdnode.js @@ -292,7 +292,7 @@ HDNode.prototype.isNeutered = function () { } HDNode.prototype.derivePath = function (path) { - typeforce(types.Path, path) + typeforce(types.Bip32Path, path) var splitPath = path.split('/') if (splitPath[0] === 'm') { diff --git a/src/types.js b/src/types.js index 6a85ac9..c25eb84 100644 --- a/src/types.js +++ b/src/types.js @@ -26,7 +26,7 @@ function UInt53 (value) { Math.floor(value) === value } -function Path (value) { +function Bip32Path (value) { return typeforce.String(value) && value.match(/^([m]\/)?([0-9]+[']?\/)*([0-9]+[']?)$/) } @@ -63,7 +63,7 @@ var types = { UInt31: UInt31, UInt32: UInt32, UInt53: UInt53, - Path: Path + Bip32Path: Bip32Path } for (var typeName in typeforce) { diff --git a/test/fixtures/hdnode.json b/test/fixtures/hdnode.json index 5de3c0e..21ca41d 100644 --- a/test/fixtures/hdnode.json +++ b/test/fixtures/hdnode.json @@ -232,6 +232,27 @@ "exception": "Point is not on the curve", "hex": "0488b21e000000000000000000873dff81c02f525623fd1fe5167eac3a55a049de3d314bb42ee227ffed37d508020045400697100007000037899988826500030092003000016366806305909050" } + ], + "deriveHardened": [ + 2147483648, + null, + "foo", + -1 + ], + "derive": [ + 4294967296, + null, + "foo", + -1 + ], + "derivePath": [ + 2, + [2, 3, 4], + "/", + "m/m/123", + "a/0/1/2", + "m/0/ 1 /2", + "m/0/1.5/2" ] } } diff --git a/test/hdnode.js b/test/hdnode.js index d1c60f4..c5a55fb 100644 --- a/test/hdnode.js +++ b/test/hdnode.js @@ -365,70 +365,27 @@ describe('HDNode', function () { }, /Could not derive hardened child key/) }) - it('throws on negative indexes', function () { - var f = fixtures.valid[0] - var master = HDNode.fromBase58(f.master.base58, NETWORKS_LIST) - - assert.throws(function () { - master.deriveHardened(-1) - }, /Expected UInt31/) - assert.throws(function () { - master.derive(-1) - }, /Expected UInt32/) - }) - - it('throws on high indexes', function () { + it('throws on wrong types', function () { var f = fixtures.valid[0] var master = HDNode.fromBase58(f.master.base58, NETWORKS_LIST) - assert.throws(function () { - master.deriveHardened(0x80000000) - }, /Expected UInt31/) - assert.throws(function () { - master.derive(0x100000000) - }, /Expected UInt32/) - }) + fixtures.invalid.derive.forEach(function (fx) { + assert.throws(function () { + master.derive(fx) + }, /Expected UInt32/) + }) - it('throws on wrong types', function () { - var f = fixtures.valid[0] - var master = HDNode.fromBase58(f.master.base58, NETWORKS_LIST) + fixtures.invalid.deriveHardened.forEach(function (fx) { + assert.throws(function () { + master.deriveHardened(fx) + }, /Expected UInt31/) + }) - assert.throws(function () { - master.deriveHardened() - }, /Expected UInt31/) - assert.throws(function () { - master.derive() - }, /Expected UInt32/) - assert.throws(function () { - master.deriveHardened('foo') - }, /Expected UInt31/) - assert.throws(function () { - master.derive('foo') - }, /Expected UInt32/) - assert.throws(function () { - master.derivePath() - }, /Expected Path/) - assert.throws(function () { - master.derivePath(2) - }, /Expected Path/) - assert.throws(function () { - master.derivePath([2, 3, 4]) - }, /Expected Path/) - assert.throws(function () { - master.derivePath('/') - }, /Expected Path/) - assert.throws(function () { - master.derivePath('m/m/123') - }, /Expected Path/) - assert.throws(function () { - master.derivePath('a/0/1/2') - }, /Expected Path/) - assert.throws(function () { - master.derivePath('m/0/ 1 /2') - }, /Expected Path/) - assert.throws(function () { - master.derivePath('m/0/1.5/2') - }, /Expected Path/) + fixtures.invalid.derivePath.forEach(function (fx) { + assert.throws(function () { + master.derivePath(fx) + }, /Expected Bip32Path/) + }) }) }) })