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