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 "utils.h"
18 
19 #include <gtest/gtest.h>
20 
21 #include <unordered_map>
22 
23 namespace {
24 
25 using ::android::bluetooth::audio::utils::FrameCount;
26 using ::android::bluetooth::audio::utils::ParseAudioParams;
27 
28 class UtilsTest : public testing::Test {
29 protected:
SetUp()30   void SetUp() override {}
TearDown()31   void TearDown() override { map_.clear(); }
32 
33   std::unordered_map<std::string, std::string> map_;
34 };
35 
TEST_F(UtilsTest,HashMapEmptyParams)36 TEST_F(UtilsTest, HashMapEmptyParams) {
37   std::string params = "";
38   map_ = ParseAudioParams(params);
39   // map = {}
40   EXPECT_TRUE(map_.empty());
41 }
42 
TEST_F(UtilsTest,HashMapDelimitOnly)43 TEST_F(UtilsTest, HashMapDelimitOnly) {
44   std::string params = ";";
45   map_ = ParseAudioParams(params);
46   // map = {}
47   EXPECT_TRUE(map_.empty());
48 }
49 
TEST_F(UtilsTest,HashMapNotKeyValuePair)50 TEST_F(UtilsTest, HashMapNotKeyValuePair) {
51   std::string params = "key0";
52   map_ = ParseAudioParams(params);
53   // map = {[key0]=""}
54   EXPECT_EQ(map_.size(), 1);
55   EXPECT_NE(map_.find("key0"), map_.end());
56   EXPECT_EQ(map_["key0"].length(), 0);
57 }
58 
TEST_F(UtilsTest,HashMapEmptyValue)59 TEST_F(UtilsTest, HashMapEmptyValue) {
60   std::string params = "key0=";
61   map_ = ParseAudioParams(params);
62   // map = {[key0]=""}
63   EXPECT_EQ(map_.size(), 1);
64   EXPECT_NE(map_.find("key0"), map_.end());
65   EXPECT_EQ(map_["key0"].length(), 0);
66 }
67 
TEST_F(UtilsTest,HashMapEmptyValueWithDelimit)68 TEST_F(UtilsTest, HashMapEmptyValueWithDelimit) {
69   std::string params = "key0=;";
70   map_ = ParseAudioParams(params);
71   // map = {[key0]=""}
72   EXPECT_EQ(map_.size(), 1);
73   EXPECT_NE(map_.find("key0"), map_.end());
74   EXPECT_EQ(map_["key0"].length(), 0);
75 }
76 
TEST_F(UtilsTest,HashMapOneKeyValuePair)77 TEST_F(UtilsTest, HashMapOneKeyValuePair) {
78   std::string params = "key0=value0";
79   map_ = ParseAudioParams(params);
80   // map = {[key0]="value0"}
81   EXPECT_EQ(map_.size(), 1);
82   EXPECT_EQ(map_["key0"], "value0");
83 }
84 
TEST_F(UtilsTest,HashMapOneKeyValuePairWithDelimit)85 TEST_F(UtilsTest, HashMapOneKeyValuePairWithDelimit) {
86   std::string params = "key0=value0;";
87   map_ = ParseAudioParams(params);
88   // map = {[key0]="value0"}
89   EXPECT_EQ(map_.size(), 1);
90   EXPECT_EQ(map_["key0"], "value0");
91 }
92 
TEST_F(UtilsTest,HashMapTwoKeyValuePairs)93 TEST_F(UtilsTest, HashMapTwoKeyValuePairs) {
94   std::string params = "key0=value0;key1=value1";
95   map_ = ParseAudioParams(params);
96   // map = {[key0]="value0", [key1]="value1"}
97   EXPECT_EQ(map_.size(), 2);
98   EXPECT_EQ(map_["key0"], "value0");
99   EXPECT_EQ(map_["key1"], "value1");
100 }
101 
TEST_F(UtilsTest,HashMapEmptyKey)102 TEST_F(UtilsTest, HashMapEmptyKey) {
103   std::string params = "=value";
104   map_ = ParseAudioParams(params);
105   // map = {}
106   EXPECT_TRUE(map_.empty());
107 }
108 
TEST_F(UtilsTest,HashMapEmptyKeyWithDelimit)109 TEST_F(UtilsTest, HashMapEmptyKeyWithDelimit) {
110   std::string params = "=value;";
111   map_ = ParseAudioParams(params);
112   // map = {}
113   EXPECT_TRUE(map_.empty());
114 }
115 
TEST_F(UtilsTest,HashMapEquivalentOnly)116 TEST_F(UtilsTest, HashMapEquivalentOnly) {
117   std::string params = "=";
118   map_ = ParseAudioParams(params);
119   // map = {}
120   EXPECT_TRUE(map_.empty());
121 }
122 
TEST_F(UtilsTest,HashMapNoKeyValuePair)123 TEST_F(UtilsTest, HashMapNoKeyValuePair) {
124   std::string params = "=;";
125   map_ = ParseAudioParams(params);
126   // map = {}
127   EXPECT_TRUE(map_.empty());
128 }
129 
TEST_F(UtilsTest,HashMapTwoPairsWithFirstKeyEmpty)130 TEST_F(UtilsTest, HashMapTwoPairsWithFirstKeyEmpty) {
131   std::string params = "=value0;key1=value1";
132   map_ = ParseAudioParams(params);
133   // map = {[key1]="value1"}
134   EXPECT_EQ(map_.size(), 1);
135   EXPECT_EQ(map_["key1"], "value1");
136 }
137 
TEST_F(UtilsTest,FrameCountTest)138 TEST_F(UtilsTest, FrameCountTest) {
139   EXPECT_EQ(FrameCount(120000, 44100), 5292);
140   EXPECT_EQ(FrameCount(7500, 32000), 240);
141 }
142 
143 }  // namespace
144