From 0007ffb8ed05644d7b39953e6118c39ce5333a70 Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Mon, 3 Oct 2016 18:34:06 -0400 Subject: [PATCH] Add unit tests for isWitnessProgram --- lib/script/script.js | 4 ++-- test/script/script.js | 29 +++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/lib/script/script.js b/lib/script/script.js index ab72917..fa5427f 100644 --- a/lib/script/script.js +++ b/lib/script/script.js @@ -415,10 +415,10 @@ Script.prototype.isWitnessProgram = function(values) { values = {}; } var buf = this.toBuffer(); - if (buf.length < 4 || buf.length > 34) { + if (buf.length < 4 || buf.length > 42) { return false; } - if (buf[0] >= Opcode.OP_0 && (buf[0] < 1 && buf[0] > 16)) { + if (buf[0] !== Opcode.OP_0 && !(buf[0] >= Opcode.OP_1 && buf[0] <= Opcode.OP_16)) { return false; } diff --git a/test/script/script.js b/test/script/script.js index 6f55196..aeabbdc 100644 --- a/test/script/script.js +++ b/test/script/script.js @@ -427,6 +427,35 @@ describe('Script', function() { }); }); + describe('#isWitnessProgram', function() { + it('will default values to empty object', function() { + Script('OP_0 20 0x799d283e7f92af1dd242bf4eea513c6efd117de2') + .isWitnessProgram().should.equal(true); + }); + it('will return false if script is data push longer than 40 bytes', function() { + Script('OP_0 42 0xd06863c385592423903682926825c495b6cf88fd7cd6159ffd72f778ca475d3046e7b87835d3b457cd') + .isWitnessProgram().should.equal(false); + }); + it('will return false if first byte op_code is greater than OP_16', function() { + Script('OP_NOP 20 0x799d283e7f92af1dd242bf4eea513c6efd117de2') + .isWitnessProgram().should.equal(false); + }); + it('will return true with datapush of 20', function() { + var values = {}; + Script('OP_0 20 0x799d283e7f92af1dd242bf4eea513c6efd117de2') + .isWitnessProgram(values).should.equal(true); + values.version.should.equal(0); + values.program.toString('hex').should.equal('799d283e7f92af1dd242bf4eea513c6efd117de2'); + }); + it('will return true with datapush of 32', function() { + var values = {}; + Script('OP_0 32 0xc756f6d660d4aaad55534cac599a0d9bf5c7e8f70363d22926291811a168c620') + .isWitnessProgram(values).should.equal(true); + values.version.should.equal(0); + values.program.toString('hex').should.equal('c756f6d660d4aaad55534cac599a0d9bf5c7e8f70363d22926291811a168c620'); + }); + }); + describe('#isPushOnly', function() { it('should know these scripts are or aren\'t push only', function() { Script('OP_NOP 1 0x01').isPushOnly().should.equal(false);