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 <iostream>
17 #include <thread>
18 #include <gtest/gtest.h>
19
20 #include "audio_errors.h"
21 #include "offline_audio_effect_manager.h"
22
23 using namespace testing::ext;
24 using namespace std;
25 namespace OHOS {
26 namespace AudioStandard {
27 namespace {
28 const std::string INVALID_EFFECT_NAME = "0d000721";
29
30 constexpr AudioStreamInfo NORMAL_STREAM_INFO(
31 AudioSamplingRate::SAMPLE_RATE_48000, AudioEncodingType::ENCODING_PCM,
32 AudioSampleFormat::SAMPLE_S16LE, AudioChannel::STEREO, AudioChannelLayout::CH_LAYOUT_STEREO);
33 }
34 class OfflineAudioEffectManagerUnitTest : public testing::Test {
35 public:
36 static void SetUpTestCase(void);
37 static void TearDownTestCase(void);
38 void SetUp();
39 void TearDown();
40 };
41
SetUpTestCase(void)42 void OfflineAudioEffectManagerUnitTest::SetUpTestCase(void) {}
TearDownTestCase(void)43 void OfflineAudioEffectManagerUnitTest::TearDownTestCase(void) {}
SetUp(void)44 void OfflineAudioEffectManagerUnitTest::SetUp(void) {}
TearDown(void)45 void OfflineAudioEffectManagerUnitTest::TearDown(void) {}
46
47 class OfflineAudioEffectChainUnitTest : public testing::Test {
48 public:
49 static void SetUpTestCase(void);
50 static void TearDownTestCase(void);
51 void SetUp();
52 void TearDown();
53 protected:
54 shared_ptr<OfflineAudioEffectChain> chain_ = nullptr;
55 };
56
57 shared_ptr<OfflineAudioEffectManager> g_manager = nullptr;
58 string g_normalName = "";
59
SetUpTestCase(void)60 void OfflineAudioEffectChainUnitTest::SetUpTestCase(void)
61 {
62 g_manager = make_shared<OfflineAudioEffectManager>();
63 vector<string> names;
64 names = g_manager->GetOfflineAudioEffectChains();
65 if (names.size() > 0) {
66 g_normalName = names[names.size() - 1];
67 }
68 }
69
TearDownTestCase(void)70 void OfflineAudioEffectChainUnitTest::TearDownTestCase(void)
71 {
72 g_manager = nullptr;
73 }
74
SetUp(void)75 void OfflineAudioEffectChainUnitTest::SetUp(void)
76 {
77 chain_ = g_manager->CreateOfflineAudioEffectChain(g_normalName);
78 }
79
TearDown(void)80 void OfflineAudioEffectChainUnitTest::TearDown(void)
81 {
82 if (chain_ != nullptr) {
83 chain_->Release();
84 chain_ = nullptr;
85 }
86 }
87
88 /**
89 * @tc.name : Test GetOfflineAudioEffectChains API
90 * @tc.type : FUNC
91 * @tc.number: OfflineAudioEffectManager_001
92 * @tc.desc : Test OfflineAudioEffectManager interface.
93 */
94 HWTEST(OfflineAudioEffectManagerUnitTest, OfflineAudioEffectManager_001, TestSize.Level1)
95 {
96 auto manager = make_shared<OfflineAudioEffectManager>();
97 EXPECT_NE(nullptr, manager);
98 EXPECT_GE(manager->GetOfflineAudioEffectChains().size(), 0);
99 }
100
101 /**
102 * @tc.name : Test CreateOfflineAudioEffectChain API
103 * @tc.type : FUNC
104 * @tc.number: OfflineAudioEffectManager_002
105 * @tc.desc : Test OfflineAudioEffectManager interface.
106 */
107 HWTEST(OfflineAudioEffectManagerUnitTest, OfflineAudioEffectManager_002, TestSize.Level1)
108 {
109 auto manager = make_shared<OfflineAudioEffectManager>();
110 auto chain = manager->CreateOfflineAudioEffectChain(g_normalName);
111 if (g_normalName == "") {
112 EXPECT_EQ(nullptr, chain);
113 } else {
114 EXPECT_NE(nullptr, chain);
115 }
116 }
117
118 /**
119 * @tc.name : Test CreateOfflineAudioEffectChain API
120 * @tc.type : FUNC
121 * @tc.number: OfflineAudioEffectManager_003
122 * @tc.desc : Test OfflineAudioEffectManager interface.
123 */
124 HWTEST(OfflineAudioEffectManagerUnitTest, OfflineAudioEffectManager_003, TestSize.Level1)
125 {
126 auto manager = make_shared<OfflineAudioEffectManager>();
127 auto chain = manager->CreateOfflineAudioEffectChain(INVALID_EFFECT_NAME);
128 EXPECT_EQ(nullptr, chain);
129 }
130
131 /**
132 * @tc.name : Test OfflineAudioEffectChain API
133 * @tc.type : FUNC
134 * @tc.number: OfflineAudioEffectChain_001
135 * @tc.desc : Test OfflineAudioEffectChain interface.
136 */
137 HWTEST_F(OfflineAudioEffectChainUnitTest, OfflineAudioEffectChain_001, TestSize.Level1)
138 {
139 if (chain_) {
140 int32_t ret = chain_->Configure(NORMAL_STREAM_INFO, NORMAL_STREAM_INFO);
141 EXPECT_EQ(SUCCESS, ret);
142 }
143 }
144
145 /**
146 * @tc.name : Test OfflineAudioEffectChain API
147 * @tc.type : FUNC
148 * @tc.number: OfflineAudioEffectChain_002
149 * @tc.desc : Test OfflineAudioEffectChain interface.
150 */
151 HWTEST_F(OfflineAudioEffectChainUnitTest, OfflineAudioEffectChain_002, TestSize.Level1)
152 {
153 if (chain_) {
154 EXPECT_EQ(SUCCESS, chain_->Configure(NORMAL_STREAM_INFO, NORMAL_STREAM_INFO));
155 EXPECT_EQ(SUCCESS, chain_->Prepare());
156 }
157 }
158 } // namespace AudioStandard
159 } // namespace OHOS
160