1 /*
2  * Copyright (c) 2024 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 <thread>
17 #include <chrono>
18 #include "interfaces/inner_api/form_render/include/form_renderer.h"
19 #include "interfaces/inner_api/form_render/include/form_renderer_delegate_impl.h"
20 #include "interfaces/inner_api/form_render/include/form_renderer_delegate_proxy.h"
21 #include "interfaces/inner_api/form_render/include/form_renderer_group.h"
22 #include "test/mock/interfaces/mock_i_remote_object_form.h"
23 
24 using namespace testing;
25 using namespace testing::ext;
26 
27 namespace OHOS::Ace {
28 namespace {
29 constexpr double FORM_WIDTH = 100.0f;
30 constexpr double FORM_HEIGHT = 100.0f;
31 constexpr double FORM_BORDER_WIDTH = 10.0f;
32 } // namespace
33 class FormRenderDelegateProxyTest : public testing::Test {
34 public:
SetUpTestCase()35     static void SetUpTestCase() {};
36 
TearDownTestCase()37     static void TearDownTestCase() {};
38 };
39 
40 /*
41  * @tc.name: FormRenderDelegateProxyTest_001
42  * @tc.desc: Test OnSurfaceCreate() function.
43  * @tc.type: FUNC
44  */
45 HWTEST_F(FormRenderDelegateProxyTest, FormRenderDelegateProxyTest_001, TestSize.Level1)
46 {
47     sptr<AppExecFwk::MockFormIRemoteObject> iremoteObject = new (std::nothrow) AppExecFwk::MockFormIRemoteObject();
48     sptr<FormRendererDelegateProxy> renderDelegate =
49         new FormRendererDelegateProxy(static_cast<FormRendererDelegateProxy>(iremoteObject));
50     ASSERT_NE(renderDelegate, nullptr);
51 
52     OHOS::AAFwk::Want newWant;
53     OHOS::AppExecFwk::FormJsInfo formJsInfo;
54     formJsInfo.bundleName = "bundleName";
55     formJsInfo.moduleName = "moduleName";
56     formJsInfo.formId = 1;
57     EXPECT_EQ(formJsInfo.formId, 1);
58     EXPECT_EQ(renderDelegate->OnSurfaceCreate(nullptr, formJsInfo, newWant), ERR_INVALID_VALUE);
59 
60     std::string surfaceNodeName = "ArkTSCardNode";
61     struct Rosen::RSSurfaceNodeConfig surfaceNodeConfig = { .SurfaceNodeName = surfaceNodeName };
62     std::shared_ptr<Rosen::RSSurfaceNode> rsNode = OHOS::Rosen::RSSurfaceNode::Create(surfaceNodeConfig, true);
63     ASSERT_NE(rsNode, nullptr);
64 
65     EXPECT_CALL(*iremoteObject, SendRequest(_, _, _, _)).Times(1).WillRepeatedly(Return(ERR_OK));
66     EXPECT_EQ(renderDelegate->OnSurfaceCreate(rsNode, formJsInfo, newWant), ERR_OK);
67     EXPECT_CALL(*iremoteObject, SendRequest(_, _, _, _)).Times(1).WillRepeatedly(Return(ERR_INVALID_VALUE));
68     EXPECT_EQ(renderDelegate->OnSurfaceCreate(rsNode, formJsInfo, newWant), ERR_INVALID_VALUE);
69 }
70 
71 /*
72  * @tc.name: FormRenderDelegateProxyTest_002
73  * @tc.desc: Test OnSurfaceReuse() function.
74  * @tc.type: FUNC
75  */
76 HWTEST_F(FormRenderDelegateProxyTest, FormRenderDelegateProxyTest_002, TestSize.Level1)
77 {
78     sptr<AppExecFwk::MockFormIRemoteObject> iremoteObject = new (std::nothrow) AppExecFwk::MockFormIRemoteObject();
79     sptr<FormRendererDelegateProxy> renderDelegate =
80         new FormRendererDelegateProxy(static_cast<FormRendererDelegateProxy>(iremoteObject));
81     ASSERT_NE(renderDelegate, nullptr);
82 
83     OHOS::AAFwk::Want newWant;
84     OHOS::AppExecFwk::FormJsInfo formJsInfo;
85     formJsInfo.bundleName = "bundleName";
86     formJsInfo.moduleName = "moduleName";
87     formJsInfo.formId = 1;
88     EXPECT_EQ(formJsInfo.formId, 1);
89 
90     std::string surfaceNodeName = "ArkTSCardNode";
91     struct Rosen::RSSurfaceNodeConfig surfaceNodeConfig = { .SurfaceNodeName = surfaceNodeName };
92     std::shared_ptr<Rosen::RSSurfaceNode> rsNode = OHOS::Rosen::RSSurfaceNode::Create(surfaceNodeConfig, true);
93     ASSERT_NE(rsNode, nullptr);
94 
95     EXPECT_CALL(*iremoteObject, SendRequest(_, _, _, _)).Times(1).WillRepeatedly(Return(ERR_OK));
96     EXPECT_EQ(renderDelegate->OnSurfaceReuse(rsNode->GetId(), formJsInfo, newWant), ERR_OK);
97     EXPECT_CALL(*iremoteObject, SendRequest(_, _, _, _)).Times(1).WillRepeatedly(Return(ERR_INVALID_VALUE));
98     EXPECT_EQ(renderDelegate->OnSurfaceReuse(rsNode->GetId(), formJsInfo, newWant), ERR_INVALID_VALUE);
99 }
100 
101 /*
102  * @tc.name: FormRenderDelegateProxyTest_003
103  * @tc.desc: Test OnSurfaceDetach() function.
104  * @tc.type: FUNC
105  */
106 HWTEST_F(FormRenderDelegateProxyTest, FormRenderDelegateProxyTest_003, TestSize.Level1)
107 {
108     sptr<AppExecFwk::MockFormIRemoteObject> iremoteObject = new (std::nothrow) AppExecFwk::MockFormIRemoteObject();
109     sptr<FormRendererDelegateProxy> renderDelegate =
110         new FormRendererDelegateProxy(static_cast<FormRendererDelegateProxy>(iremoteObject));
111     ASSERT_NE(renderDelegate, nullptr);
112 
113     std::string surfaceNodeName = "ArkTSCardNode";
114     struct Rosen::RSSurfaceNodeConfig surfaceNodeConfig = { .SurfaceNodeName = surfaceNodeName };
115     std::shared_ptr<Rosen::RSSurfaceNode> rsNode = OHOS::Rosen::RSSurfaceNode::Create(surfaceNodeConfig, true);
116     ASSERT_NE(rsNode, nullptr);
117 
118     EXPECT_CALL(*iremoteObject, SendRequest(_, _, _, _)).Times(1).WillRepeatedly(Return(ERR_OK));
119     EXPECT_EQ(renderDelegate->OnSurfaceDetach(rsNode->GetId()), ERR_OK);
120     EXPECT_CALL(*iremoteObject, SendRequest(_, _, _, _)).Times(1).WillRepeatedly(Return(ERR_INVALID_VALUE));
121     EXPECT_EQ(renderDelegate->OnSurfaceDetach(rsNode->GetId()), ERR_INVALID_VALUE);
122 }
123 
124 /*
125  * @tc.name: FormRenderDelegateProxyTest_004
126  * @tc.desc: Test OnSurfaceRelease() function.
127  * @tc.type: FUNC
128  */
129 HWTEST_F(FormRenderDelegateProxyTest, FormRenderDelegateProxyTest_004, TestSize.Level1)
130 {
131     sptr<AppExecFwk::MockFormIRemoteObject> iremoteObject = new (std::nothrow) AppExecFwk::MockFormIRemoteObject();
132     sptr<FormRendererDelegateProxy> renderDelegate =
133         new FormRendererDelegateProxy(static_cast<FormRendererDelegateProxy>(iremoteObject));
134     ASSERT_NE(renderDelegate, nullptr);
135 
136     std::string surfaceNodeName = "ArkTSCardNode";
137     struct Rosen::RSSurfaceNodeConfig surfaceNodeConfig = { .SurfaceNodeName = surfaceNodeName };
138     std::shared_ptr<Rosen::RSSurfaceNode> rsNode = OHOS::Rosen::RSSurfaceNode::Create(surfaceNodeConfig, true);
139     ASSERT_NE(rsNode, nullptr);
140 
141     EXPECT_CALL(*iremoteObject, SendRequest(_, _, _, _)).Times(1).WillRepeatedly(Return(ERR_OK));
142     EXPECT_EQ(renderDelegate->OnSurfaceRelease(rsNode->GetId()), ERR_OK);
143     EXPECT_CALL(*iremoteObject, SendRequest(_, _, _, _)).Times(1).WillRepeatedly(Return(ERR_INVALID_VALUE));
144     EXPECT_EQ(renderDelegate->OnSurfaceRelease(rsNode->GetId()), ERR_INVALID_VALUE);
145 }
146 
147 /*
148  * @tc.name: FormRenderDelegateProxyTest_005
149  * @tc.desc: Test OnActionEvent() function.
150  * @tc.type: FUNC
151  */
152 HWTEST_F(FormRenderDelegateProxyTest, FormRenderDelegateProxyTest_005, TestSize.Level1)
153 {
154     sptr<AppExecFwk::MockFormIRemoteObject> iremoteObject = new (std::nothrow) AppExecFwk::MockFormIRemoteObject();
155     sptr<FormRendererDelegateProxy> renderDelegate =
156         new FormRendererDelegateProxy(static_cast<FormRendererDelegateProxy>(iremoteObject));
157     ASSERT_NE(renderDelegate, nullptr);
158 
159     EXPECT_CALL(*iremoteObject, SendRequest(_, _, _, _)).Times(1).WillRepeatedly(Return(ERR_OK));
160     EXPECT_EQ(renderDelegate->OnActionEvent(""), ERR_OK);
161     EXPECT_CALL(*iremoteObject, SendRequest(_, _, _, _)).Times(1).WillRepeatedly(Return(ERR_INVALID_VALUE));
162     EXPECT_EQ(renderDelegate->OnActionEvent(""), ERR_INVALID_VALUE);
163 }
164 
165 /*
166  * @tc.name: FormRenderDelegateProxyTest_006
167  * @tc.desc: Test OnError() function.
168  * @tc.type: FUNC
169  */
170 HWTEST_F(FormRenderDelegateProxyTest, FormRenderDelegateProxyTest_006, TestSize.Level1)
171 {
172     sptr<AppExecFwk::MockFormIRemoteObject> iremoteObject = new (std::nothrow) AppExecFwk::MockFormIRemoteObject();
173     sptr<FormRendererDelegateProxy> renderDelegate =
174         new FormRendererDelegateProxy(static_cast<FormRendererDelegateProxy>(iremoteObject));
175     ASSERT_NE(renderDelegate, nullptr);
176 
177     EXPECT_CALL(*iremoteObject, SendRequest(_, _, _, _)).Times(1).WillRepeatedly(Return(ERR_OK));
178     EXPECT_EQ(renderDelegate->OnError("", ""), ERR_OK);
179     EXPECT_CALL(*iremoteObject, SendRequest(_, _, _, _)).Times(1).WillRepeatedly(Return(ERR_INVALID_VALUE));
180     EXPECT_EQ(renderDelegate->OnError("", ""), ERR_INVALID_VALUE);
181 }
182 
183 /*
184  * @tc.name: FormRenderDelegateProxyTest_007
185  * @tc.desc: Test OnSurfaceChange() function.
186  * @tc.type: FUNC
187  */
188 HWTEST_F(FormRenderDelegateProxyTest, FormRenderDelegateProxyTest_007, TestSize.Level1)
189 {
190     sptr<AppExecFwk::MockFormIRemoteObject> iremoteObject = new (std::nothrow) AppExecFwk::MockFormIRemoteObject();
191     sptr<FormRendererDelegateProxy> renderDelegate =
192         new FormRendererDelegateProxy(static_cast<FormRendererDelegateProxy>(iremoteObject));
193     ASSERT_NE(renderDelegate, nullptr);
194 
195     EXPECT_CALL(*iremoteObject, SendRequest(_, _, _, _)).Times(1).WillRepeatedly(Return(ERR_OK));
196     EXPECT_EQ(renderDelegate->OnSurfaceChange(FORM_WIDTH, FORM_HEIGHT, FORM_BORDER_WIDTH), ERR_OK);
197 }
198 
199 /*
200  * @tc.name: FormRenderDelegateProxyTest_008
201  * @tc.desc: Test OnFormLinkInfoUpdate() function.
202  * @tc.type: FUNC
203  */
204 HWTEST_F(FormRenderDelegateProxyTest, FormRenderDelegateProxyTest_008, TestSize.Level1)
205 {
206     sptr<AppExecFwk::MockFormIRemoteObject> iremoteObject = new (std::nothrow) AppExecFwk::MockFormIRemoteObject();
207     sptr<FormRendererDelegateProxy> renderDelegate =
208         new FormRendererDelegateProxy(static_cast<FormRendererDelegateProxy>(iremoteObject));
209     ASSERT_NE(renderDelegate, nullptr);
210 
211     std::vector<std::string> info = {};
212     EXPECT_CALL(*iremoteObject, SendRequest(_, _, _, _)).Times(1).WillRepeatedly(Return(ERR_OK));
213     EXPECT_EQ(renderDelegate->OnFormLinkInfoUpdate(info), ERR_OK);
214     EXPECT_CALL(*iremoteObject, SendRequest(_, _, _, _)).Times(1).WillRepeatedly(Return(ERR_INVALID_VALUE));
215     EXPECT_EQ(renderDelegate->OnFormLinkInfoUpdate(info), ERR_INVALID_VALUE);
216 }
217 
218 /*
219  * @tc.name: FormRenderDelegateProxyTest_009
220  * @tc.desc: Test OnGetRectRelativeToWindow() function.
221  * @tc.type: FUNC
222  */
223 HWTEST_F(FormRenderDelegateProxyTest, FormRenderDelegateProxyTest_009, TestSize.Level1)
224 {
225     sptr<AppExecFwk::MockFormIRemoteObject> iremoteObject = new (std::nothrow) AppExecFwk::MockFormIRemoteObject();
226     sptr<FormRendererDelegateProxy> renderDelegate =
227         new FormRendererDelegateProxy(static_cast<FormRendererDelegateProxy>(iremoteObject));
228     ASSERT_NE(renderDelegate, nullptr);
229 
230     int32_t top = 0;
231     int32_t left = 0;
232     EXPECT_CALL(*iremoteObject, SendRequest(_, _, _, _)).Times(1).WillRepeatedly(Return(ERR_OK));
233     EXPECT_EQ(renderDelegate->OnGetRectRelativeToWindow(top, left), ERR_OK);
234     EXPECT_CALL(*iremoteObject, SendRequest(_, _, _, _)).Times(1).WillRepeatedly(Return(ERR_INVALID_VALUE));
235     EXPECT_EQ(renderDelegate->OnGetRectRelativeToWindow(top, left), ERR_INVALID_VALUE);
236 }
237 }
238