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