| pure @safe unittest | |
| { | |
| import std.base64; | |
| ubyte[] data = [0x83, 0xd7, 0x30, 0x7a, 0x01, 0x3f]; | |
| assert(Base64.encode(data) == "g9cwegE/"); | |
| assert(Base64.decode("g9cwegE/") == data); | |
| } | |
| pure @safe unittest | |
| { | |
| import std.base64; | |
| ubyte[] data = [0x83, 0xd7, 0x30, 0x7a, 0x01, 0x3f]; | |
| assert(Base64URL.encode(data) == "g9cwegE_"); | |
| assert(Base64URL.decode("g9cwegE_") == data); | |
| } | |
| pure @safe unittest | |
| { | |
| import std.base64; | |
| ubyte[] data = [0x83, 0xd7, 0x30, 0x7b, 0xef]; | |
| assert(Base64URLNoPadding.encode(data) == "g9cwe-8"); | |
| assert(Base64URLNoPadding.decode("g9cwe-8") == data); | |
| } | |
| @safe unittest | |
| { | |
| import std.base64; | |
| ubyte[] data = [0x1a, 0x2b, 0x3c, 0x4d, 0x5d, 0x6e]; | |
| // Allocate a buffer large enough to hold the encoded string. | |
| auto buf = new char[Base64.encodeLength(data.length)]; | |
| Base64.encode(data, buf); | |
| assert(buf == "Gis8TV1u"); | |
| } | |
| @nogc nothrow @safe unittest | |
| { | |
| import std.base64; | |
| ubyte[6] data = [0x83, 0xd7, 0x30, 0x7a, 0x01, 0x3f]; | |
| char[32] buffer; // much bigger than necessary | |
| // Just to be sure... | |
| auto encodedLength = Base64.encodeLength(data.length); | |
| assert(buffer.length >= encodedLength); | |
| // encode() returns a slice to the provided buffer. | |
| auto encoded = Base64.encode(data[], buffer[]); | |
| assert(encoded is buffer[0 .. encodedLength]); | |
| assert(encoded == "g9cwegE/"); | |
| } | |
| @safe pure nothrow unittest | |
| { | |
| import std.base64; | |
| import std.array : appender; | |
| auto output = appender!string(); | |
| ubyte[] data = [0x1a, 0x2b, 0x3c, 0x4d, 0x5d, 0x6e]; | |
| // This overload of encode() returns the number of calls to the output | |
| // range's put method. | |
| assert(Base64.encode(data, output) == 8); | |
| assert(output.data == "Gis8TV1u"); | |
| } | |
| @safe unittest | |
| { | |
| import std.base64; | |
| ubyte[] data = [0x1a, 0x2b, 0x3c, 0x4d, 0x5d, 0x6e]; | |
| assert(Base64.encode(data) == "Gis8TV1u"); | |
| } | |
| @safe unittest | |
| { | |
| import std.base64; | |
| auto encoded = "Gis8TV1u"; | |
| // Allocate a sufficiently large buffer to hold to decoded result. | |
| auto buffer = new ubyte[Base64.decodeLength(encoded.length)]; | |
| Base64.decode(encoded, buffer); | |
| assert(buffer == [0x1a, 0x2b, 0x3c, 0x4d, 0x5d, 0x6e]); | |
| } | |
| @safe unittest | |
| { | |
| import std.base64; | |
| auto encoded = "Gis8TV1u"; | |
| ubyte[32] buffer; // much bigger than necessary | |
| // Just to be sure... | |
| auto decodedLength = Base64.decodeLength(encoded.length); | |
| assert(buffer.length >= decodedLength); | |
| // decode() returns a slice of the given buffer. | |
| auto decoded = Base64.decode(encoded, buffer[]); | |
| assert(decoded is buffer[0 .. decodedLength]); | |
| assert(decoded == [0x1a, 0x2b, 0x3c, 0x4d, 0x5d, 0x6e]); | |
| } | |
| @system unittest | |
| { | |
| import std.base64; | |
| struct OutputRange | |
| { | |
| ubyte[] result; | |
| void put(ubyte b) { result ~= b; } | |
| } | |
| OutputRange output; | |
| // This overload of decode() returns the number of calls to put(). | |
| assert(Base64.decode("Gis8TV1u", output) == 6); | |
| assert(output.result == [0x1a, 0x2b, 0x3c, 0x4d, 0x5d, 0x6e]); | |
| } | |
| @safe unittest | |
| { | |
| import std.base64; | |
| auto data = "Gis8TV1u"; | |
| assert(Base64.decode(data) == [0x1a, 0x2b, 0x3c, 0x4d, 0x5d, 0x6e]); | |
| } | |
| @safe pure unittest | |
| { | |
| import std.base64; | |
| import std.algorithm.comparison : equal; | |
| string encoded = | |
| "VGhvdSBzaGFsdCBuZXZlciBjb250aW51ZSBhZnRlciBhc3NlcnRpbmcgbnVsbA=="; | |
| assert(Base64.decoder(encoded) | |
| .equal("Thou shalt never continue after asserting null")); | |
| } | |
| @safe unittest | |
| { | |
| import std.base64; | |
| import std.string : representation; | |
| // pre-defined: alias Base64 = Base64Impl!('+', '/'); | |
| ubyte[] emptyArr; | |
| assert(Base64.encode(emptyArr) == ""); | |
| assert(Base64.encode("f".representation) == "Zg=="); | |
| assert(Base64.encode("foo".representation) == "Zm9v"); | |
| alias Base64Re = Base64Impl!('!', '=', Base64.NoPadding); | |
| assert(Base64Re.encode("f".representation) == "Zg"); | |
| assert(Base64Re.encode("foo".representation) == "Zm9v"); | |
| } | |
| @safe unittest | |
| { | |
| import std.base64; | |
| import std.exception : assertThrown; | |
| assertThrown!Base64Exception(Base64.decode("ab|c")); | |
| } | |