1 /*
2 * Copyright (c) 2021-2021 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 #ifdef OHOS_LITE
17 #include <memory>
18 #include "plugin/common/any.h"
19
20 #include <gtest/gtest.h>
21 #include <mockcpp/mockcpp.hpp>
22
23 #include <test_helper.h>
24 #include "pipeline/filters/codec/audio_decoder/audio_decoder_filter.h"
25 #include "pipeline/filters/sink/audio_sink/audio_sink_filter.h"
26 #include "scene/player/lite/hiplayer_impl.h"
27
28 using namespace testing::ext;
29 using namespace OHOS::Media::Pipeline;
30
31 namespace OHOS::Media::Test {
32 class UtTestHiPlayer : public ::testing::Test {
33 public:
34 MockObject<MediaSourceFilter> audioSource {};
35 MockObject<DemuxerFilter> demuxer {};
36 MockObject<AudioDecoderFilter> audioDecoder {};
37 MockObject<AudioSinkFilter> audioSink {};
38
39 std::shared_ptr<HiPlayerImpl> player = HiPlayerImpl::CreateHiPlayerImpl();
40 static OHOS::Media::Source source;
41 PInPort emptyInPort = EmptyInPort::GetInstance();
42 POutPort emptyOutPort = EmptyOutPort::GetInstance();
43
44 virtual void SetUp() override
45 {
46 MOCK_METHOD(audioSource, Init).defaults();
47 MOCK_METHOD(demuxer, Init).defaults();
48 MOCK_METHOD(audioDecoder, Init).defaults();
49 MOCK_METHOD(audioSink, Init).defaults();
50
51 MOCK_METHOD(audioSource, Prepare).defaults().will(returnValue(ErrorCode::SUCCESS));
52 MOCK_METHOD(demuxer, Prepare).defaults().will(returnValue(ErrorCode::SUCCESS));
53 MOCK_METHOD(audioDecoder, Prepare).defaults().will(returnValue(ErrorCode::SUCCESS));
54 MOCK_METHOD(audioSink, Prepare).defaults().will(returnValue(ErrorCode::SUCCESS));
55
56 MOCK_METHOD(audioSource, Start).defaults().will(returnValue(ErrorCode::SUCCESS));
57 MOCK_METHOD(demuxer, Start).defaults().will(returnValue(ErrorCode::SUCCESS));
58 MOCK_METHOD(audioDecoder, Start).defaults().will(returnValue(ErrorCode::SUCCESS));
59 MOCK_METHOD(audioSink, Start).defaults().will(returnValue(ErrorCode::SUCCESS));
60
61 MOCK_METHOD(audioSource, Stop).defaults().will(returnValue(ErrorCode::SUCCESS));
62 MOCK_METHOD(demuxer, Stop).defaults().will(returnValue(ErrorCode::SUCCESS));
63 MOCK_METHOD(audioDecoder, Stop).defaults().will(returnValue(ErrorCode::SUCCESS));
64 MOCK_METHOD(audioSink, Stop).defaults().will(returnValue(ErrorCode::SUCCESS));
65
66 MOCK_METHOD(audioSource, GetInPort).defaults().will(returnValue(emptyInPort));
67 MOCK_METHOD(demuxer, GetInPort).defaults().will(returnValue(emptyInPort));
68 MOCK_METHOD(audioDecoder, GetInPort).defaults().will(returnValue(emptyInPort));
69 MOCK_METHOD(audioSink, GetInPort).defaults().will(returnValue(emptyInPort));
70
71 MOCK_METHOD(audioSource, GetOutPort).defaults().will(returnValue(emptyOutPort));
72 MOCK_METHOD(demuxer, GetOutPort).defaults().will(returnValue(emptyOutPort));
73 MOCK_METHOD(audioDecoder, GetOutPort).defaults().will(returnValue(emptyOutPort));
74 MOCK_METHOD(audioSink, GetOutPort).defaults().will(returnValue(emptyOutPort));
75
76 player->audioSource_.reset<MediaSourceFilter>(audioSource);
77 player->demuxer_.reset<DemuxerFilter>(demuxer);
78 player->audioDecoder_.reset<AudioDecoderFilter>(audioDecoder);
79 player->audioSink_.reset<AudioSinkFilter>(audioSink);
80
81 MOCK_METHOD(audioSource, SetSource).defaults().will(returnValue(ErrorCode::SUCCESS));
82 MOCK_METHOD(audioSource, SetBufferSize).defaults().will(returnValue(ErrorCode::SUCCESS));
83
84 player->Init();
85 }
86 virtual void TearDown() override
87 {
88 audioSource.verify();
89 demuxer.verify();
90 audioDecoder.verify();
91 audioSink.verify();
92
93 audioSource.reset();
94 demuxer.reset();
95 audioDecoder.reset();
96 audioSink.reset();
97 }
98 };
99
100 OHOS::Media::Source UtTestHiPlayer::source("./test.mp3");
101
HWTEST_F(UtTestHiPlayer, Can_SetSource, TestSize.Level1)102 HWTEST_F(UtTestHiPlayer, Can_SetSource, TestSize.Level1)
103 {
104 // 因为player内部根据source参数创建shared_ptr,最终调用 audioSource.SetSource. 这里没法检查该指针参数了。
105 MOCK_METHOD(audioSource, SetSource)
106 .expects(once())
107 .with(mockcpp::any())
108 .will(returnValue(ErrorCode::SUCCESS));
109 ASSERT_EQ(static_cast<int>(ErrorCode::SUCCESS), player->SetSource(source));
110 player->fsm_.DoTask();
111 ASSERT_EQ("PreparingState", player->fsm_.curState_->GetName());
112 }
113
HWTEST_F(UtTestHiPlayer, Can_SetBufferSize, TestSize.Level1)114 HWTEST_F(UtTestHiPlayer, Can_SetBufferSize, TestSize.Level1)
115 {
116 size_t size = 100;
117 MOCK_METHOD(audioSource, SetBufferSize)
118 .expects(once())
119 .with(eq(size))
120 .will(returnValue(ErrorCode::SUCCESS));
121 ASSERT_EQ(ErrorCode::SUCCESS, player->SetBufferSize(size));
122 }
123 }
124 #endif
125