Skip to content
File

Blob: src/workerd/api/base64-test.c++

1.7 KB
1#include "base64.h"
2#include "workerd/tests/test-fixture.h"
3 
4#include <kj/encoding.h>
5#include <kj/test.h>
6 
7namespace workerd::api {
8namespace {
9 
10KJ_TEST("base64 encode") {
11 TestFixture t;
12 
13 t.runInIoContext([](const workerd::TestFixture::Environment& env) {
14 auto b = Base64Module();
15 auto ab = jsg::JsArrayBuffer::create(env.js, 1);
16 ab.asArrayPtr().begin()[0] = 'A';
17 auto ret = b.encodeArray(env.js, jsg::JsBufferSource(ab));
18 KJ_ASSERT(ret.asArrayPtr() == "QQ=="_kjb);
19 });
20}
21 
22KJ_TEST("base64 valid decode") {
23 TestFixture t;
24 
25 t.runInIoContext([](const workerd::TestFixture::Environment& env) {
26 auto b = Base64Module();
27 auto ab = jsg::JsArrayBuffer::create(env.js, 4);
28 ab.asArrayPtr().copyFrom("QQ=="_kjb);
29 auto ret = b.decodeArray(env.js, jsg::JsBufferSource(ab));
30 KJ_ASSERT(ret.asArrayPtr() == "A"_kjb);
31 });
32}
33 
34KJ_TEST("base64 invalid decode") {
35 TestFixture t;
36 
37 t.runInIoContext([](const workerd::TestFixture::Environment& env) {
38 auto b = Base64Module();
39 auto ab = jsg::JsArrayBuffer::create(env.js, 14);
40 ab.asArrayPtr().copyFrom("INVALID BASE64"_kjb);
41 try {
42 b.decodeArray(env.js, jsg::JsBufferSource(ab));
43 KJ_UNREACHABLE;
44 } catch (kj::Exception& e) {
45 KJ_EXPECT(e.getDescription().contains("jsg.DOMException(SyntaxError): Invalid base64"_kj));
46 }
47 });
48}
49 
50KJ_TEST("base64 decode as string") {
51 TestFixture t;
52 
53 t.runInIoContext([](const workerd::TestFixture::Environment& env) {
54 auto b = Base64Module();
55 auto ab = jsg::JsArrayBuffer::create(env.js, 1);
56 ab.asArrayPtr().begin()[0] = 'A';
57 KJ_ASSERT(b.encodeArrayToString(env.js, jsg::JsBufferSource(ab)) == env.js.str("QQ=="_kj));
58 });
59}
60} // namespace
61} // namespace workerd::api