1 /*
2 * Copyright (c) 2022-2025 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 "gtest/gtest.h"
17
18 #include "drawing_font.h"
19 #include "drawing_typeface.h"
20 #include "drawing_error_code.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 NativeFontTest : 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 NativeFontTest::SetUpTestCase()
41 {
42 #ifdef RS_ENABLE_VK
43 RsVulkanContext::SetRecyclable(false);
44 #endif
45 }
TearDownTestCase()46 void NativeFontTest::TearDownTestCase() {}
SetUp()47 void NativeFontTest::SetUp() {}
TearDown()48 void NativeFontTest::TearDown() {}
49
50 /*
51 * @tc.name: NativeFontTest_FontFeatures001
52 * @tc.desc: test for manipulate fontfeatures.
53 * @tc.type: FUNC
54 * @tc.require: ICG6L3
55 */
56 HWTEST_F(NativeFontTest, NativeFontTest_OH_Drawing_FontFeatures001, TestSize.Level1)
57 {
58 const char* name = "ccmp";
59 const float value = 0;
60 OH_Drawing_FontFeatures* features = OH_Drawing_FontFeaturesCreate();
61 EXPECT_NE(features, nullptr);
62 OH_Drawing_ErrorCode ret = OH_Drawing_FontFeaturesAddFeature(features, name, value);
63 EXPECT_EQ(ret, OH_DRAWING_SUCCESS);
64 ret = OH_Drawing_FontFeaturesAddFeature(nullptr, name, value);
65 EXPECT_EQ(ret, OH_DRAWING_ERROR_INVALID_PARAMETER);
66 ret = OH_Drawing_FontFeaturesAddFeature(features, nullptr, value);
67 EXPECT_EQ(ret, OH_DRAWING_ERROR_INVALID_PARAMETER);
68
69 ret = OH_Drawing_FontFeaturesDestroy(features);
70 EXPECT_EQ(ret, OH_DRAWING_SUCCESS);
71 ret = OH_Drawing_FontFeaturesDestroy(nullptr);
72 EXPECT_EQ(ret, OH_DRAWING_ERROR_INVALID_PARAMETER);
73 }
74
75 /*
76 * @tc.name: NativeFontTest_MeasureSingleCharacterWithFeatures001
77 * @tc.desc: test for measure single character with features.
78 * @tc.type: FUNC
79 * @tc.require: ICG6L3
80 */
81 HWTEST_F(NativeFontTest, NativeFontTest_OH_Drawing_MeasureSingleCharacterWithFeatures001, TestSize.Level1)
82 {
83 const char* strOne = "a";
84 const char* strTwo = "你好";
85 const char* strThree = "";
86 float textWidth = 0.f;
87 OH_Drawing_FontFeatures* featuresEmpty = OH_Drawing_FontFeaturesCreate();
88 EXPECT_NE(featuresEmpty, nullptr);
89 OH_Drawing_FontFeatures* featuresOne = OH_Drawing_FontFeaturesCreate();
90 EXPECT_NE(featuresOne, nullptr);
91 OH_Drawing_ErrorCode ret = OH_Drawing_FontFeaturesAddFeature(featuresOne, "ccmp", 0);
92 EXPECT_EQ(ret, OH_DRAWING_SUCCESS);
93 OH_Drawing_Font *font = OH_Drawing_FontCreate();
94 EXPECT_NE(font, nullptr);
95 OH_Drawing_Font *fontWithTypeface = OH_Drawing_FontCreate();
96 EXPECT_NE(fontWithTypeface, nullptr);
97 OH_Drawing_Typeface* typeface = OH_Drawing_TypefaceCreateFromFile("/system/fonts/HarmonyOS_Sans_SC.ttf", 0);
98 EXPECT_NE(typeface, nullptr);
99 OH_Drawing_FontSetTypeface(fontWithTypeface, typeface);
100
101 EXPECT_EQ(OH_Drawing_FontMeasureSingleCharacterWithFeatures(font, strOne, featuresEmpty, &textWidth),
102 OH_DRAWING_SUCCESS);
103 EXPECT_EQ(OH_Drawing_FontMeasureSingleCharacterWithFeatures(font, strTwo, featuresEmpty, &textWidth),
104 OH_DRAWING_SUCCESS);
105 EXPECT_EQ(OH_Drawing_FontMeasureSingleCharacterWithFeatures(font, strOne, featuresOne, &textWidth),
106 OH_DRAWING_SUCCESS);
107 EXPECT_EQ(OH_Drawing_FontMeasureSingleCharacterWithFeatures(fontWithTypeface, strOne, featuresOne, &textWidth),
108 OH_DRAWING_SUCCESS);
109 EXPECT_EQ(OH_Drawing_FontMeasureSingleCharacterWithFeatures(nullptr, strOne, featuresEmpty, &textWidth),
110 OH_DRAWING_ERROR_INVALID_PARAMETER);
111 EXPECT_EQ(OH_Drawing_FontMeasureSingleCharacterWithFeatures(font, nullptr, featuresEmpty, &textWidth),
112 OH_DRAWING_ERROR_INVALID_PARAMETER);
113 EXPECT_EQ(OH_Drawing_FontMeasureSingleCharacterWithFeatures(font, strOne, nullptr, &textWidth),
114 OH_DRAWING_ERROR_INVALID_PARAMETER);
115 EXPECT_EQ(OH_Drawing_FontMeasureSingleCharacterWithFeatures(font, strOne, featuresEmpty, nullptr),
116 OH_DRAWING_ERROR_INVALID_PARAMETER);
117 EXPECT_EQ(OH_Drawing_FontMeasureSingleCharacterWithFeatures(font, strThree, featuresEmpty, &textWidth),
118 OH_DRAWING_ERROR_INVALID_PARAMETER);
119
120 OH_Drawing_FontDestroy(font);
121 OH_Drawing_FontDestroy(fontWithTypeface);
122 OH_Drawing_FontFeaturesDestroy(featuresOne);
123 OH_Drawing_FontFeaturesDestroy(featuresEmpty);
124 }
125
126 } // namespace Drawing
127 } // namespace Rosen
128 } // namespace OHOS