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 SetUp()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 } TearDown()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 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 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