Browse Source

Add unit tests for isWitnessProgram

patch-2
Braydon Fuller 9 years ago
committed by Braydon Fuller
parent
commit
0007ffb8ed
  1. 4
      lib/script/script.js
  2. 29
      test/script/script.js

4
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;
}

29
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);

Loading…
Cancel
Save