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, Hardware
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 "drawing_error_code.h"
17 #include "drawing_memory_stream.h"
18 #include "drawing_path.h"
19 #include "drawing_typeface.h"
20 #include "gtest/gtest.h"
21
22 #ifdef RS_ENABLE_VK
23 #include "platform/ohos/backend/rs_vulkan_context.h"
24 #endif
25
26 using namespace testing;
27 using namespace testing::ext;
28
29 namespace OHOS {
30 namespace Rosen {
31 namespace Drawing {
32 class NativeDrawingTypefaceTest : public testing::Test {
33 public:
34 static void SetUpTestCase();
35 static void TearDownTestCase();
36 void SetUp() override;
37 void TearDown() override;
38 };
39
SetUpTestCase()40 void NativeDrawingTypefaceTest::SetUpTestCase()
41 {
42 #ifdef RS_ENABLE_VK
43 RsVulkanContext::SetRecyclable(false);
44 #endif
45 }
46
TearDownTestCase()47 void NativeDrawingTypefaceTest::TearDownTestCase() {}
SetUp()48 void NativeDrawingTypefaceTest::SetUp() {}
TearDown()49 void NativeDrawingTypefaceTest::TearDown() {}
50
51 /*
52 * @tc.name: OH_Drawing_TypefaceCreateFromFile
53 * @tc.desc: Test OH_Drawing_TypefaceCreateFromFile
54 * @tc.type: FUNC
55 */
56 HWTEST_F(NativeDrawingTypefaceTest, OH_Drawing_TypefaceCreateFromFile, TestSize.Level1)
57 {
58 const char* path = "oom_score_adj";
59 ASSERT_TRUE(path != nullptr);
60 OH_Drawing_Typeface* typeface = OH_Drawing_TypefaceCreateFromFile(path, 0);
61 ASSERT_TRUE(typeface == nullptr);
62 }
63
64 /*
65 * @tc.name: OH_Drawing_TypefaceCreateFromFile
66 * @tc.desc: Test OH_Drawing_TypefaceCreateFromFile
67 * @tc.type: FUNC
68 */
69 HWTEST_F(NativeDrawingTypefaceTest, OH_Drawing_TypefaceCreateFromStream, TestSize.Level1)
70 {
71 char testData[] = "Hello";
72 size_t length = sizeof(testData) - 1;
73 OH_Drawing_MemoryStream* memoryStream = OH_Drawing_MemoryStreamCreate(testData, length, false);
74 ASSERT_TRUE(memoryStream != nullptr);
75 OH_Drawing_Typeface* typeface = OH_Drawing_TypefaceCreateFromStream(memoryStream, 1);
76 OH_Drawing_TypefaceCreateFromStream(nullptr, 1);
77 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
78 ASSERT_TRUE(typeface == nullptr);
79 }
80
81 /*
82 * @tc.name: OH_Drawing_TypefaceDestroy
83 * @tc.desc: Test OH_Drawing_TypefaceDestroy
84 * @tc.type: FUNC
85 */
86 HWTEST_F(NativeDrawingTypefaceTest, OH_Drawing_TypefaceDestroy, TestSize.Level1)
87 {
88 OH_Drawing_Typeface* typeface = OH_Drawing_TypefaceCreateDefault();
89 ASSERT_TRUE(typeface != nullptr);
90 OH_Drawing_TypefaceDestroy(typeface);
91 ASSERT_TRUE(typeface != nullptr);
92 }
93
94 /*
95 * @tc.name: OH_Drawing_FontArgumentsCreate
96 * @tc.desc: Test OH_Drawing_FontArgumentsCreate
97 * @tc.type: FUNC
98 */
99 HWTEST_F(NativeDrawingTypefaceTest, OH_Drawing_FontArgumentsCreate, TestSize.Level1)
100 {
101 OH_Drawing_FontArguments *fontArgs = OH_Drawing_FontArgumentsCreate();
102 ASSERT_TRUE(fontArgs != nullptr);
103 }
104
105 /*
106 * @tc.name: OH_Drawing_FontArgumentsAddVariation
107 * @tc.desc: Test OH_Drawing_FontArgumentsAddVariation
108 * @tc.type: FUNC
109 */
110 HWTEST_F(NativeDrawingTypefaceTest, OH_Drawing_FontArgumentsAddVariation, TestSize.Level1)
111 {
112 OH_Drawing_FontArguments *fontArgs = OH_Drawing_FontArgumentsCreate();
113 ASSERT_TRUE(fontArgs != nullptr);
114 OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_SUCCESS;
115 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArgs, "wght", 100); // 100 means coordinate value
116 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
117 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArgs, "wght", 10000); // 10000 means coordinate value
118 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
119 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArgs, "wght", 0);
120 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
121 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArgs, "wght", -100); // -100 means coordinate value
122 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
123 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(nullptr, "wght", 100); // 100 means coordinate value
124 EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
125 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArgs, "weight", 100); // 100 means coordinate value
126 EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
127 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArgs, nullptr, 100); // 100 means coordinate value
128 EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
129 OH_Drawing_FontArgumentsDestroy(fontArgs);
130 }
131
132 /*
133 * @tc.name: OH_Drawing_FontArgumentsDestroy
134 * @tc.desc: Test OH_Drawing_FontArgumentsDestroy
135 * @tc.type: FUNC
136 */
137 HWTEST_F(NativeDrawingTypefaceTest, OH_Drawing_FontArgumentsDestroy, TestSize.Level1)
138 {
139 OH_Drawing_FontArguments *fontArgs = OH_Drawing_FontArgumentsCreate();
140 ASSERT_TRUE(fontArgs != nullptr);
141 OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_SUCCESS;
142 drawingErrorCode = OH_Drawing_FontArgumentsDestroy(nullptr);
143 EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
144 drawingErrorCode = OH_Drawing_FontArgumentsDestroy(fontArgs);
145 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
146 }
147
148 /*
149 * @tc.name: OH_Drawing_TypefaceCreateFromFileWithArguments
150 * @tc.desc: Test OH_Drawing_TypefaceCreateFromFileWithArguments
151 * @tc.type: FUNC
152 */
153 HWTEST_F(NativeDrawingTypefaceTest, OH_Drawing_TypefaceCreateFromFileWithArguments, TestSize.Level1)
154 {
155 OH_Drawing_FontArguments *fontArgs = OH_Drawing_FontArgumentsCreate();
156 ASSERT_TRUE(fontArgs != nullptr);
157 OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_SUCCESS;
158 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArgs, "wght", 100); // 100 means coordinate value
159 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
160 OH_Drawing_Typeface *typeface =
161 OH_Drawing_TypefaceCreateFromFileWithArguments(nullptr, fontArgs);
162 ASSERT_TRUE(typeface == nullptr);
163 typeface = OH_Drawing_TypefaceCreateFromFileWithArguments("/system/fonts/HarmonyOS_Sans.ttf", nullptr);
164 ASSERT_TRUE(typeface == nullptr);
165 typeface = OH_Drawing_TypefaceCreateFromFileWithArguments("/system/fonts/HarmonyOS_Sans.ttf", fontArgs);
166 ASSERT_TRUE(typeface != nullptr);
167 OH_Drawing_Typeface *typeface1 =
168 OH_Drawing_TypefaceCreateFromFileWithArguments("/system/fonts/HarmonyOS_Sans_Digit.ttf", fontArgs);
169 ASSERT_TRUE(typeface1 != nullptr);
170 OH_Drawing_Typeface *typeface2 =
171 OH_Drawing_TypefaceCreateFromFileWithArguments("/system/fonts/HarmonyOS_Sans_TC.ttf", fontArgs);
172 ASSERT_TRUE(typeface2 != nullptr);
173
174 OH_Drawing_FontArgumentsDestroy(fontArgs);
175 OH_Drawing_TypefaceDestroy(typeface);
176 OH_Drawing_TypefaceDestroy(typeface1);
177 OH_Drawing_TypefaceDestroy(typeface2);
178 }
179
180 /*
181 * @tc.name: OH_Drawing_TypefaceCreateFromCurrent
182 * @tc.desc: Test OH_Drawing_TypefaceCreateFromCurrent001
183 * @tc.type: FUNC
184 */
185 HWTEST_F(NativeDrawingTypefaceTest, OH_Drawing_TypefaceCreateFromCurrent001, TestSize.Level1)
186 {
187 OH_Drawing_FontArguments *fontArgs = OH_Drawing_FontArgumentsCreate();
188 ASSERT_TRUE(fontArgs != nullptr);
189 OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_SUCCESS;
190 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArgs, "wght", 100); // 100 means coordinate value
191 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
192
193 OH_Drawing_Typeface *current = OH_Drawing_TypefaceCreateFromFile("/system/fonts/HarmonyOS_Sans.ttf", 0);
194 ASSERT_TRUE(current != nullptr);
195 OH_Drawing_Typeface *typeface = OH_Drawing_TypefaceCreateFromCurrent(current, nullptr);
196 ASSERT_TRUE(typeface == nullptr);
197 typeface = OH_Drawing_TypefaceCreateFromCurrent(nullptr, fontArgs);
198 ASSERT_TRUE(typeface == nullptr);
199 typeface = OH_Drawing_TypefaceCreateFromCurrent(current, fontArgs);
200 ASSERT_TRUE(typeface != nullptr);
201
202 OH_Drawing_FontArgumentsDestroy(fontArgs);
203 OH_Drawing_TypefaceDestroy(current);
204 OH_Drawing_TypefaceDestroy(typeface);
205 }
206
207 /*
208 * @tc.name: OH_Drawing_TypefaceCreateFromCurrent
209 * @tc.desc: Test OH_Drawing_TypefaceCreateFromCurrent002
210 * @tc.type: FUNC
211 */
212 HWTEST_F(NativeDrawingTypefaceTest, OH_Drawing_TypefaceCreateFromCurrent002, TestSize.Level1)
213 {
214 OH_Drawing_FontArguments *fontArgs = OH_Drawing_FontArgumentsCreate();
215 ASSERT_TRUE(fontArgs != nullptr);
216 OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_SUCCESS;
217 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArgs, "wght", 800); // 800 means coordinate value
218 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
219
220 OH_Drawing_Typeface *current = OH_Drawing_TypefaceCreateFromFile("/system/fonts/HarmonyOS_Sans_Digit.ttf", 0);
221 ASSERT_TRUE(current != nullptr);
222 OH_Drawing_Typeface *typeface = OH_Drawing_TypefaceCreateFromCurrent(current, fontArgs);
223 ASSERT_TRUE(typeface == nullptr);
224
225 OH_Drawing_FontArgumentsDestroy(fontArgs);
226 OH_Drawing_TypefaceDestroy(current);
227 }
228 } // namespace Drawing
229 } // namespace Rosen
230 } // namespace OHOS