forked from facebook/hermes
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBase64Test.cpp
More file actions
70 lines (55 loc) · 2.1 KB
/
Base64Test.cpp
File metadata and controls
70 lines (55 loc) · 2.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#include "hermes/Support/Base64.h"
#include "gtest/gtest.h"
using namespace hermes;
namespace {
TEST(Base64Test, DecodePadded) {
EXPECT_EQ(base64Decode("YQ==").getValue(), "a");
EXPECT_EQ(base64Decode("YWI=").getValue(), "ab");
EXPECT_EQ(base64Decode("YWJj").getValue(), "abc");
EXPECT_EQ(base64Decode("YWJjZA==").getValue(), "abcd");
EXPECT_EQ(base64Decode("YWJjZGU=").getValue(), "abcde");
EXPECT_EQ(base64Decode("YWJjZGVm").getValue(), "abcdef");
}
TEST(Base64Test, DecodeUnpadded) {
// Only 2 or 3 chars can remain
EXPECT_EQ(base64Decode("Y"), llvh::None);
EXPECT_EQ(base64Decode("YQ").getValue(), "a");
EXPECT_EQ(base64Decode("YWI").getValue(), "ab");
EXPECT_EQ(base64Decode("YWJj").getValue(), "abc");
EXPECT_EQ(base64Decode("YWJjZ"), llvh::None);
EXPECT_EQ(base64Decode("YWJjZA").getValue(), "abcd");
EXPECT_EQ(base64Decode("YWJjZGU").getValue(), "abcde");
EXPECT_EQ(base64Decode("YWJjZGVm").getValue(), "abcdef");
}
TEST(Base64Test, DecodeInvalid) {
// Non-Base64 Ascii, i.e., not [a-z]|[A-Z]|[0-p]|\+|\/
EXPECT_EQ(base64Decode("*"), llvh::None);
EXPECT_EQ(base64Decode("YQ*"), llvh::None);
// Out of Ascii range.
EXPECT_EQ(base64Decode("\xFF"), llvh::None);
// Padding in the middle
EXPECT_EQ(base64Decode("YQ==YQ=="), llvh::None);
// Extra padding
EXPECT_EQ(base64Decode("YQ==="), llvh::None);
}
TEST(DataURLTst, ParseDataURL) {
EXPECT_EQ(
parseJSONBase64DataURL("data:application/json;base64,YQ==").getValue(),
"a");
// Invalid data
EXPECT_EQ(
parseJSONBase64DataURL("data:application/json;base64,Y"), llvh::None);
// Missing [;base64]
EXPECT_EQ(parseJSONBase64DataURL("data:,YQ=="), llvh::None);
EXPECT_EQ(parseJSONBase64DataURL("data:text/plain,YQ=="), llvh::None);
// Invalid mediatype
EXPECT_EQ(parseJSONBase64DataURL("data:html,YQ"), llvh::None);
EXPECT_EQ(parseJSONBase64DataURL("data:text/plain,YQ=="), llvh::None);
}
} // end anonymous namespace