• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 "core/components/test/unittest/mock/mock_render_common.h"
18 #include "core/components/text/flutter_render_text.h"
19 #include "core/components/text/rosen_render_text.h"
20 #include "core/pipeline/base/flutter_render_context.h"
21 #include "core/pipeline/base/rosen_render_context.h"
22 #include "core/components/text/text_component.h"
23 #include "core/components/text_overlay/text_overlay_component.h"
24 #include "base/i18n/localization.h"
25 
26 using namespace testing;
27 using namespace testing::ext;
28 
29 namespace OHOS::Ace {
30 
31 namespace {
32 
33 constexpr double RECT_WIDTH = 1080.0;
34 constexpr double RECT_HEIGHT = 2244.0;
35 
36 } // namespace
37 
38 class RenderTextTest : public testing::Test {
39 public:
40     static void SetUpTestCase();
41     static void TearDownTestCase();
42     void SetUp();
43     void TearDown();
44     void TestRTL(TextDirection direction, const std::string& data, TextAlign textAlign, bool isRosen);
45 };
46 
SetUpTestCase()47 void RenderTextTest::SetUpTestCase() {}
TearDownTestCase()48 void RenderTextTest::TearDownTestCase() {}
SetUp()49 void RenderTextTest::SetUp() {}
TearDown()50 void RenderTextTest::TearDown() {}
51 
TestRTL(TextDirection direction,const std::string & data,TextAlign textAlign,bool isRosen)52 void RenderTextTest::TestRTL(TextDirection direction, const std::string& data,
53     TextAlign textAlign, bool isRosen)
54 {
55     /**
56      * @tc.steps: step1. construct TextComponent.
57      */
58     RefPtr<TextComponent> textComponent = AceType::MakeRefPtr<TextComponent>(data);
59     textComponent->SetTextDirection(direction);
60 
61     /**
62      * @tc.steps: step2. SetLocale.
63     */
64     Localization::GetInstance()->SetLocale("en", "US", "", "", "en-US");
65 
66     if (isRosen) {
67         /**
68          * @tc.steps: step3. construct RenderText and set property.
69          */
70         auto mockContext = MockRenderCommon::GetMockContext();
71         RefPtr<RosenRenderText> renderText = AceType::MakeRefPtr<RosenRenderText>();
72         renderText->Attach(mockContext);
73         renderText->Update(textComponent);
74         TextStyle textStyle;
75         textStyle.SetTextAlign(TextAlign::START);
76         renderText->SetTextStyle(textStyle);
77 
78         /**
79          * @tc.steps: step4. PerformLayout.
80          */
81         LayoutParam layoutParam;
82         layoutParam.SetMinSize(Size(0.0, 0.0));
83         layoutParam.SetMaxSize(Size(RECT_WIDTH, RECT_HEIGHT));
84         renderText->SetLayoutParam(layoutParam);
85         renderText->PerformLayout();
86 
87         /**
88          * @tc.steps: step5. Paint.
89          */
90         RefPtr<RosenRenderContext> rosenRenderContext = AceType::MakeRefPtr<RosenRenderContext>();
91         auto renderNode = AceType::DynamicCast<RenderNode>(renderText);
92         rosenRenderContext->Repaint(renderNode);
93     } else {
94         /**
95          * @tc.steps: step3. construct RenderText and set property.
96          */
97         auto mockContext = MockRenderCommon::GetMockContext();
98         RefPtr<FlutterRenderText> renderText = AceType::MakeRefPtr<FlutterRenderText>();
99         renderText->Attach(mockContext);
100         renderText->Update(textComponent);
101         TextStyle textStyle;
102         textStyle.SetTextAlign(TextAlign::START);
103         renderText->SetTextStyle(textStyle);
104 
105         /**
106          * @tc.steps: step4. PerformLayout.
107          */
108         LayoutParam layoutParam;
109         layoutParam.SetMinSize(Size(0.0, 0.0));
110         layoutParam.SetMaxSize(Size(RECT_WIDTH, RECT_HEIGHT));
111         renderText->SetLayoutParam(layoutParam);
112         renderText->PerformLayout();
113 
114         /**
115          * @tc.steps: step5. Paint.
116          */
117         RefPtr<FlutterRenderContext> flutterRenderContext = AceType::MakeRefPtr<FlutterRenderContext>();
118         auto renderNode = AceType::DynamicCast<RenderNode>(renderText);
119         flutterRenderContext->Repaint(renderNode);
120     }
121 
122     /**
123      * @tc.expected: step6. The text direction is correct.
124      */
125     EXPECT_TRUE(textComponent->GetTextDirection() == direction);
126 }
127 
128 class MockRenderText : public RenderText {
129     DECLARE_ACE_TYPE(MockRenderText, RenderText);
130 
131 public:
132     MockRenderText() = default;
133     ~MockRenderText() override = default;
134 
GetTextLines()135     uint32_t GetTextLines() override
136     {
137         return 0;
138     }
139 
GetTextWidth()140     double GetTextWidth() override
141     {
142         return 0;
143     }
144 
Measure()145     Size Measure() override
146     {
147         return Size(1080.1, 0.0);
148     }
149 
GetTouchPosition(const Offset & offset)150     int32_t GetTouchPosition(const Offset& offset) override
151     {
152         return 0;
153     }
154 
ShowTextOverlay(const Offset & showOffset)155     void ShowTextOverlay(const Offset& showOffset) override
156     {
157         return;
158     }
159 
RegisterCallbacksToOverlay()160     void RegisterCallbacksToOverlay() override
161     {
162         return;
163     }
164 
GetHandleOffset(int32_t extend)165     Offset GetHandleOffset(int32_t extend) override
166     {
167         return Offset();
168     }
169 
GetDefaultTextDirection() const170     TextDirection GetDefaultTextDirection() const
171     {
172         return defaultTextDirection_;
173     }
174 };
175 
176 class MockRenderRoot final : public RenderRoot {
177     DECLARE_ACE_TYPE(MockRenderRoot, RenderRoot);
178 
179 public:
180     MockRenderRoot() = default;
181     ~MockRenderRoot() override = default;
182 };
183 
184 /**
185  * @tc.name: RenderTextTestRTL001
186  * @tc.desc: Test UpdateParagraph and Paint of FlutterRenderText for LTR
187  * @tc.type: FUNC
188  * @tc.require: issueI5NC7M
189  */
190 HWTEST_F(RenderTextTest, RenderTextTestRTL001, TestSize.Level1)
191 {
192     GTEST_LOG_(INFO) << "RenderTextTest rtl001 start";
193 
194     TestRTL(TextDirection::LTR, "text", TextAlign::START, false);
195 
196     GTEST_LOG_(INFO) << "RenderTextTest rtl001 stop";
197 }
198 
199 /**
200  * @tc.name: RenderTextTestRTL002
201  * @tc.desc: Test UpdateParagraph and Paint of RosenRenderText for LTR
202  * @tc.type: FUNC
203  * @tc.require: issueI5NC7M
204  */
205 HWTEST_F(RenderTextTest, RenderTextTestRTL002, TestSize.Level1)
206 {
207     GTEST_LOG_(INFO) << "RenderTextTest rtl002 start";
208 
209     TestRTL(TextDirection::LTR, "text", TextAlign::START, true);
210 
211     GTEST_LOG_(INFO) << "RenderTextTest rtl002 stop";
212 }
213 
214 /**
215  * @tc.name: RenderTextTestRTL003
216  * @tc.desc: Test UpdateParagraph and Paint of FlutterRenderText for LTR
217  * @tc.type: FUNC
218  * @tc.require: issueI5NC7M
219  */
220 HWTEST_F(RenderTextTest, RenderTextTestRTL003, TestSize.Level1)
221 {
222     GTEST_LOG_(INFO) << "RenderTextTest rtl003 start";
223 
224     TestRTL(TextDirection::LTR, "text", TextAlign::END, false);
225 
226     GTEST_LOG_(INFO) << "RenderTextTest rtl003 stop";
227 }
228 
229 /**
230  * @tc.name: RenderTextTestRTL004
231  * @tc.desc: Test UpdateParagraph and Paint of RosenRenderText for LTR
232  * @tc.type: FUNC
233  * @tc.require: issueI5NC7M
234  */
235 HWTEST_F(RenderTextTest, RenderTextTestRTL004, TestSize.Level1)
236 {
237     GTEST_LOG_(INFO) << "RenderTextTest rtl004 start";
238 
239     TestRTL(TextDirection::LTR, "text", TextAlign::END, true);
240 
241     GTEST_LOG_(INFO) << "RenderTextTest rtl004 stop";
242 }
243 
244 /**
245  * @@tc.name: RenderTextTestRTL005
246  * @tc.desc: Test UpdateParagraph and Paint of FlutterRenderText for LTR
247  * @tc.type: FUNC
248  * @tc.require: issueI5NC7M
249  */
250 HWTEST_F(RenderTextTest, RenderTextTestRTL005, TestSize.Level1)
251 {
252     GTEST_LOG_(INFO) << "RenderTextTest rtl005 start";
253 
254     TestRTL(TextDirection::LTR, "text", TextAlign::LEFT, false);
255 
256     GTEST_LOG_(INFO) << "RenderTextTest rtl005 stop";
257 }
258 
259 /**
260  * @@tc.name: RenderTextTestRTL006
261  * @tc.desc: Test UpdateParagraph and Paint of RosenRenderText for LTR
262  * @tc.type: FUNC
263  * @tc.require: issueI5NC7M
264  */
265 HWTEST_F(RenderTextTest, RenderTextTestRTL006, TestSize.Level1)
266 {
267     GTEST_LOG_(INFO) << "RenderTextTest rtl006 start";
268 
269     TestRTL(TextDirection::LTR, "text", TextAlign::LEFT, true);
270 
271     GTEST_LOG_(INFO) << "RenderTextTest rtl006 stop";
272 }
273 
274 /**
275  * @@tc.name: RenderTextTestRTL007
276  * @tc.desc: Test UpdateParagraph and Paint of FlutterRenderText for LTR
277  * @tc.type: FUNC
278  * @tc.require: issueI5NC7M
279  */
280 HWTEST_F(RenderTextTest, RenderTextTestRTL007, TestSize.Level1)
281 {
282     GTEST_LOG_(INFO) << "RenderTextTest rtl007 start";
283 
284     TestRTL(TextDirection::LTR, "text", TextAlign::RIGHT, false);
285 
286     GTEST_LOG_(INFO) << "RenderTextTest rtl007 stop";
287 }
288 
289 /**
290  * @@tc.name: RenderTextTestRTL008
291  * @tc.desc: Test UpdateParagraph and Paint of RosenRenderText for LTR
292  * @tc.type: FUNC
293  * @tc.require: issueI5NC7M
294  */
295 HWTEST_F(RenderTextTest, RenderTextTestRTL008, TestSize.Level1)
296 {
297     GTEST_LOG_(INFO) << "RenderTextTest rtl008 start";
298 
299     TestRTL(TextDirection::LTR, "text", TextAlign::RIGHT, true);
300 
301     GTEST_LOG_(INFO) << "RenderTextTest rtl008 stop";
302 }
303 
304 /**
305  * @@tc.name: RenderTextTestRTL009
306  * @tc.desc: Test UpdateParagraph and Paint of FlutterRenderText for RTL
307  * @tc.type: FUNC
308  * @tc.require: issueI5NC7M
309  */
310 HWTEST_F(RenderTextTest, RenderTextTestRTL009, TestSize.Level1)
311 {
312     GTEST_LOG_(INFO) << "RenderTextTest rtl009 start";
313 
314     TestRTL(TextDirection::RTL, "", TextAlign::START, false);
315 
316     GTEST_LOG_(INFO) << "RenderTextTest rtl009 stop";
317 }
318 
319 /**
320  * @@tc.name: RenderTextTestRTL010
321  * @tc.desc: Test UpdateParagraph and Paint of RosenRenderText for RTL
322  * @tc.type: FUNC
323  * @tc.require: issueI5NC7M
324  */
325 HWTEST_F(RenderTextTest, RenderTextTestRTL010, TestSize.Level1)
326 {
327     GTEST_LOG_(INFO) << "RenderTextTest rtl010 start";
328 
329     TestRTL(TextDirection::RTL, "", TextAlign::START, true);
330 
331     GTEST_LOG_(INFO) << "RenderTextTest rtl010 stop";
332 }
333 
334 /**
335  * @@tc.name: RenderTextTestRTL011
336  * @tc.desc: Test UpdateParagraph and Paint of FlutterRenderText for RTL
337  * @tc.type: FUNC
338  * @tc.require: issueI5NC7M
339  */
340 HWTEST_F(RenderTextTest, RenderTextTestRTL011, TestSize.Level1)
341 {
342     GTEST_LOG_(INFO) << "RenderTextTest rtl011 start";
343 
344     TestRTL(TextDirection::RTL, "1234567890", TextAlign::START, false);
345 
346     GTEST_LOG_(INFO) << "RenderTextTest rtl011 stop";
347 }
348 
349 /**
350  * @@tc.name: RenderTextTestRTL012
351  * @tc.desc: Test UpdateParagraph and Paint of RosenRenderText for RTL
352  * @tc.type: FUNC
353  * @tc.require: issueI5NC7M
354  */
355 HWTEST_F(RenderTextTest, RenderTextTestRTL012, TestSize.Level1)
356 {
357     GTEST_LOG_(INFO) << "RenderTextTest rtl012 start";
358 
359     TestRTL(TextDirection::RTL, "1234567890", TextAlign::START, true);
360 
361     GTEST_LOG_(INFO) << "RenderTextTest rtl012 stop";
362 }
363 
364 /**
365  * @@tc.name: RenderTextTestRTL013
366  * @tc.desc: Test UpdateParagraph and Paint of FlutterRenderText for RTL
367  * @tc.type: FUNC
368  * @tc.require: issueI5NC7M
369  */
370 HWTEST_F(RenderTextTest, RenderTextTestRTL013, TestSize.Level1)
371 {
372     GTEST_LOG_(INFO) << "RenderTextTest rtl013 start";
373 
374     TestRTL(TextDirection::RTL, "اللغة العربية", TextAlign::START, false);
375 
376     GTEST_LOG_(INFO) << "RenderTextTest rtl013 stop";
377 }
378 
379 /**
380  * @@tc.name: RenderTextTestRTL014
381  * @tc.desc: Test UpdateParagraph and Paint of RosenRenderText for RTL
382  * @tc.type: FUNC
383  * @tc.require: issueI5NC7M
384  */
385 HWTEST_F(RenderTextTest, RenderTextTestRTL014, TestSize.Level1)
386 {
387     GTEST_LOG_(INFO) << "RenderTextTest rtl014 start";
388 
389     TestRTL(TextDirection::RTL, "اللغة العربية", TextAlign::START, true);
390 
391     GTEST_LOG_(INFO) << "RenderTextTest rtl014 stop";
392 }
393 
394 /**
395  * @@tc.name: RenderTextTestRTL015
396  * @tc.desc: Test UpdateParagraph and Paint of FlutterRenderText for RTL
397  * @tc.type: FUNC
398  * @tc.require: issueI5NC7M
399  */
400 HWTEST_F(RenderTextTest, RenderTextTestRTL015, TestSize.Level1)
401 {
402     GTEST_LOG_(INFO) << "RenderTextTest rtl015 start";
403 
404     TestRTL(TextDirection::RTL, "اللغة العربية", TextAlign::END, false);
405 
406     GTEST_LOG_(INFO) << "RenderTextTest rtl015 stop";
407 }
408 
409 /**
410  * @@tc.name: RenderTextTestRTL016
411  * @tc.desc: Test UpdateParagraph and Paint of RosenRenderText for RTL
412  * @tc.type: FUNC
413  * @tc.require: issueI5NC7M
414  */
415 HWTEST_F(RenderTextTest, RenderTextTestRTL016, TestSize.Level1)
416 {
417     GTEST_LOG_(INFO) << "RenderTextTest rtl016 start";
418 
419     TestRTL(TextDirection::RTL, "اللغة العربية", TextAlign::END, true);
420 
421     GTEST_LOG_(INFO) << "RenderTextTest rtl016 stop";
422 }
423 
424 /**
425  * @@tc.name: RenderTextTestRTL017
426  * @tc.desc: Test UpdateParagraph and Paint of FlutterRenderText for RTL
427  * @tc.type: FUNC
428  * @tc.require: issueI5NC7M
429  */
430 HWTEST_F(RenderTextTest, RenderTextTestRTL017, TestSize.Level1)
431 {
432     GTEST_LOG_(INFO) << "RenderTextTest rtl017 start";
433 
434     TestRTL(TextDirection::RTL, "اللغة العربية", TextAlign::LEFT, false);
435 
436     GTEST_LOG_(INFO) << "RenderTextTest rtl017 stop";
437 }
438 
439 /**
440  * @@tc.name: RenderTextTestRTL018
441  * @tc.desc: Test UpdateParagraph and Paint of RosenRenderText for RTL
442  * @tc.type: FUNC
443  * @tc.require: issueI5NC7M
444  */
445 HWTEST_F(RenderTextTest, RenderTextTestRTL018, TestSize.Level1)
446 {
447     GTEST_LOG_(INFO) << "RenderTextTest rtl018 start";
448 
449     TestRTL(TextDirection::RTL, "اللغة العربية", TextAlign::LEFT, true);
450 
451     GTEST_LOG_(INFO) << "RenderTextTest rtl018 stop";
452 }
453 
454 /**
455  * @@tc.name: RenderTextTestRTL019
456  * @tc.desc: Test UpdateParagraph and Paint of FlutterRenderText for RTL
457  * @tc.type: FUNC
458  * @tc.require: issueI5NC7M
459  */
460 HWTEST_F(RenderTextTest, RenderTextTestRTL019, TestSize.Level1)
461 {
462     GTEST_LOG_(INFO) << "RenderTextTest rtl019 start";
463 
464     TestRTL(TextDirection::RTL, "اللغة العربية", TextAlign::RIGHT, false);
465 
466     GTEST_LOG_(INFO) << "RenderTextTest rtl019 stop";
467 }
468 
469 /**
470  * @@tc.name: RenderTextTestRTL020
471  * @tc.desc: Test UpdateParagraph and Paint of RosenRenderText for RTL
472  * @tc.type: FUNC
473  * @tc.require: issueI5NC7M
474  */
475 HWTEST_F(RenderTextTest, RenderTextTestRTL020, TestSize.Level1)
476 {
477     GTEST_LOG_(INFO) << "RenderTextTest rtl020 start";
478 
479     TestRTL(TextDirection::RTL, "اللغة العربية", TextAlign::RIGHT, true);
480 
481     GTEST_LOG_(INFO) << "RenderTextTest rtl020 stop";
482 }
483 
484 } // namespace OHOS::Ace
485