2015-02-23 00:36:57 +01:00
|
|
|
/* global describe, it */
|
|
|
|
/* eslint-disable no-new */
|
|
|
|
|
2014-03-09 06:43:36 +01:00
|
|
|
var assert = require('assert')
|
2014-05-28 11:36:33 +02:00
|
|
|
var opcodes = require('../src/opcodes')
|
2014-04-21 13:51:27 +02:00
|
|
|
|
2014-05-13 09:55:53 +02:00
|
|
|
var Script = require('../src/script')
|
2014-04-21 13:51:27 +02:00
|
|
|
|
2014-05-18 11:47:39 +02:00
|
|
|
var fixtures = require('./fixtures/script.json')
|
2014-05-09 04:56:35 +02:00
|
|
|
|
2015-02-23 00:36:57 +01:00
|
|
|
describe('Script', function () {
|
|
|
|
describe('constructor', function () {
|
|
|
|
it('accepts valid parameters', function () {
|
2014-06-12 04:54:13 +02:00
|
|
|
var buffer = new Buffer([1])
|
|
|
|
var chunks = [1]
|
|
|
|
var script = new Script(buffer, chunks)
|
2014-03-09 06:43:36 +01:00
|
|
|
|
2015-05-07 03:29:20 +02:00
|
|
|
assert.strictEqual(script.buffer, buffer)
|
|
|
|
assert.strictEqual(script.chunks, chunks)
|
2014-03-17 09:13:49 +01:00
|
|
|
})
|
|
|
|
|
2015-02-23 00:36:57 +01:00
|
|
|
it('throws an error when input is not an array', function () {
|
|
|
|
assert.throws(function () {
|
|
|
|
new Script({})
|
|
|
|
}, /Expected Buffer, got/)
|
2014-03-09 06:43:36 +01:00
|
|
|
})
|
|
|
|
})
|
2014-03-22 13:28:20 +01:00
|
|
|
|
2015-02-23 00:36:57 +01:00
|
|
|
describe('fromASM/toASM', function () {
|
|
|
|
fixtures.valid.forEach(function (f) {
|
2015-03-04 11:25:00 +01:00
|
|
|
if (!f.asm) return
|
|
|
|
|
2015-02-23 00:36:57 +01:00
|
|
|
it('decodes/encodes ' + f.description, function () {
|
2015-03-04 11:25:00 +01:00
|
|
|
var script = Script.fromASM(f.asm)
|
|
|
|
|
2015-05-07 03:29:20 +02:00
|
|
|
assert.strictEqual(script.toASM(), f.asm)
|
|
|
|
assert.strictEqual(script.toHex(), f.hex)
|
2014-06-25 07:44:15 +02:00
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
2015-02-23 00:36:57 +01:00
|
|
|
describe('fromHex/toHex', function () {
|
|
|
|
fixtures.valid.forEach(function (f) {
|
|
|
|
it('decodes/encodes ' + f.description, function () {
|
2015-03-04 11:25:00 +01:00
|
|
|
var script = Script.fromHex(f.hex)
|
|
|
|
|
2015-05-07 03:29:20 +02:00
|
|
|
assert.strictEqual(script.toASM(), f.asm)
|
|
|
|
assert.strictEqual(script.toHex(), f.hex)
|
2014-05-09 04:56:51 +02:00
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
2015-02-23 00:36:57 +01:00
|
|
|
describe('getHash', function () {
|
|
|
|
fixtures.valid.forEach(function (f) {
|
2015-03-04 10:32:08 +01:00
|
|
|
it('produces a HASH160 of ' + f.description, function () {
|
2014-05-09 04:56:51 +02:00
|
|
|
var script = Script.fromHex(f.hex)
|
|
|
|
|
2015-05-07 03:29:20 +02:00
|
|
|
assert.strictEqual(script.getHash().toString('hex'), f.hash)
|
2014-05-05 06:44:45 +02:00
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
2015-02-23 00:36:57 +01:00
|
|
|
describe('fromChunks', function () {
|
|
|
|
it('should match expected behaviour', function () {
|
2014-05-28 11:36:33 +02:00
|
|
|
var hash = new Buffer(32)
|
2014-06-12 12:58:56 +02:00
|
|
|
hash.fill(0)
|
|
|
|
|
2014-05-28 11:36:33 +02:00
|
|
|
var script = Script.fromChunks([
|
|
|
|
opcodes.OP_HASH160,
|
|
|
|
hash,
|
|
|
|
opcodes.OP_EQUAL
|
|
|
|
])
|
|
|
|
|
2015-05-07 03:29:20 +02:00
|
|
|
assert.strictEqual(script.toHex(), 'a920000000000000000000000000000000000000000000000000000000000000000087')
|
2014-05-28 11:36:33 +02:00
|
|
|
})
|
|
|
|
})
|
|
|
|
|
2015-02-23 00:36:57 +01:00
|
|
|
describe('without', function () {
|
2014-05-28 11:36:33 +02:00
|
|
|
var hex = 'a914e8c300c87986efa94c37c0519929019ef86eb5b487'
|
|
|
|
var script = Script.fromHex(hex)
|
|
|
|
|
2015-02-23 00:36:57 +01:00
|
|
|
it('should return a script without the given value', function () {
|
2014-05-28 11:36:33 +02:00
|
|
|
var subScript = script.without(opcodes.OP_HASH160)
|
|
|
|
|
2015-05-07 03:29:20 +02:00
|
|
|
assert.strictEqual(subScript.toHex(), '14e8c300c87986efa94c37c0519929019ef86eb5b487')
|
2014-05-28 11:36:33 +02:00
|
|
|
})
|
|
|
|
|
2015-02-23 00:36:57 +01:00
|
|
|
it('shouldnt mutate the original script', function () {
|
2014-05-28 11:36:33 +02:00
|
|
|
var subScript = script.without(opcodes.OP_EQUAL)
|
|
|
|
|
|
|
|
assert.notEqual(subScript.toHex(), hex)
|
2015-05-07 03:29:20 +02:00
|
|
|
assert.strictEqual(script.toHex(), hex)
|
2014-05-28 11:36:33 +02:00
|
|
|
})
|
|
|
|
})
|
2014-03-09 06:43:36 +01:00
|
|
|
})
|