Flutter Engine
The Flutter Engine
base32_unittest.cc
Go to the documentation of this file.
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
7#include <iostream>
8
9#include "gtest/gtest.h"
10
11TEST(Base32Test, CanEncode) {
12 {
13 auto result = fml::Base32Encode("hello");
14 ASSERT_TRUE(result.first);
15 ASSERT_EQ(result.second, "NBSWY3DP");
16 }
17
18 {
19 auto result = fml::Base32Encode("helLo");
20 ASSERT_TRUE(result.first);
21 ASSERT_EQ(result.second, "NBSWYTDP");
22 }
23
24 {
25 auto result = fml::Base32Encode("");
26 ASSERT_TRUE(result.first);
27 ASSERT_EQ(result.second, "");
28 }
29
30 {
31 auto result = fml::Base32Encode("1");
32 ASSERT_TRUE(result.first);
33 ASSERT_EQ(result.second, "GE");
34 }
35
36 {
37 auto result = fml::Base32Encode("helLo");
38 ASSERT_TRUE(result.first);
39 ASSERT_EQ(result.second, "NBSWYTDP");
40 }
41
42 {
43 auto result = fml::Base32Encode("\xff\xfe\x7f\x80\x81");
44 ASSERT_TRUE(result.first);
45 ASSERT_EQ(result.second, "777H7AEB");
46 }
47}
48
49TEST(Base32Test, CanEncodeDecodeStrings) {
50 std::vector<std::string> strings = {"hello", "helLo", "", "1", "\0"};
51 for (size_t i = 0; i < strings.size(); i += 1) {
52 auto encode_result = fml::Base32Encode(strings[i]);
53 ASSERT_TRUE(encode_result.first);
54 auto decode_result = fml::Base32Decode(encode_result.second);
55 ASSERT_TRUE(decode_result.first);
56 const std::string& decoded = decode_result.second;
57 std::string decoded_string(decoded.data(), decoded.size());
58 ASSERT_EQ(strings[i], decoded_string);
59 }
60}
61
62TEST(Base32Test, DecodeReturnsFalseForInvalideInput) {
63 // "B" is invalid because it has a non-zero padding.
64 std::vector<std::string> invalid_inputs = {"a", "1", "9", "B"};
65 for (const std::string& input : invalid_inputs) {
66 auto decode_result = fml::Base32Decode(input);
67 if (decode_result.first) {
68 std::cout << "Base32Decode should return false on " << input << std::endl;
69 }
70 ASSERT_FALSE(decode_result.first);
71 }
72}
73
74TEST(Base32Test, CanDecodeSkSLKeys) {
75 std::vector<std::string> inputs = {
76 "CAZAAAACAAAAADQAAAABKAAAAAJQAAIA7777777777776EYAAEAP777777777777AAAAAABA"
77 "ABTAAAAAAAAAAAAAAABAAAAAGQAGGAA",
78 "CAZAAAICAAAAAAAAAAADOAAAAAJQAAIA777777Y4AAKAAEYAAEAP777777777777EAAGMAAA"
79 "AAAAAAAAAAACQACNAAAAAAAAAAAAAAACAAAAAPAAMMAA",
80 "CAZACAACAAAABAYACAAAAAAAAAJQAAIADQABIAH777777777777RQAAOAAAAAAAAAAAAAABE"
81 "AANQAAAAAAAAAAAAAAYAAJYAAAAAAAANAAAQAAAAAAAEAAAHAAAAAAAAAAAAAAANAAAQAAAA"
82 "AAAFIADKAAAAAAAAAAAAAAACAAAAAZAAMMAA"};
83 for (const std::string& input : inputs) {
84 auto decode_result = fml::Base32Decode(input);
85 if (!decode_result.first) {
86 std::cout << "Base32Decode should return true on " << input << std::endl;
87 }
88 ASSERT_TRUE(decode_result.first);
89 auto encode_result = fml::Base32Encode(decode_result.second);
90 ASSERT_TRUE(encode_result.first);
91 ASSERT_EQ(encode_result.second, input);
92 }
93}
TEST(Base32Test, CanEncode)
GAsyncResult * result
std::pair< bool, std::string > Base32Decode(const std::string &input)
Definition: base32.cc:55
std::pair< bool, std::string > Base32Encode(std::string_view input)
Definition: base32.cc:15