1 /*
2  * Copyright 2019 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include <gtest/gtest.h>
18 #include <unordered_map>
19 
20 #include "utils.h"
21 
22 namespace {
23 
24 using ::android::bluetooth::audio::utils::ParseAudioParams;
25 
26 class UtilsTest : public testing::Test {
27  protected:
SetUp()28   void SetUp() override {}
TearDown()29   void TearDown() override { map_.clear(); }
30 
31   std::unordered_map<std::string, std::string> map_;
32 };
33 
TEST_F(UtilsTest,HashMapEmptyParams)34 TEST_F(UtilsTest, HashMapEmptyParams) {
35   std::string params = "";
36   map_ = ParseAudioParams(params);
37   // map = {}
38   EXPECT_TRUE(map_.empty());
39 }
40 
TEST_F(UtilsTest,HashMapDelimitOnly)41 TEST_F(UtilsTest, HashMapDelimitOnly) {
42   std::string params = ";";
43   map_ = ParseAudioParams(params);
44   // map = {}
45   EXPECT_TRUE(map_.empty());
46 }
47 
TEST_F(UtilsTest,HashMapNotKeyValuePair)48 TEST_F(UtilsTest, HashMapNotKeyValuePair) {
49   std::string params = "key0";
50   map_ = ParseAudioParams(params);
51   // map = {[key0]=""}
52   EXPECT_EQ(map_.size(), 1);
53   EXPECT_NE(map_.find("key0"), map_.end());
54   EXPECT_EQ(map_["key0"].length(), 0);
55 }
56 
TEST_F(UtilsTest,HashMapEmptyValue)57 TEST_F(UtilsTest, HashMapEmptyValue) {
58   std::string params = "key0=";
59   map_ = ParseAudioParams(params);
60   // map = {[key0]=""}
61   EXPECT_EQ(map_.size(), 1);
62   EXPECT_NE(map_.find("key0"), map_.end());
63   EXPECT_EQ(map_["key0"].length(), 0);
64 }
65 
TEST_F(UtilsTest,HashMapEmptyValueWithDelimit)66 TEST_F(UtilsTest, HashMapEmptyValueWithDelimit) {
67   std::string params = "key0=;";
68   map_ = ParseAudioParams(params);
69   // map = {[key0]=""}
70   EXPECT_EQ(map_.size(), 1);
71   EXPECT_NE(map_.find("key0"), map_.end());
72   EXPECT_EQ(map_["key0"].length(), 0);
73 }
74 
TEST_F(UtilsTest,HashMapOneKeyValuePair)75 TEST_F(UtilsTest, HashMapOneKeyValuePair) {
76   std::string params = "key0=value0";
77   map_ = ParseAudioParams(params);
78   // map = {[key0]="value0"}
79   EXPECT_EQ(map_.size(), 1);
80   EXPECT_EQ(map_["key0"], "value0");
81 }
82 
TEST_F(UtilsTest,HashMapOneKeyValuePairWithDelimit)83 TEST_F(UtilsTest, HashMapOneKeyValuePairWithDelimit) {
84   std::string params = "key0=value0;";
85   map_ = ParseAudioParams(params);
86   // map = {[key0]="value0"}
87   EXPECT_EQ(map_.size(), 1);
88   EXPECT_EQ(map_["key0"], "value0");
89 }
90 
TEST_F(UtilsTest,HashMapTwoKeyValuePairs)91 TEST_F(UtilsTest, HashMapTwoKeyValuePairs) {
92   std::string params = "key0=value0;key1=value1";
93   map_ = ParseAudioParams(params);
94   // map = {[key0]="value0", [key1]="value1"}
95   EXPECT_EQ(map_.size(), 2);
96   EXPECT_EQ(map_["key0"], "value0");
97   EXPECT_EQ(map_["key1"], "value1");
98 }
99 
TEST_F(UtilsTest,HashMapEmptyKey)100 TEST_F(UtilsTest, HashMapEmptyKey) {
101   std::string params = "=value";
102   map_ = ParseAudioParams(params);
103   // map = {}
104   EXPECT_TRUE(map_.empty());
105 }
106 
TEST_F(UtilsTest,HashMapEmptyKeyWithDelimit)107 TEST_F(UtilsTest, HashMapEmptyKeyWithDelimit) {
108   std::string params = "=value;";
109   map_ = ParseAudioParams(params);
110   // map = {}
111   EXPECT_TRUE(map_.empty());
112 }
113 
TEST_F(UtilsTest,HashMapEquivalentOnly)114 TEST_F(UtilsTest, HashMapEquivalentOnly) {
115   std::string params = "=";
116   map_ = ParseAudioParams(params);
117   // map = {}
118   EXPECT_TRUE(map_.empty());
119 }
120 
TEST_F(UtilsTest,HashMapNoKeyValuePair)121 TEST_F(UtilsTest, HashMapNoKeyValuePair) {
122   std::string params = "=;";
123   map_ = ParseAudioParams(params);
124   // map = {}
125   EXPECT_TRUE(map_.empty());
126 }
127 
TEST_F(UtilsTest,HashMapTwoPairsWithFirstKeyEmpty)128 TEST_F(UtilsTest, HashMapTwoPairsWithFirstKeyEmpty) {
129   std::string params = "=value0;key1=value1";
130   map_ = ParseAudioParams(params);
131   // map = {[key1]="value1"}
132   EXPECT_EQ(map_.size(), 1);
133   EXPECT_EQ(map_["key1"], "value1");
134 }
135 
136 }  // namespace
137