1 /*
2 * Copyright (C) 2024 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 "ringtone_metadata_extractor_test.h"
17
18 #include <string>
19
20 #include "ability_context_impl.h"
21 #include "ringtone_data_manager.h"
22 #include "ringtone_errno.h"
23 #define private public
24 #include "ringtone_metadata_extractor.h"
25 #undef private
26 #include "ringtone_scanner_db.h"
27 #include "ringtone_unittest_utils.h"
28
29 using namespace std;
30 using namespace OHOS;
31 using namespace testing::ext;
32
33 namespace OHOS {
34 namespace Media {
SetUpTestCase()35 void RingtoneMetadataExtractorTest::SetUpTestCase()
36 {
37 auto stageContext = std::make_shared<AbilityRuntime::ContextImpl>();
38 auto abilityContextImpl = std::make_shared<OHOS::AbilityRuntime::AbilityContextImpl>();
39 abilityContextImpl->SetStageContext(stageContext);
40 auto ret = RingtoneDataManager::GetInstance()->Init(abilityContextImpl);
41 EXPECT_EQ(ret, E_OK);
42 }
43
TearDownTestCase()44 void RingtoneMetadataExtractorTest::TearDownTestCase()
45 {
46 auto dataManager = RingtoneDataManager::GetInstance();
47 EXPECT_NE(dataManager, nullptr);
48 dataManager->ClearRingtoneDataMgr();
49 }
50
51 // SetUp:Execute before each test case
SetUp()52 void RingtoneMetadataExtractorTest::SetUp() {}
53
TearDown(void)54 void RingtoneMetadataExtractorTest::TearDown(void) {}
55
56 HWTEST_F(RingtoneMetadataExtractorTest, metadataExtractor_Extract_test_001, TestSize.Level0)
57 {
58 unique_ptr<RingtoneMetadata> data = make_unique<RingtoneMetadata>();
59 unique_ptr<RingtoneScannerDb> ringtoneScannerDb;
60 ringtoneScannerDb->GetFileBasicInfo(STORAGE_FILES_DIR, data);
61 data->SetMediaType(static_cast<RingtoneMediaType>(RINGTONE_MEDIA_TYPE_AUDIO));
62 int32_t ret = RingtoneMetadataExtractor::Extract(data);
63 EXPECT_EQ(ret, E_AVMETADATA);
64 }
65
66 HWTEST_F(RingtoneMetadataExtractorTest, metadataExtractor_Extract_test_002, TestSize.Level0)
67 {
68 unique_ptr<RingtoneMetadata> data = make_unique<RingtoneMetadata>();
69 unique_ptr<RingtoneScannerDb> ringtoneScannerDb;
70 ringtoneScannerDb->GetFileBasicInfo(STORAGE_FILES_DIR, data);
71 data->SetMediaType(static_cast<RingtoneMediaType>(RINGTONE_MEDIA_TYPE_INVALID));
72 int32_t ret = RingtoneMetadataExtractor::Extract(data);
73 EXPECT_EQ(ret, E_AVMETADATA);
74 }
75
76 HWTEST_F(RingtoneMetadataExtractorTest, metadataExtractor_FillExtractedMetadata_test_001, TestSize.Level0)
77 {
78 unique_ptr<RingtoneMetadata> data = make_unique<RingtoneMetadata>();
79 unique_ptr<RingtoneScannerDb> ringtoneScannerDb;
80 const int modifiedTime = 11;
81 ringtoneScannerDb->GetFileBasicInfo(STORAGE_FILES_DIR, data);
82 data->SetMediaType(static_cast<RingtoneMediaType>(RINGTONE_MEDIA_TYPE_AUDIO));
83 data->SetData(STORAGE_FILES_DIR);
84 data->SetDateModified(static_cast<int64_t>(modifiedTime));
85 unordered_map<int32_t, std::string> resultMap;
86 resultMap = { { Media::AV_KEY_DURATION, "" }, { Media::AV_KEY_DATE_TIME_FORMAT, "" },
87 { Media::AV_KEY_MIME_TYPE, "" }, { Media::AV_KEY_TITLE, "" } };
88 RingtoneMetadataExtractor::FillExtractedMetadata(resultMap, data);
89 EXPECT_EQ(data->GetTitle(), "");
90 }
91
92 HWTEST_F(RingtoneMetadataExtractorTest, metadataExtractor_FillExtractedMetadata_test_002, TestSize.Level0)
93 {
94 unique_ptr<RingtoneMetadata> data = make_unique<RingtoneMetadata>();
95 unique_ptr<RingtoneScannerDb> ringtoneScannerDb;
96 const int modifiedTime = 13;
97 ringtoneScannerDb->GetFileBasicInfo(STORAGE_FILES_DIR, data);
98 data->SetMediaType(static_cast<RingtoneMediaType>(RINGTONE_MEDIA_TYPE_AUDIO));
99 data->SetData(STORAGE_FILES_DIR);
100 data->SetDateModified(static_cast<int64_t>(modifiedTime));
101 unordered_map<int32_t, std::string> resultMap;
102 resultMap = { { Media::AV_KEY_DURATION, "a" }, { Media::AV_KEY_DATE_TIME_FORMAT, "a" },
103 { Media::AV_KEY_MIME_TYPE, "a" }, { Media::AV_KEY_TITLE, "a" } };
104 RingtoneMetadataExtractor::FillExtractedMetadata(resultMap, data);
105 EXPECT_EQ(data->GetTitle(), "a");
106 const string timeKey = "2021-10-1 15:00:00";
107 resultMap = { { Media::AV_KEY_DURATION, "a" }, { Media::AV_KEY_DATE_TIME_FORMAT, timeKey},
108 { Media::AV_KEY_MIME_TYPE, "a" }, { Media::AV_KEY_TITLE, "a" } };
109 RingtoneMetadataExtractor::FillExtractedMetadata(resultMap, data);
110 EXPECT_EQ(data->GetTitle(), "a");
111 }
112
113 HWTEST_F(RingtoneMetadataExtractorTest, metadataExtractor_ExtractAudioMetadata_test_001, TestSize.Level0)
114 {
115 unique_ptr<RingtoneMetadata> data = make_unique<RingtoneMetadata>();
116 unique_ptr<RingtoneScannerDb> ringtoneScannerDb;
117 ringtoneScannerDb->GetFileBasicInfo(STORAGE_FILES_DIR, data);
118 data->SetMediaType(static_cast<RingtoneMediaType>(RINGTONE_MEDIA_TYPE_AUDIO));
119 int32_t ret = RingtoneMetadataExtractor::ExtractAudioMetadata(data);
120 EXPECT_EQ(ret, E_AVMETADATA);
121 data->SetData(STORAGE_FILES_DIR);
122 ret = RingtoneMetadataExtractor::ExtractAudioMetadata(data);
123 EXPECT_NE(ret, E_OK);
124 data->SetData("ExtractAudioMetadata");
125 ret = RingtoneMetadataExtractor::ExtractAudioMetadata(data);
126 EXPECT_EQ((ret == E_SYSCALL || ret == E_AVMETADATA), true);
127 const string dataStr = "/storage/media/100/local/files/";
128 data->SetData(dataStr);
129 ret = RingtoneMetadataExtractor::ExtractAudioMetadata(data);
130 EXPECT_EQ((ret == E_SYSCALL || ret == E_AVMETADATA), true);
131 }
132 } // namespace Media
133 } // namespace OHOS
134