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 <cstddef>
17  #include "gtest/gtest.h"
18  #include "skia_adapter/skia_font.h"
19  #include "text/font.h"
20  
21  using namespace testing;
22  using namespace testing::ext;
23  
24  namespace OHOS {
25  namespace Rosen {
26  namespace Drawing {
27  class SkiaFontTest : public testing::Test {
28  public:
29      static void SetUpTestCase();
30      static void TearDownTestCase();
31      void SetUp() override;
32      void TearDown() override;
33  };
34  
SetUpTestCase()35  void SkiaFontTest::SetUpTestCase() {}
TearDownTestCase()36  void SkiaFontTest::TearDownTestCase() {}
SetUp()37  void SkiaFontTest::SetUp() {}
TearDown()38  void SkiaFontTest::TearDown() {}
39  
40  /**
41   * @tc.name: SkiaFont001
42   * @tc.desc: Test SkiaFont's constructor
43   * @tc.type: FUNC
44   * @tc.require: I9120P
45   */
46  HWTEST_F(SkiaFontTest, SkiaFont001, TestSize.Level1)
47  {
48      std::shared_ptr<SkiaFont> skiaFont = std::make_shared<SkiaFont>(nullptr, 1, 1, 1);
49      ASSERT_TRUE(skiaFont != nullptr);
50      std::shared_ptr<Typeface> typeface = Typeface::MakeDefault();
51      skiaFont = std::make_shared<SkiaFont>(typeface, 1, 1, 1);
52      ASSERT_TRUE(skiaFont != nullptr);
53  }
54  
55  /**
56   * @tc.name: SetEdging001
57   * @tc.desc: Test SetEdging
58   * @tc.type: FUNC
59   * @tc.require: I9120P
60   */
61  HWTEST_F(SkiaFontTest, SetEdging001, TestSize.Level1)
62  {
63      std::shared_ptr<Typeface> typeface = Typeface::MakeDefault();
64      auto skiaFont = std::make_shared<SkiaFont>(typeface, 1, 1, 1);
65      skiaFont->SetEdging(FontEdging::ALIAS);
66      ASSERT_TRUE(skiaFont->GetFont().getEdging() == SkFont::Edging::kAlias);
67  }
68  
69  /**
70   * @tc.name: SetSubpixel001
71   * @tc.desc: Test SetSubpixel
72   * @tc.type: FUNC
73   * @tc.require: I9120P
74   */
75  HWTEST_F(SkiaFontTest, SetSubpixel001, TestSize.Level1)
76  {
77      std::shared_ptr<Typeface> typeface = Typeface::MakeDefault();
78      auto skiaFont = std::make_shared<SkiaFont>(typeface, 1, 1, 1);
79      skiaFont->SetSubpixel(true);
80      ASSERT_TRUE(skiaFont->GetFont().isSubpixel());
81  }
82  
83  /**
84   * @tc.name: SetHinting001
85   * @tc.desc: Test SetHinting
86   * @tc.type: FUNC
87   * @tc.require: I9120P
88   */
89  HWTEST_F(SkiaFontTest, SetHinting001, TestSize.Level1)
90  {
91      std::shared_ptr<Typeface> typeface = Typeface::MakeDefault();
92      auto skiaFont = std::make_shared<SkiaFont>(typeface, 1, 1, 1);
93      skiaFont->SetHinting(FontHinting::NONE);
94      ASSERT_TRUE(skiaFont->GetFont().getHinting() == SkFontHinting::kNone);
95  }
96  
97  /**
98   * @tc.name: SetTypeface001
99   * @tc.desc: Test SetTypeface
100   * @tc.type: FUNC
101   * @tc.require: I9120P
102   */
103  HWTEST_F(SkiaFontTest, SetTypeface001, TestSize.Level1)
104  {
105      std::shared_ptr<Typeface> typeface = Typeface::MakeDefault();
106      auto skiaFont = std::make_shared<SkiaFont>(typeface, 1, 1, 1);
107      skiaFont->SetTypeface(nullptr);
108      ASSERT_TRUE(skiaFont->GetTypeface() != nullptr);
109  }
110  
111  /**
112   * @tc.name: SetScaleX001
113   * @tc.desc: Test SetScaleX
114   * @tc.type: FUNC
115   * @tc.require: I9120P
116   */
117  HWTEST_F(SkiaFontTest, SetScaleX001, TestSize.Level1)
118  {
119      std::shared_ptr<Typeface> typeface = Typeface::MakeDefault();
120      auto skiaFont = std::make_shared<SkiaFont>(typeface, 1, 1, 1);
121      skiaFont->SetScaleX(1);
122      ASSERT_TRUE(skiaFont->GetFont().getScaleX() == 1);
123  }
124  
125  /**
126   * @tc.name: SetLinearMetrics001
127   * @tc.desc: Test SetLinearMetrics
128   * @tc.type: FUNC
129   * @tc.require: I9120P
130   */
131  HWTEST_F(SkiaFontTest, SetLinearMetrics001, TestSize.Level1)
132  {
133      std::shared_ptr<Typeface> typeface = Typeface::MakeDefault();
134      auto skiaFont = std::make_shared<SkiaFont>(typeface, 1, 1, 1);
135      skiaFont->SetLinearMetrics(true);
136      ASSERT_TRUE(skiaFont->GetFont().isLinearMetrics());
137  }
138  
139  /**
140   * @tc.name: GetMetrics001
141   * @tc.desc: Test GetMetrics
142   * @tc.type: FUNC
143   * @tc.require: I9120P
144   */
145  HWTEST_F(SkiaFontTest, GetMetrics001, TestSize.Level1)
146  {
147      std::shared_ptr<Typeface> typeface = Typeface::MakeDefault();
148      auto skiaFont = std::make_shared<SkiaFont>(typeface, 1, 1, 1);
149      auto metrics = skiaFont->GetMetrics(nullptr);
150      ASSERT_TRUE(metrics > 0);
151  }
152  
153  /**
154   * @tc.name: GetWidths001
155   * @tc.desc: Test GetWidths
156   * @tc.type: FUNC
157   * @tc.require: I9120P
158   */
159  HWTEST_F(SkiaFontTest, GetWidths001, TestSize.Level1)
160  {
161      std::shared_ptr<Typeface> typeface = Typeface::MakeDefault();
162      auto skiaFont = std::make_shared<SkiaFont>(typeface, 1, 1, 1);
163      uint16_t glyphs[] = { 0, 0 };
164      scalar widths[] = { 0, 0 };
165      skiaFont->GetWidths(glyphs, 2, widths); // 2:count
166      skiaFont->GetWidths(glyphs, 2, widths, nullptr); // 2:count
167      Rect rect1;
168      Rect rect2;
169      Rect bounds[] = { rect1, rect2 };
170      skiaFont->GetWidths(glyphs, 2, widths, bounds);
171      ASSERT_TRUE(rect1.GetWidth() >= 0);
172  }
173  
174  /**
175   * @tc.name: GetSize001
176   * @tc.desc: Test GetSize
177   * @tc.type: FUNC
178   * @tc.require: I9120P
179   */
180  HWTEST_F(SkiaFontTest, GetSize001, TestSize.Level1)
181  {
182      std::shared_ptr<Typeface> typeface = Typeface::MakeDefault();
183      auto skiaFont = std::make_shared<SkiaFont>(typeface, 1, 1, 1);
184      auto size = skiaFont->GetSize();
185      ASSERT_TRUE(size > 0);
186  }
187  
188  /**
189   * @tc.name: GetTypeface001
190   * @tc.desc: Test GetTypeface
191   * @tc.type: FUNC
192   * @tc.require: I9120P
193   */
194  HWTEST_F(SkiaFontTest, GetTypeface001, TestSize.Level1)
195  {
196      std::shared_ptr<Typeface> typeface = Typeface::MakeDefault();
197      auto skiaFont = std::make_shared<SkiaFont>(typeface, 1, 1, 1);
198      auto typeface2 = skiaFont->GetTypeface();
199      ASSERT_TRUE(typeface2 != nullptr);
200  }
201  
202  /**
203   * @tc.name: MeasureText001
204   * @tc.desc: Test MeasureText
205   * @tc.type: FUNC
206   * @tc.require: I9120P
207   */
208  HWTEST_F(SkiaFontTest, MeasureText001, TestSize.Level1)
209  {
210      std::shared_ptr<Typeface> typeface = Typeface::MakeDefault();
211      auto skiaFont = std::make_shared<SkiaFont>(typeface, 1, 1, 1);
212      auto size = skiaFont->MeasureText("11", 2, TextEncoding::UTF8, nullptr); // 2:byteLength
213      ASSERT_TRUE(size > 0);
214  }
215  } // namespace Drawing
216  } // namespace Rosen
217  } // namespace OHOS