UNPKG

@bitcoinerlab/miniscript

Version:

Bitcoin Miniscript, a high-level language for describing Bitcoin spending conditions. It includes a Policy and Miniscript compiler, as well as a novel Satisfier for generating expressive witness scripts.

47 lines (42 loc) 1.65 kB
import { primitives, timeLocks, other, knowns } from './fixtures.js'; import { satisfier } from '../src/satisfier/index.js'; const createGroupTest = (description, fixtures) => describe(description, () => { for (const [testName, fixture] of Object.entries(fixtures)) { const options = fixture.unknowns || fixture.knowns ? { unknowns: fixture.unknowns, knowns: fixture.knowns } : undefined; if (fixture.throws) { test(testName, () => { expect(() => satisfier(fixture.miniscript, options)).toThrow( fixture.throws ); }); } else { test(testName, () => { const result = satisfier(fixture.miniscript, options); expect(result.nonMalleableSats).toEqual( expect.arrayContaining(fixture.nonMalleableSats) ); expect(result.nonMalleableSats).toHaveLength( fixture.nonMalleableSats.length ); const malleableSats = fixture.malleableSats; const unknownSats = fixture.unknownSats || []; expect(result.malleableSats).toEqual( expect.arrayContaining(malleableSats) ); expect(result.malleableSats).toHaveLength(malleableSats.length); expect(result.unknownSats).toEqual( expect.arrayContaining(unknownSats) ); expect(result.unknownSats).toHaveLength(unknownSats.length); }); } } }); createGroupTest('Timelocks', timeLocks); createGroupTest('Primitives', primitives); createGroupTest('Other', other); createGroupTest('Knowns & unknowns combinations', knowns);