65 lines
1.9 KiB
TypeScript
65 lines
1.9 KiB
TypeScript
import { Slip10RawIndex } from "@cosmjs/crypto";
|
|
import { makeCosmoshubPath } from "@cosmjs/proto-signing";
|
|
|
|
import { makePathBuilder, PathBuilder } from "./pathbuilder";
|
|
|
|
describe("pathbuilder", () => {
|
|
describe("PathBuilder", () => {
|
|
it("is compatible to makeCosmoshubPath", () => {
|
|
const _builder: PathBuilder = makeCosmoshubPath;
|
|
});
|
|
});
|
|
|
|
describe("makePathBuilder", () => {
|
|
it("works", () => {
|
|
const hub = makePathBuilder("m/44'/118'/0'/0/a");
|
|
expect(hub(0)).toEqual([
|
|
Slip10RawIndex.hardened(44),
|
|
Slip10RawIndex.hardened(118),
|
|
Slip10RawIndex.hardened(0),
|
|
Slip10RawIndex.normal(0),
|
|
Slip10RawIndex.normal(0),
|
|
]);
|
|
expect(hub(25)).toEqual([
|
|
Slip10RawIndex.hardened(44),
|
|
Slip10RawIndex.hardened(118),
|
|
Slip10RawIndex.hardened(0),
|
|
Slip10RawIndex.normal(0),
|
|
Slip10RawIndex.normal(25),
|
|
]);
|
|
|
|
const stellar = makePathBuilder("m/44'/148'/a'");
|
|
expect(stellar(0)).toEqual([
|
|
Slip10RawIndex.hardened(44),
|
|
Slip10RawIndex.hardened(148),
|
|
Slip10RawIndex.hardened(0),
|
|
]);
|
|
expect(stellar(42)).toEqual([
|
|
Slip10RawIndex.hardened(44),
|
|
Slip10RawIndex.hardened(148),
|
|
Slip10RawIndex.hardened(42),
|
|
]);
|
|
});
|
|
|
|
it("throws for invalid patterns", () => {
|
|
// No `a`
|
|
expect(() => makePathBuilder("m/44'/118'/0'/0/30")).toThrowError(
|
|
/Missing account index variable `a` in pattern./i,
|
|
);
|
|
|
|
// Two `a`
|
|
expect(() => makePathBuilder("m/44'/118'/a'/0/a")).toThrowError(
|
|
/More than one account index variable `a` in pattern/i,
|
|
);
|
|
|
|
// Stray character
|
|
expect(() => makePathBuilder("m/44'?/118'/0'/0/a")).toThrowError(
|
|
/Syntax error while reading path component/i,
|
|
);
|
|
|
|
// Missing m/
|
|
expect(() => makePathBuilder("44'/118'/0'/0/a")).toThrowError(/Path string must start with 'm'/i);
|
|
});
|
|
});
|
|
});
|