diff --git a/ts/src/program/common.ts b/ts/src/program/common.ts index 5fd24e1968..4990e3dab8 100644 --- a/ts/src/program/common.ts +++ b/ts/src/program/common.ts @@ -55,14 +55,7 @@ export function validateAccounts( // Translates an address to a Pubkey. export function translateAddress(address: Address): PublicKey { - if (typeof address === "string") { - const pk = new PublicKey(address); - return pk; - } else if (address.constructor.prototype.constructor.name === "PublicKey") { - return address; - } else { - throw new Error("Given address is not a PublicKey nor a string."); - } + return new PublicKey(address); } /** diff --git a/ts/tests/program-common.spec.ts b/ts/tests/program-common.spec.ts new file mode 100644 index 0000000000..479638fea0 --- /dev/null +++ b/ts/tests/program-common.spec.ts @@ -0,0 +1,56 @@ +import BN from "bn.js"; +import bs58 from "bs58"; +import { PublicKey } from "@solana/web3.js"; + +import { translateAddress } from "../src/program/common"; + +describe("program/common", () => { + describe("translateAddress", () => { + it("should accept a valid string address", () => { + const address = "11111111111111111111111111111111"; + + const func = () => translateAddress(address); + expect(func).not.toThrow(); + + const output = func(); + expect(output).toBeInstanceOf(PublicKey); + expect(new PublicKey(address).equals(output)).toBeTruthy(); + }); + + it("should accept a PublicKey address", () => { + const publicKey = new PublicKey("11111111111111111111111111111111"); + + const func = () => translateAddress(publicKey); + expect(func).not.toThrow(); + + const output = func(); + expect(output).toBeInstanceOf(PublicKey); + expect(new PublicKey(publicKey).equals(output)).toBe(true); + }); + + it("should accept an object with a PublicKey shape { _bn }", () => { + const obj = ({ + _bn: new BN(bs58.decode("11111111111111111111111111111111")), + } as any) as PublicKey; + const func = () => translateAddress(obj); + + expect(func).not.toThrow(); + const output = func(); + + expect(output).toBeInstanceOf(PublicKey); + expect(new PublicKey(obj).equals(output)).toBe(true); + }); + + it("should not accept an invalid string address", () => { + const invalid = "invalid"; + const func = () => translateAddress(invalid); + expect(func).toThrow(); + }); + + it("should not accept an invalid object", () => { + const invalid = {} as PublicKey; + const func = () => translateAddress(invalid); + expect(func).toThrow(); + }); + }); +});