1 /*
2  * Copyright (c) 2023 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 "tone_player_impl.h"
18 
19 using namespace testing::ext;
20 namespace OHOS {
21 namespace AudioStandard {
22 constexpr uint32_t SLEEP_TIME = 30000;
23 static size_t g_reqBufLen = 0;
24 class AudioToneplayerUnitTest : public testing::Test {
25 public:
26     static void SetUpTestCase(void);
27     static void TearDownTestCase(void);
28     void SetUp();
29     void TearDown();
30 };
31 
SetUpTestCase(void)32 void AudioToneplayerUnitTest::SetUpTestCase(void)
33 {
34     // input testsuit setup step,setup invoked before all testcases
35 }
36 
TearDownTestCase(void)37 void AudioToneplayerUnitTest::TearDownTestCase(void)
38 {
39     // input testsuit teardown step,teardown invoked after all testcases
40 }
41 
SetUp(void)42 void AudioToneplayerUnitTest::SetUp(void)
43 {
44     // input testcase setup step,setup invoked before each testcases
45 }
46 
TearDown(void)47 void AudioToneplayerUnitTest::TearDown(void)
48 {
49     // input testcase teardown step,teardown invoked after each testcases
50 }
51 
52 class AudioRendererCallbackTest : public AudioRendererCallback {
53 public:
OnInterrupt(const InterruptEvent & interruptEvent)54     void OnInterrupt(const InterruptEvent &interruptEvent) override {}
OnStateChange(const RendererState state,const StateChangeCmdType cmdType)55     void OnStateChange(const RendererState state, const StateChangeCmdType cmdType) override {}
56 };
57 
58 class AudioToneplayerCallbackTest : public AudioRendererCallback {
59 public:
60     void OnWriteData(size_t length);
61 };
62 
OnWriteData(size_t length)63 void AudioToneplayerCallbackTest::OnWriteData(size_t length)
64 {
65     g_reqBufLen = length;
66 }
67 
68 /**
69  * @tc.name  : Test Create API
70  * @tc.type  : FUNC
71  * @tc.number: Create_001
72  * @tc.desc  : Test Create interface.
73  */
74 HWTEST(AudioToneplayerUnitTest, Create_001, TestSize.Level1)
75 {
76     std::shared_ptr<TonePlayer> toneplayer = nullptr;
77     AudioRendererInfo rendererInfo = {};
78     rendererInfo.contentType = ContentType::CONTENT_TYPE_MUSIC;
79     rendererInfo.streamUsage = StreamUsage::STREAM_USAGE_MEDIA;
80     rendererInfo.rendererFlags = 0;
81     toneplayer = TonePlayer::Create(rendererInfo);
82     ASSERT_NE(nullptr, toneplayer);
83 
84     rendererInfo.streamUsage = StreamUsage::STREAM_USAGE_DTMF;
85     toneplayer = TonePlayer::Create(rendererInfo);
86     ASSERT_NE(nullptr, toneplayer);
87 
88     toneplayer->Release();
89 }
90 
91 /**
92  * @tc.name  : Test toneplayer loading API
93  * @tc.type  : FUNC
94  * @tc.number: Toneplayer_001
95  * @tc.desc  : Test create->LoadTone->StartTone->StopTone->Release interface.
96  */
97 HWTEST(AudioToneplayerUnitTest, Toneplayer_001, TestSize.Level1)
98 {
99     AudioRendererInfo rendererInfo = {};
100     rendererInfo.contentType = ContentType::CONTENT_TYPE_MUSIC;
101     rendererInfo.streamUsage = StreamUsage::STREAM_USAGE_MEDIA;
102     rendererInfo.rendererFlags = 0;
103     std::shared_ptr<TonePlayer> toneplayer = TonePlayer::Create(rendererInfo);
104     ASSERT_NE(nullptr, toneplayer);
105 
106     bool ret = toneplayer->LoadTone(TONE_TYPE_DIAL_1);
107     EXPECT_EQ(true, ret);
108 
109     bool startRet = toneplayer->StartTone();
110     EXPECT_EQ(true, startRet);
111 
112     usleep(SLEEP_TIME); // 30ms sleep time
113     bool stopRet = toneplayer->StopTone();
114     EXPECT_EQ(true, stopRet);
115 
116     bool releaseRet = toneplayer->Release();
117     EXPECT_EQ(true, releaseRet);
118 }
119 
120 /**
121  * @tc.name  : Test toneplayer loading API
122  * @tc.type  : FUNC
123  * @tc.number: Toneplayer_002
124  * @tc.desc  : Test create->StartTone->StopTone->Release interface.
125  */
126 HWTEST(AudioToneplayerUnitTest, Toneplayer_002, TestSize.Level1)
127 {
128     AudioRendererInfo rendererInfo = {};
129     rendererInfo.contentType = ContentType::CONTENT_TYPE_MUSIC;
130     rendererInfo.streamUsage = StreamUsage::STREAM_USAGE_DTMF;
131     rendererInfo.rendererFlags = 0;
132     std::shared_ptr<TonePlayer> toneplayer = TonePlayer::Create(rendererInfo);
133     ASSERT_NE(nullptr, toneplayer);
134 
135     bool ret = toneplayer->LoadTone(TONE_TYPE_DIAL_2);
136     EXPECT_EQ(true, ret);
137 
138     usleep(SLEEP_TIME); // 30ms sleep time
139     bool stopRet = toneplayer->StopTone();
140     EXPECT_EQ(false, stopRet);
141 
142     bool releaseRet = toneplayer->Release();
143     EXPECT_EQ(true, releaseRet);
144 }
145 
146 /**
147  * @tc.name  : Test toneplayer loading API
148  * @tc.type  : FUNC
149  * @tc.number: Toneplayer_003
150  * @tc.desc  : Test create->StartTone->Release interface.
151  */
152 HWTEST(AudioToneplayerUnitTest, Toneplayer_003, TestSize.Level1)
153 {
154     AudioRendererInfo rendererInfo = {};
155     rendererInfo.contentType = ContentType::CONTENT_TYPE_MUSIC;
156     rendererInfo.streamUsage = StreamUsage::STREAM_USAGE_MEDIA;
157     rendererInfo.rendererFlags = 0;
158     std::shared_ptr<TonePlayer> toneplayer = TonePlayer::Create(rendererInfo);
159     ASSERT_NE(nullptr, toneplayer);
160 
161     bool startRet = toneplayer->StartTone();
162     EXPECT_EQ(false, startRet);
163 
164     bool releaseRet = toneplayer->Release();
165     EXPECT_EQ(true, releaseRet);
166 }
167 
168 /**
169  * @tc.name  : Test toneplayer loading API
170  * @tc.type  : FUNC
171  * @tc.number: Toneplayer_004
172  * @tc.desc  : Test create->LoadTone->StartTone->Release interface.
173  */
174 HWTEST(AudioToneplayerUnitTest, Toneplayer_004, TestSize.Level1)
175 {
176     AudioRendererInfo rendererInfo = {};
177     rendererInfo.contentType = ContentType::CONTENT_TYPE_MUSIC;
178     rendererInfo.streamUsage = StreamUsage::STREAM_USAGE_DTMF;
179     rendererInfo.rendererFlags = 0;
180     std::shared_ptr<TonePlayer> toneplayer = TonePlayer::Create(rendererInfo);
181     ASSERT_NE(nullptr, toneplayer);
182 
183     bool ret = toneplayer->LoadTone(TONE_TYPE_DIAL_6);
184     EXPECT_EQ(true, ret);
185 
186     bool startRet = toneplayer->StartTone();
187     EXPECT_EQ(true, startRet);
188 
189     usleep(SLEEP_TIME); // 30ms sleep time
190 
191     bool releaseRet = toneplayer->Release();
192     EXPECT_EQ(true, releaseRet);
193 }
194 } // namespace AudioStandard
195 } // namespace OHOS