taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit 31a2564086f1ad6e6d898c9c817fbdc147377cdc
parent 69ce816b345284c10bbaab6217c66e6e5c8db354
Author: Florian Dold <dold@taler.net>
Date:   Tue, 21 Jul 2026 00:40:41 +0200

util: test version compatibility

Diffstat:
Mpackages/taler-util/src/libtool-version.test.ts | 31+++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+), 0 deletions(-)

diff --git a/packages/taler-util/src/libtool-version.test.ts b/packages/taler-util/src/libtool-version.test.ts @@ -49,3 +49,34 @@ test("version comparison", (t) => { assert.ok(LibtoolVersion.compare("42:0:1", "41:0:0")?.compatible); assert.ok(LibtoolVersion.compare("41:0:0", "42:0:1")?.compatible); }); + +test("isCompatible reports incompatibility", (t) => { + // compare() returns an object on incompatibility, which is truthy -- so a + // bare truthiness test on it only ever detects an unparseable version. + // Resolved dynamically so that this file still compiles before the helper + // exists. + const isCompatible = (LibtoolVersion as any).isCompatible as ( + a: string, + b: string, + ) => boolean; + assert.strictEqual(typeof isCompatible, "function"); + assert.strictEqual(isCompatible("41:0:0", "0:0:0"), false); + assert.strictEqual(isCompatible("4:0:0", "99:0:0"), false); + assert.strictEqual(isCompatible("1:0:1", "1:0:0"), true); + // Unparseable input is not compatible either. + assert.strictEqual(isCompatible("4:0:0", "bogus"), false); +}); + +test("parseVersion requires plain decimal components", (t) => { + // The C reference uses sscanf("%u:%u:%u%c") and requires exactly three + // conversions, so none of these are valid protocol versions. + assert.strictEqual(LibtoolVersion.parseVersion("3:0:1garbage"), undefined); + assert.strictEqual(LibtoolVersion.parseVersion("0x10:0:0"), undefined); + assert.strictEqual(LibtoolVersion.parseVersion("1.9:0:0"), undefined); + assert.strictEqual(LibtoolVersion.parseVersion("-1:0:0"), undefined); + assert.deepStrictEqual(LibtoolVersion.parseVersion("3:0:1"), { + current: 3, + revision: 0, + age: 1, + }); +});