1 /*
2 * Copyright (c) 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, 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 #include "BufferTextTest.h"
16
17 #include <native_buffer/native_buffer.h>
18 #include <native_drawing/drawing_text_blob.h>
19 #include <native_drawing/drawing_rect.h>
20 #include <native_drawing/drawing_sampling_options.h>
21 #include <native_drawing/drawing_font.h>
22 #include <native_drawing/drawing_brush.h>
23 #include <native_drawing/drawing_pen.h>
24 #include <native_drawing/drawing_text_blob.h>
25 #include <native_drawing/drawing_text_global.h>
26 #include <native_window/graphic_error_code.h>
27 #include <native_drawing/drawing_text_font_descriptor.h>
28 #include <native_window/buffer_handle.h>
29 #include <multimedia/player_framework/native_avbuffer.h>
30 #include <EGL/egl.h>
31 #include <EGL/eglext.h>
32 #include <GLES3/gl3.h>
33 #include <GLES2/gl2ext.h>
34 #include <native_image/native_image.h>
35 #include <native_drawing/drawing_text_declaration.h>
36 #include <native_drawing/drawing_font_collection.h>
37
addBufferTextTest(std::vector<napi_property_descriptor> & descData)38 void addBufferTextTest(std::vector<napi_property_descriptor>& descData)
39 {
40 descData.push_back({"getColorSpaceSuccess", nullptr, OH_NativeBuffer_GetColorSpaceSuccess,
41 nullptr, nullptr, nullptr, napi_default, nullptr});
42 descData.push_back({"getColorSpaceFail", nullptr, OH_NativeBuffer_GetColorSpaceFail,
43 nullptr, nullptr, nullptr, napi_default, nullptr});
44 descData.push_back({"setMetadataValueSuccess", nullptr, OH_NativeBuffer_SetMetadataValueSuccess,
45 nullptr, nullptr, nullptr, napi_default, nullptr});
46 descData.push_back({"setMetadataValueFail", nullptr, OH_NativeBuffer_SetMetadataValueFail,
47 nullptr, nullptr, nullptr, napi_default, nullptr});
48 descData.push_back({"getMetadataValueSuccess", nullptr, OH_NativeBuffer_GetMetadataValueSuccess,
49 nullptr, nullptr, nullptr, napi_default, nullptr});
50 descData.push_back({"getMetadataValueFail", nullptr, OH_NativeBuffer_GetMetadataValueFail,
51 nullptr, nullptr, nullptr, napi_default, nullptr});
52 descData.push_back({"runBufferGlyphsSuccess", nullptr, OH_Drawing_RunBufferGlyphsSuccess,
53 nullptr, nullptr, nullptr, napi_default, nullptr});
54 descData.push_back({"runBufferPosSuccess", nullptr, OH_Drawing_RunBufferPosSuccess,
55 nullptr, nullptr, nullptr, napi_default, nullptr});
56 descData.push_back({"runBufferUtf8textSuccess", nullptr, OH_Drawing_RunBufferUtf8textSuccess,
57 nullptr, nullptr, nullptr, napi_default, nullptr});
58 descData.push_back({"runBufferClustersSuccess", nullptr, OH_Drawing_RunBufferClustersSuccess,
59 nullptr, nullptr, nullptr, napi_default, nullptr});
60 descData.push_back({"systemFontTypeSuccess", nullptr, OH_Drawing_SystemFontTypeSuccess,
61 nullptr, nullptr, nullptr, napi_default, nullptr});
62 descData.push_back({"textUndefinedGlyphDisplayDEFAULT", nullptr, OH_Drawing_TextUndefinedGlyphDisplayDEFAULT,
63 nullptr, nullptr, nullptr, napi_default, nullptr});
64 descData.push_back({"textUndefinedGlyphDisplayTOFU", nullptr, OH_Drawing_TextUndefinedGlyphDisplayTOFU,
65 nullptr, nullptr, nullptr, napi_default, nullptr});
66 }
67
OH_NativeBuffer_GetColorSpaceSuccess(napi_env env,napi_callback_info info)68 napi_value OH_NativeBuffer_GetColorSpaceSuccess(napi_env env, napi_callback_info info)
69 {
70 napi_value result;
71 OH_NativeBuffer_Config config = {
72 .width = 0x100,
73 .height = 0x100,
74 .format = 12,
75 .usage = (1ULL << 0) | (1ULL << 1) | (1ULL << 3),
76 };
77 OH_NativeBuffer* buffer = OH_NativeBuffer_Alloc(&config);
78 int32_t res = OH_NativeBuffer_SetColorSpace(buffer, OH_COLORSPACE_BT709_LIMIT);
79 OH_NativeBuffer_ColorSpace colorSpace;
80 res = OH_NativeBuffer_GetColorSpace(buffer, &colorSpace);
81 napi_create_int32(env, res != NATIVE_ERROR_INVALID_ARGUMENTS, &result);
82 return result;
83 }
84
OH_NativeBuffer_GetColorSpaceFail(napi_env env,napi_callback_info info)85 napi_value OH_NativeBuffer_GetColorSpaceFail(napi_env env, napi_callback_info info)
86 {
87 napi_value result;
88
89 OH_NativeBuffer_ColorSpace colorSpace;
90 int32_t res = OH_NativeBuffer_GetColorSpace(nullptr, &colorSpace);
91 napi_create_int32(env, res == NATIVE_ERROR_INVALID_ARGUMENTS, &result);
92 return result;
93 }
OH_NativeBuffer_SetMetadataValueSuccess(napi_env env,napi_callback_info info)94 napi_value OH_NativeBuffer_SetMetadataValueSuccess(napi_env env, napi_callback_info info)
95 {
96 napi_value result;
97
98 OH_NativeBuffer_Config config = {
99 .width = 0x100,
100 .height = 0x100,
101 .format = 12,
102 .usage = (1ULL << 0) | (1ULL << 1) | (1ULL << 3) | (1ULL << 4) | (1ULL << 5) | (1ULL << 6)|(1ULL << 7),
103 };
104 OH_NativeBuffer* buffer = OH_NativeBuffer_Alloc(&config);
105 int32_t size = 10;
106 uint8_t *metadata = new uint8_t(size);
107 int32_t res = OH_NativeBuffer_SetMetadataValue(buffer, OH_HDR_STATIC_METADATA, size, metadata);
108 napi_create_int32(env, res != NATIVE_ERROR_INVALID_ARGUMENTS, &result);
109 return result;
110 }
111
OH_NativeBuffer_SetMetadataValueFail(napi_env env,napi_callback_info info)112 napi_value OH_NativeBuffer_SetMetadataValueFail(napi_env env, napi_callback_info info)
113 {
114 napi_value result;
115 int32_t size = 10;
116 uint8_t *metadata = new uint8_t(size);
117 int32_t res = OH_NativeBuffer_SetMetadataValue(nullptr, OH_HDR_STATIC_METADATA, size, metadata);
118 napi_create_int32(env, res == NATIVE_ERROR_INVALID_ARGUMENTS, &result);
119 return result;
120 }
121
OH_NativeBuffer_GetMetadataValueSuccess(napi_env env,napi_callback_info info)122 napi_value OH_NativeBuffer_GetMetadataValueSuccess(napi_env env, napi_callback_info info)
123 {
124 napi_value result;
125 OH_NativeBuffer_Config config = {
126 .width = 0x100,
127 .height = 0x100,
128 .format = 12,
129 .usage = (1ULL << 0) | (1ULL << 1) | (1ULL << 3),
130 };
131 OH_NativeBuffer* buffer = OH_NativeBuffer_Alloc(&config);
132 int32_t size = 10;
133 uint8_t *metadata = new uint8_t(size);
134 OH_NativeBuffer_SetMetadataValue(buffer, OH_HDR_STATIC_METADATA, size, metadata);
135 int32_t res = OH_NativeBuffer_GetMetadataValue(buffer, OH_HDR_STATIC_METADATA, &size, &metadata);
136 napi_create_int32(env, res != NATIVE_ERROR_INVALID_ARGUMENTS, &result);
137 return result;
138 }
139
OH_NativeBuffer_GetMetadataValueFail(napi_env env,napi_callback_info info)140 napi_value OH_NativeBuffer_GetMetadataValueFail(napi_env env, napi_callback_info info)
141 {
142 napi_value result;
143 int32_t size = 10;
144 uint8_t *metadata = new uint8_t(size);
145 int32_t res = OH_NativeBuffer_GetMetadataValue(nullptr, OH_HDR_STATIC_METADATA, &size, &metadata);
146 napi_create_int32(env, res == NATIVE_ERROR_INVALID_ARGUMENTS, &result);
147 return result;
148 }
149
OH_Drawing_RunBufferGlyphsSuccess(napi_env env,napi_callback_info info)150 napi_value OH_Drawing_RunBufferGlyphsSuccess(napi_env env, napi_callback_info info)
151 {
152 napi_value result;
153 OH_Drawing_TextBlobBuilder* textBlobBuilder = OH_Drawing_TextBlobBuilderCreate();
154 OH_Drawing_Font* font = OH_Drawing_FontCreate();
155 int32_t count = 1;
156 float left = 10;
157 float top = 10;
158 float right = 10;
159 float bottom = 10;
160 OH_Drawing_Rect* rect = OH_Drawing_RectCreate(left, top, right, bottom);
161 const OH_Drawing_RunBuffer* rbuff = OH_Drawing_TextBlobBuilderAllocRunPos(textBlobBuilder, font, count, rect);
162 napi_create_int32(env, rbuff->glyphs != nullptr, &result);
163 return result;
164 }
OH_Drawing_RunBufferPosSuccess(napi_env env,napi_callback_info info)165 napi_value OH_Drawing_RunBufferPosSuccess(napi_env env, napi_callback_info info)
166 {
167 napi_value result;
168 OH_Drawing_TextBlobBuilder* textBlobBuilder = OH_Drawing_TextBlobBuilderCreate();
169 OH_Drawing_Font* font = OH_Drawing_FontCreate();
170 int32_t count = 1;
171 float left = 10;
172 float top = 10;
173 float right = 10;
174 float bottom = 10;
175 OH_Drawing_Rect* rect = OH_Drawing_RectCreate(left, top, right, bottom);
176 const OH_Drawing_RunBuffer* rbuff = OH_Drawing_TextBlobBuilderAllocRunPos(textBlobBuilder, font, count, rect);
177 napi_create_int32(env, rbuff->pos != nullptr, &result);
178 return result;
179 }
180
OH_Drawing_RunBufferUtf8textSuccess(napi_env env,napi_callback_info info)181 napi_value OH_Drawing_RunBufferUtf8textSuccess(napi_env env, napi_callback_info info)
182 {
183 napi_value result;
184 OH_Drawing_TextBlobBuilder* textBlobBuilder = OH_Drawing_TextBlobBuilderCreate();
185 OH_Drawing_Font* font = OH_Drawing_FontCreate();
186 const char* str = "HellWorld";
187 OH_Drawing_FontFeatures* fontFeatures = OH_Drawing_FontFeaturesCreate();
188 float textWidth = 10;
189 OH_Drawing_FontMeasureSingleCharacterWithFeatures(font, str, fontFeatures, &textWidth);
190 int32_t count = 1;
191 float left = 10;
192 float top = 10;
193 float right = 10;
194 float bottom = 10;
195 OH_Drawing_Rect* rect = OH_Drawing_RectCreate(left, top, right, bottom);
196 const OH_Drawing_RunBuffer* rbuff = OH_Drawing_TextBlobBuilderAllocRunPos(textBlobBuilder, font, count, rect);
197 napi_create_int32(env, rbuff->utf8text == nullptr, &result);
198 return result;
199 }
OH_Drawing_RunBufferClustersSuccess(napi_env env,napi_callback_info info)200 napi_value OH_Drawing_RunBufferClustersSuccess(napi_env env, napi_callback_info info)
201 {
202 napi_value result;
203 OH_Drawing_TextBlobBuilder* textBlobBuilder = OH_Drawing_TextBlobBuilderCreate();
204 OH_Drawing_Font* font = OH_Drawing_FontCreate();
205 const char* str = "HellWorld";
206 OH_Drawing_FontFeatures* fontFeatures = OH_Drawing_FontFeaturesCreate();
207 float textWidth = 10;
208 OH_Drawing_FontMeasureSingleCharacterWithFeatures(font, str, fontFeatures, &textWidth);
209
210 int32_t count = 1;
211 float left = 10;
212 float top = 10;
213 float right = 10;
214 float bottom = 10;
215 OH_Drawing_Rect* rect = OH_Drawing_RectCreate(left, top, right, bottom);
216 const OH_Drawing_RunBuffer* rbuff = OH_Drawing_TextBlobBuilderAllocRunPos(textBlobBuilder, font, count, rect);
217 napi_create_int32(env, rbuff->clusters == nullptr, &result);
218 return result;
219 }
220
OH_Drawing_SystemFontTypeSuccess(napi_env env,napi_callback_info info)221 napi_value OH_Drawing_SystemFontTypeSuccess(napi_env env, napi_callback_info info)
222 {
223 napi_value result;
224 OH_Drawing_SystemFontType fontType = INSTALLED;
225 OH_Drawing_Array* fullNameArray = OH_Drawing_GetSystemFontFullNamesByType(GENERIC);
226 size_t index = 1;
227 const OH_Drawing_String* pfstr = OH_Drawing_GetSystemFontFullNameByIndex(fullNameArray, index);
228 OH_Drawing_FontDescriptor* pful = OH_Drawing_GetFontDescriptorByFullName(pfstr, fontType);
229 napi_create_int32(env, pful == nullptr, &result);
230 return result;
231 }
232
OH_Drawing_TextUndefinedGlyphDisplayDEFAULT(napi_env env,napi_callback_info info)233 napi_value OH_Drawing_TextUndefinedGlyphDisplayDEFAULT(napi_env env, napi_callback_info info)
234 {
235 napi_value result;
236 OH_Drawing_SetTextUndefinedGlyphDisplay(TEXT_NO_GLYPH_USE_DEFAULT);
237 napi_create_int32(env, true, &result);
238 return result;
239 }
OH_Drawing_TextUndefinedGlyphDisplayTOFU(napi_env env,napi_callback_info info)240 napi_value OH_Drawing_TextUndefinedGlyphDisplayTOFU(napi_env env, napi_callback_info info)
241 {
242 napi_value result;
243 OH_Drawing_SetTextUndefinedGlyphDisplay(TEXT_NO_GLYPH_USE_TOFU);
244 napi_create_int32(env, true, &result);
245 return result;
246 }