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