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