• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 <message_option.h>
18 #include <message_parcel.h>
19 
20 #include "iremote_object_mocker.h"
21 #include "screen_session_manager_client/include/screen_session_manager_client.h"
22 #include "session_manager/include/scene_session_manager.h"
23 #include "session_manager/include/zidl/scene_session_manager_interface.h"
24 #include "session/container/include/window_event_channel.h"
25 #include "window_manager_agent.h"
26 #include "zidl/scene_session_manager_stub.h"
27 #include "zidl/window_manager_agent_interface.h"
28 #include "pattern_detach_callback.h"
29 #include "test/mock/mock_session_stage.h"
30 #include "mock/mock_message_parcel.h"
31 #include "test/mock/mock_scene_session_manager_stub.h"
32 #include "ui_effect_controller_client.h"
33 #include "ui_effect_controller.h"
34 
35 using namespace testing;
36 using namespace testing::ext;
37 namespace OHOS {
38 namespace Rosen {
39 class SceneSessionManagerStubTest2 : public testing::Test {
40 public:
41     static void SetUpTestCase();
42     static void TearDownTestCase();
43     void SetUp() override;
44     void TearDown() override;
45     sptr<SceneSessionManagerStub> stub_;
46 private:
47     static constexpr uint32_t WAIT_SYNC_IN_NS = 200000;
48 };
49 
SetUpTestCase()50 void SceneSessionManagerStubTest2::SetUpTestCase()
51 {
52 }
53 
TearDownTestCase()54 void SceneSessionManagerStubTest2::TearDownTestCase()
55 {
56 }
57 
SetUp()58 void SceneSessionManagerStubTest2::SetUp()
59 {
60     stub_ = sptr<SceneSessionManager>::MakeSptr();
61 }
62 
TearDown()63 void SceneSessionManagerStubTest2::TearDown()
64 {
65     usleep(WAIT_SYNC_IN_NS);
66 }
67 
68 namespace {
69 
70 /**
71  * @tc.name: HandleIsFreeMultiWindow
72  * @tc.desc: test HandleIsFreeMultiWindow
73  * @tc.type: FUNC
74  */
75 HWTEST_F(SceneSessionManagerStubTest2, HandleIsFreeMultiWindow, TestSize.Level1)
76 {
77     MessageParcel data;
78     MessageParcel reply;
79 
80     // writeInt32 failed
81     MockMessageParcel::ClearAllErrorFlag();
82     MockMessageParcel::SetWriteInt32ErrorFlag(true);
83     int res = stub_->HandleIsFreeMultiWindow(data, reply);
84     EXPECT_EQ(res, ERR_INVALID_DATA);
85     MockMessageParcel::ClearAllErrorFlag();
86 
87     // writeBool failed
88     MockMessageParcel::SetWriteBoolErrorFlag(true);
89     res = stub_->HandleIsFreeMultiWindow(data, reply);
90     EXPECT_EQ(res, ERR_INVALID_DATA);
91 
92     // interface success
93     MockMessageParcel::ClearAllErrorFlag();
94     res = stub_->HandleIsFreeMultiWindow(data, reply);
95     EXPECT_EQ(res, ERR_NONE);
96 }
97 
98 /**
99  * @tc.name: HandleRecoverWindowPropertyChangeFlag01
100  * @tc.desc: test HandleRecoverWindowPropertyChangeFlag
101  * @tc.type: FUNC
102  */
103 HWTEST_F(SceneSessionManagerStubTest2, HandleRecoverWindowPropertyChangeFlag01, TestSize.Level1)
104 {
105     MessageParcel data;
106     MessageParcel reply;
107 
108     auto res = stub_->HandleRecoverWindowPropertyChangeFlag(data, reply);
109     EXPECT_EQ(res, ERR_TRANSACTION_FAILED);
110 
111     data.WriteUint32(0);
112     res = stub_->HandleRecoverWindowPropertyChangeFlag(data, reply);
113     EXPECT_EQ(res, ERR_TRANSACTION_FAILED);
114 
115     MockMessageParcel::ClearAllErrorFlag();
116     MockMessageParcel::SetWriteInt32ErrorFlag(true);
117     res = stub_->HandleRecoverWindowPropertyChangeFlag(data, reply);
118     EXPECT_EQ(res, ERR_TRANSACTION_FAILED);
119     MockMessageParcel::ClearAllErrorFlag();
120 }
121 
122 /**
123  * @tc.name: HandleCreateUIEffectController
124  * @tc.desc: test HandleCreateUIEffectController
125  * @tc.type: FUNC
126  */
127 HWTEST_F(SceneSessionManagerStubTest2, HandleCreateUIEffectController, Function | SmallTest | Level2)
128 {
129     MockMessageParcel::ClearAllErrorFlag();
130     MessageParcel data;
131     MessageParcel reply;
132     MessageOption option;
133     uint32_t code = static_cast<uint32_t>(
134         ISceneSessionManager::SceneSessionManagerMessage::TRANS_ID_CREATE_UI_EFFECT_CONTROLLER);
135     sptr<IUIEffectControllerClient> client = sptr<UIEffectControllerClient>::MakeSptr();
136     stub_->OnRemoteRequest(code, data, reply, option);
137     EXPECT_EQ(stub_->HandleCreateUIEffectController(data, reply), ERR_INVALID_DATA);
138     data.WriteRemoteObject(client->AsObject());
139     stub_->HandleCreateUIEffectController(data, reply);
140     sptr<MockSceneSessionManagerStub> stubMock = sptr<MockSceneSessionManagerStub>::MakeSptr();
141     EXPECT_CALL(*stubMock, CreateUIEffectController(_, _, _)).WillOnce(Return(static_cast<WMError>(-1)));
142     data.RewindRead(0);
143     EXPECT_EQ(stubMock->HandleCreateUIEffectController(data, reply), ERR_INVALID_DATA);
144     EXPECT_CALL(*stubMock, CreateUIEffectController(_, _, _)).WillOnce(DoAll(Return(WMError::WM_ERROR_NOT_SYSTEM_APP)));
145     data.RewindRead(0);
146     EXPECT_EQ(stubMock->HandleCreateUIEffectController(data, reply), ERR_NONE);
147     EXPECT_CALL(*stubMock, CreateUIEffectController(_, _, _)).WillOnce(DoAll(SetArgReferee<2>(-1),
148         Return(WMError::WM_OK)));
149     data.RewindRead(0);
150     EXPECT_EQ(stubMock->HandleCreateUIEffectController(data, reply), ERR_INVALID_DATA);
151     EXPECT_CALL(*stubMock, CreateUIEffectController(_, _, _)).WillOnce(DoAll(SetArgReferee<1>(nullptr),
152         SetArgReferee<2>(0), Return(WMError::WM_OK)));
153     data.RewindRead(0);
154     EXPECT_EQ(stubMock->HandleCreateUIEffectController(data, reply), ERR_INVALID_DATA);
155     sptr<UIEffectController> server = sptr<UIEffectController>::MakeSptr(0, nullptr, nullptr);
156     EXPECT_CALL(*stubMock, CreateUIEffectController(_, _, _)).WillOnce(DoAll(SetArgReferee<1>(server),
157         SetArgReferee<2>(0), Return(WMError::WM_OK)));
158     data.RewindRead(0);
159     EXPECT_EQ(stubMock->HandleCreateUIEffectController(data, reply), ERR_NONE);
160 }
161 } // namespace
162 } // namespace Rosen
163 } // namespace OHOS
164 
165