• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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