1 /*
2  * Copyright (c) 2021-2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <gtest/gtest.h>
17 #include "plugin/common/plugin_caps.h"
18 #include "pipeline/core/compatible_check.h"
19 #include "pipeline/core/type_define.h"
20 #include "plugin_utils.h"
21 #include "plugin/common/plugin_meta.h"
22 
23 #define private public
24 #define protected public
25 #define UNIT_TEST 1
26 
27 
28 using namespace testing::ext;
29 
30 namespace OHOS {
31 namespace Media {
32 namespace Test {
33 using namespace OHOS::Media::Plugin;
34 using namespace OHOS::Media::Pipeline;
35 
36 HWTEST(TestMeta, can_get_uint32_after_set, TestSize.Level1)
37 {
38     Meta meta;
39     uint32_t channels = 64;
40     meta.Set<Tag::AUDIO_CHANNELS>(channels);
41     uint32_t outChannels = 0;
42     ASSERT_TRUE(meta.Get<Tag::AUDIO_CHANNELS>(outChannels));
43     ASSERT_EQ(channels, outChannels);
44 }
45 
46 HWTEST(TestMeta, can_not_get_uint32_if_not_set, TestSize.Level1)
47 {
48     Meta meta;
49     uint32_t canNotGet = 0;
50     ASSERT_FALSE(meta.Get<Tag::AUDIO_CHANNELS>(canNotGet));
51 }
52 
53 HWTEST(TestMeta, set_then_get_cstring, TestSize.Level1)
54 {
55     Meta meta;
56     std::string artist("abcd");
57     meta.Set<Tag::MEDIA_TITLE>(artist);
58     std::string outArtist;
59     ASSERT_TRUE(meta.Get<Tag::MEDIA_TITLE>(outArtist));
60     ASSERT_STREQ(artist.c_str(), outArtist.c_str());
61 }
62 
63 HWTEST(TestMeta, set_then_get_float, TestSize.Level1)
64 {
65     Meta meta;
66     std::string in = "9.9999f";
67     meta.Set<Tag::MEDIA_ARTIST>(in); // this is only for test, normally MEDIA_ARTIST should be string
68     std::string out = "";
69     ASSERT_TRUE(meta.Get<Tag::MEDIA_ARTIST>(out));
70     ASSERT_TRUE(in == out);
71 }
72 
73 HWTEST(TestMeta, fail_to_get_unexisted_data, TestSize.Level1)
74 {
75     Meta meta;
76     int32_t channels = 64;
77     meta.Set<Tag::AUDIO_CHANNELS>(channels);
78     int64_t bitRate = 1876411;
79     ASSERT_FALSE(meta.Get<Tag::MEDIA_BITRATE>(bitRate));
80 }
81 
82 HWTEST(TestMeta, remove_data, TestSize.Level1)
83 {
84     Meta meta;
85     uint32_t channels = 64;
86     meta.Set<Tag::AUDIO_CHANNELS>(channels);
87     uint32_t out;
88     ASSERT_TRUE(meta.Get<Tag::AUDIO_CHANNELS>(out));
89     ASSERT_EQ(channels, out);
90     meta.Remove(Tag::AUDIO_CHANNELS);
91     ASSERT_FALSE(meta.Get<Tag::AUDIO_CHANNELS>(out));
92 }
93 
94 HWTEST(TestMeta, clear_data, TestSize.Level1)
95 {
96     Meta meta;
97     std::string title("title");
98     std::string album("album");
99     uint32_t channels = 64;
100     meta.Set<Tag::MEDIA_TITLE>(title);
101     meta.Set<Tag::MEDIA_ALBUM>(album);
102     meta.Set<Tag::AUDIO_CHANNELS>(channels);
103     meta.Clear();
104     std::string out;
105     ASSERT_FALSE(meta.Get<Tag::MEDIA_TITLE>(out));
106     ASSERT_TRUE(out.empty());
107     ASSERT_FALSE(meta.Get<Tag::MEDIA_ALBUM>(out));
108     ASSERT_TRUE(out.empty());
109     uint32_t oChannels = 0;
110     ASSERT_FALSE(meta.Get<Tag::AUDIO_CHANNELS>(oChannels));
111     ASSERT_EQ(0u, oChannels);
112 }
113 
114 HWTEST(TestMeta, update_meta, TestSize.Level1)
115 {
116     Meta meta;
117     std::string title("title");
118     std::string album("album");
119     int32_t channels = 64;
120     meta.Set<Tag::MEDIA_TITLE>(title);
121     meta.Set<Tag::MEDIA_ALBUM>(album);
122     meta.Set<Tag::AUDIO_CHANNELS>(channels);
123 
124     Meta meta2;
125     uint32_t channels2 = 32;
126     meta2.Set<Tag::AUDIO_CHANNELS>(channels2);
127 
128     meta = meta2;
129     std::string out;
130     ASSERT_FALSE(meta.Get<Tag::MEDIA_TITLE>(out));
131     ASSERT_STRNE("title", out.c_str());
132     ASSERT_FALSE(meta.Get<Tag::MEDIA_ALBUM>(out));
133     ASSERT_STRNE("album", out.c_str());
134     uint32_t oChannel = 0;
135     ASSERT_TRUE(meta.Get<Tag::AUDIO_CHANNELS>(oChannel));
136     ASSERT_EQ(channels2, oChannel);
137 }
138 
139 HWTEST(TestMeta, Can_insert_tag_value_int64_to_Meta, TestSize.Level1)
140 {
141     Meta meta;
142     ASSERT_TRUE(meta.Set<Tag::MEDIA_DURATION>(10000));
143     ASSERT_TRUE(meta.Set<Tag::MEDIA_FILE_SIZE>(500));
144     int64_t value;
145     ASSERT_TRUE(meta.Get<Tag::MEDIA_DURATION>(value));
146     ASSERT_EQ(10000, value);
147     uint64_t size;
148     ASSERT_TRUE(meta.Get<Tag::MEDIA_FILE_SIZE>(size));
149     ASSERT_EQ(500, size);
150 }
151 
152 HWTEST(TestMeta, Can_insert_tag_value_uint32_to_Meta, TestSize.Level1)
153 {
154     Meta meta;
155     ASSERT_TRUE(meta.Set<Tag::TRACK_ID>(10000));
156     uint32_t value;
157     ASSERT_TRUE(meta.Get<Tag::TRACK_ID>(value));
158     ASSERT_EQ(10000, value);
159 }
160 
161 HWTEST(TestMeta, return_value_after_meta_to_capability, TestSize.Level1)
162 {
163     Meta meta;
164     meta.Set<Plugin::Tag::AUDIO_MPEG_VERSION>(1);
165     meta.Set<Plugin::Tag::AUDIO_CHANNELS>(2);
166     std::shared_ptr<Capability> cap = MetaToCapability(meta);
167     auto mpegVersion = Plugin::AnyCast<uint32_t>(cap->keys[CapabilityID::AUDIO_MPEG_VERSION]);
168     ASSERT_TRUE(mpegVersion == 1);
169     auto channels = Plugin::AnyCast<uint32_t>(cap->keys[CapabilityID::AUDIO_CHANNELS]);
170     ASSERT_TRUE(channels == 2);
171 }
172 
173 HWTEST(TestMeta, meta_to_string, TestSize.Level1)
174 {
175     Meta meta;
176     meta.Set<Plugin::Tag::AUDIO_MPEG_VERSION>(1);
177     meta.Set<Plugin::Tag::AUDIO_CHANNELS>(2);
178     std::string string = Meta2String(meta);
179     ASSERT_EQ(string, "Meta{channels:(uint32_t)2, ad_mpeg_ver:(uint32_t)1}");
180 }
181 } // namespace Test
182 } // namespace Media
183 } // namespace OHOS
184