mirror of
https://github.com/denoland/std.git
synced 2024-11-22 04:59:05 +00:00
479b258f99
Co-authored-by: Yoshiya Hinosawa <stibium121@gmail.com>
65 lines
1.5 KiB
TypeScript
65 lines
1.5 KiB
TypeScript
// Test cases copied from https://github.com/LinusU/base32-encode/blob/master/test.js
|
|
// Copyright (c) 2016-2017 Linus Unnebäck. MIT license.
|
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
|
import { assertEquals, assertExists, assertThrows } from "@std/assert";
|
|
import { decodeBase32, encodeBase32 } from "./base32.ts";
|
|
|
|
// Test vectors from https://www.rfc-editor.org/rfc/rfc4648.html#section-10
|
|
const testCases = [
|
|
["", ""],
|
|
["f", "MY======"],
|
|
["fo", "MZXQ===="],
|
|
["foo", "MZXW6==="],
|
|
["foob", "MZXW6YQ="],
|
|
["fooba", "MZXW6YTB"],
|
|
["foobar", "MZXW6YTBOI======"],
|
|
] as const;
|
|
|
|
Deno.test({
|
|
name: "encodeBase32()",
|
|
fn() {
|
|
for (const [bin, b32] of testCases) {
|
|
assertEquals(encodeBase32(bin), b32);
|
|
}
|
|
},
|
|
});
|
|
|
|
Deno.test({
|
|
name: "decodeBase32()",
|
|
fn() {
|
|
for (const [bin, b32] of testCases) {
|
|
assertEquals(decodeBase32(b32), new TextEncoder().encode(bin));
|
|
}
|
|
},
|
|
});
|
|
|
|
Deno.test({
|
|
name: "decodeBase32() throws on bad length",
|
|
fn() {
|
|
assertThrows(
|
|
() => decodeBase32("OOOO=="),
|
|
Error,
|
|
"Cannot decode base32 string as the length must be a multiple of 8: received length 6",
|
|
);
|
|
},
|
|
});
|
|
|
|
Deno.test({
|
|
name: "decodeBase32() throws on bad padding",
|
|
fn() {
|
|
assertThrows(
|
|
() => decodeBase32("5HXR334AQYAAAA=="),
|
|
Error,
|
|
"Invalid pad length",
|
|
);
|
|
},
|
|
});
|
|
|
|
Deno.test({
|
|
name: "encodeBase32() encodes very long text",
|
|
fn() {
|
|
const data = "a".repeat(16400);
|
|
assertExists(encodeBase32(data));
|
|
},
|
|
});
|