cosmjs-util/packages/faucet/src/pathbuilder.spec.ts
2021-07-22 16:56:09 +02:00

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