1 | // Copyright 2013 The Flutter Authors. All rights reserved. |
2 | // Use of this source code is governed by a BSD-style license that can be |
3 | // found in the LICENSE file. |
4 | |
5 | #include "flutter/fml/base32.h" |
6 | #include "gtest/gtest.h" |
7 | |
8 | #include <iostream> |
9 | |
10 | TEST(Base32Test, CanEncode) { |
11 | { |
12 | auto result = fml::Base32Encode("hello" ); |
13 | ASSERT_TRUE(result.first); |
14 | ASSERT_EQ(result.second, "NBSWY3DP" ); |
15 | } |
16 | |
17 | { |
18 | auto result = fml::Base32Encode("helLo" ); |
19 | ASSERT_TRUE(result.first); |
20 | ASSERT_EQ(result.second, "NBSWYTDP" ); |
21 | } |
22 | |
23 | { |
24 | auto result = fml::Base32Encode("" ); |
25 | ASSERT_TRUE(result.first); |
26 | ASSERT_EQ(result.second, "" ); |
27 | } |
28 | |
29 | { |
30 | auto result = fml::Base32Encode("1" ); |
31 | ASSERT_TRUE(result.first); |
32 | ASSERT_EQ(result.second, "GE" ); |
33 | } |
34 | |
35 | { |
36 | auto result = fml::Base32Encode("helLo" ); |
37 | ASSERT_TRUE(result.first); |
38 | ASSERT_EQ(result.second, "NBSWYTDP" ); |
39 | } |
40 | } |
41 | |
42 | TEST(Base32Test, CanEncodeDecodeStrings) { |
43 | std::vector<std::string> strings = {"hello" , "helLo" , "" , "1" , "\0" }; |
44 | for (size_t i = 0; i < strings.size(); i += 1) { |
45 | auto encode_result = fml::Base32Encode(strings[i]); |
46 | ASSERT_TRUE(encode_result.first); |
47 | auto decode_result = fml::Base32Decode(encode_result.second); |
48 | ASSERT_TRUE(decode_result.first); |
49 | const std::string& decoded = decode_result.second; |
50 | std::string decoded_string(decoded.data(), decoded.size()); |
51 | ASSERT_EQ(strings[i], decoded_string); |
52 | } |
53 | } |
54 | |
55 | TEST(Base32Test, DecodeReturnsFalseForInvalideInput) { |
56 | // "B" is invalid because it has a non-zero padding. |
57 | std::vector<std::string> invalid_inputs = {"a" , "1" , "9" , "B" }; |
58 | for (const std::string& input : invalid_inputs) { |
59 | auto decode_result = fml::Base32Decode(input); |
60 | if (decode_result.first) { |
61 | std::cout << "Base32Decode should return false on " << input << std::endl; |
62 | } |
63 | ASSERT_FALSE(decode_result.first); |
64 | } |
65 | } |
66 | |
67 | TEST(Base32Test, CanDecodeSkSLKeys) { |
68 | std::vector<std::string> inputs = { |
69 | "CAZAAAACAAAAADQAAAABKAAAAAJQAAIA7777777777776EYAAEAP777777777777AAAAAABA" |
70 | "ABTAAAAAAAAAAAAAAABAAAAAGQAGGAA" , |
71 | "CAZAAAICAAAAAAAAAAADOAAAAAJQAAIA777777Y4AAKAAEYAAEAP777777777777EAAGMAAA" |
72 | "AAAAAAAAAAACQACNAAAAAAAAAAAAAAACAAAAAPAAMMAA" , |
73 | "CAZACAACAAAABAYACAAAAAAAAAJQAAIADQABIAH777777777777RQAAOAAAAAAAAAAAAAABE" |
74 | "AANQAAAAAAAAAAAAAAYAAJYAAAAAAAANAAAQAAAAAAAEAAAHAAAAAAAAAAAAAAANAAAQAAAA" |
75 | "AAAFIADKAAAAAAAAAAAAAAACAAAAAZAAMMAA" }; |
76 | for (const std::string& input : inputs) { |
77 | auto decode_result = fml::Base32Decode(input); |
78 | if (!decode_result.first) { |
79 | std::cout << "Base32Decode should return true on " << input << std::endl; |
80 | } |
81 | ASSERT_TRUE(decode_result.first); |
82 | auto encode_result = fml::Base32Encode(decode_result.second); |
83 | ASSERT_TRUE(encode_result.first); |
84 | ASSERT_EQ(encode_result.second, input); |
85 | } |
86 | } |
87 | |