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