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