Changeset 8a9a41e in mainline for uspace/lib/gfxfont/test/text.c
- Timestamp:
- 2021-10-24T08:28:43Z (4 years ago)
- Children:
- 9ea3a41
- Parents:
- 2ce943a (diff), cd981f2a (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - git-author:
- Erik Kučák <35500848+Riko196@…> (2021-10-24 08:28:43)
- git-committer:
- GitHub <noreply@…> (2021-10-24 08:28:43)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/gfxfont/test/text.c
r2ce943a r8a9a41e 30 30 #include <gfx/context.h> 31 31 #include <gfx/font.h> 32 #include <gfx/glyph.h> 32 33 #include <gfx/text.h> 33 34 #include <gfx/typeface.h> … … 140 141 rc = gfx_puttext(font, &pos, &fmt, "Hello world!"); 141 142 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 143 144 gfx_font_close(font); 145 gfx_typeface_destroy(tface); 146 gfx_color_delete(color); 147 148 rc = gfx_context_delete(gc); 149 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 150 } 151 152 /** gfx_text_start_pos() correctly computes text start position */ 153 PCUT_TEST(text_start_pos) 154 { 155 gfx_font_props_t props; 156 gfx_font_metrics_t metrics; 157 gfx_typeface_t *tface; 158 gfx_font_t *font; 159 gfx_context_t *gc; 160 gfx_color_t *color; 161 gfx_text_fmt_t fmt; 162 gfx_coord2_t pos; 163 test_gc_t tgc; 164 errno_t rc; 165 166 rc = gfx_context_new(&test_ops, (void *)&tgc, &gc); 167 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 168 169 rc = gfx_color_new_rgb_i16(0, 0, 0, &color); 170 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 171 172 rc = gfx_typeface_create(gc, &tface); 173 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 174 175 gfx_font_props_init(&props); 176 gfx_font_metrics_init(&metrics); 177 metrics.ascent = 10; // XXX 178 metrics.descent = 10; // XXX 179 rc = gfx_font_create(tface, &props, &metrics, &font); 180 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 181 182 gfx_text_fmt_init(&fmt); 183 fmt.color = color; 184 pos.x = 0; 185 pos.y = 0; 186 187 rc = gfx_puttext(font, &pos, &fmt, "Hello world!"); 188 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 189 190 gfx_font_close(font); 191 gfx_typeface_destroy(tface); 192 gfx_color_delete(color); 193 194 rc = gfx_context_delete(gc); 195 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 196 } 197 198 /** gfx_text_find_pos() finds position in text */ 199 PCUT_TEST(text_find_pos) 200 { 201 gfx_font_props_t props; 202 gfx_font_metrics_t metrics; 203 gfx_typeface_t *tface; 204 gfx_font_t *font; 205 gfx_glyph_metrics_t gmetrics; 206 gfx_glyph_t *glyph1; 207 gfx_glyph_t *glyph2; 208 gfx_context_t *gc; 209 gfx_text_fmt_t fmt; 210 gfx_coord2_t anchor; 211 gfx_coord2_t fpos; 212 size_t off; 213 test_gc_t tgc; 214 errno_t rc; 215 216 rc = gfx_context_new(&test_ops, (void *)&tgc, &gc); 217 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 218 219 rc = gfx_typeface_create(gc, &tface); 220 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 221 222 gfx_font_props_init(&props); 223 gfx_font_metrics_init(&metrics); 224 rc = gfx_font_create(tface, &props, &metrics, &font); 225 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 226 227 /* Need to create some glyphs with metrics */ 228 gfx_glyph_metrics_init(&gmetrics); 229 gmetrics.advance = 10; 230 231 rc = gfx_glyph_create(font, &gmetrics, &glyph1); 232 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 233 234 rc = gfx_glyph_set_pattern(glyph1, "A"); 235 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 236 237 gfx_glyph_metrics_init(&gmetrics); 238 gmetrics.advance = 1; 239 240 rc = gfx_glyph_create(font, &gmetrics, &glyph2); 241 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 242 243 rc = gfx_glyph_set_pattern(glyph2, "i"); 244 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 245 246 gfx_text_fmt_init(&fmt); 247 anchor.x = 10; 248 anchor.y = 0; 249 250 fpos.x = 9; 251 fpos.y = 0; 252 off = gfx_text_find_pos(font, &anchor, &fmt, "Aii", &fpos); 253 PCUT_ASSERT_INT_EQUALS(0, off); 254 255 fpos.x = 10; 256 fpos.y = 0; 257 off = gfx_text_find_pos(font, &anchor, &fmt, "Aii", &fpos); 258 PCUT_ASSERT_INT_EQUALS(0, off); 259 260 fpos.x = 11; 261 fpos.y = 0; 262 off = gfx_text_find_pos(font, &anchor, &fmt, "Aii", &fpos); 263 PCUT_ASSERT_INT_EQUALS(0, off); 264 265 fpos.x = 19; 266 fpos.y = 0; 267 off = gfx_text_find_pos(font, &anchor, &fmt, "Aii", &fpos); 268 PCUT_ASSERT_INT_EQUALS(1, off); 269 270 fpos.x = 20; 271 fpos.y = 0; 272 off = gfx_text_find_pos(font, &anchor, &fmt, "Aii", &fpos); 273 PCUT_ASSERT_INT_EQUALS(2, off); 274 275 fpos.x = 21; 276 fpos.y = 0; 277 off = gfx_text_find_pos(font, &anchor, &fmt, "Aii", &fpos); 278 PCUT_ASSERT_INT_EQUALS(3, off); 279 280 fpos.x = 22; 281 fpos.y = 0; 282 off = gfx_text_find_pos(font, &anchor, &fmt, "Aii", &fpos); 283 PCUT_ASSERT_INT_EQUALS(3, off); 284 285 gfx_glyph_destroy(glyph1); 286 gfx_glyph_destroy(glyph2); 287 288 gfx_font_close(font); 289 gfx_typeface_destroy(tface); 290 291 rc = gfx_context_delete(gc); 292 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 293 } 294 295 /** gfx_text_find_pos() finds position in text in text mode */ 296 PCUT_TEST(text_find_pos_text) 297 { 298 gfx_typeface_t *tface; 299 gfx_font_t *font; 300 gfx_context_t *gc; 301 test_gc_t tgc; 302 size_t off; 303 gfx_text_fmt_t fmt; 304 gfx_coord2_t anchor; 305 gfx_coord2_t fpos; 306 errno_t rc; 307 308 rc = gfx_context_new(&test_ops, (void *)&tgc, &gc); 309 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 310 311 rc = gfx_typeface_create(gc, &tface); 312 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 313 314 rc = gfx_font_create_textmode(tface, &font); 315 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 316 317 anchor.x = 10; 318 anchor.y = 0; 319 gfx_text_fmt_init(&fmt); 320 321 fpos.x = 9; 322 fpos.y = 0; 323 off = gfx_text_find_pos(font, &anchor, &fmt, "Abc", &fpos); 324 PCUT_ASSERT_INT_EQUALS(0, off); 325 326 fpos.x = 10; 327 fpos.y = 0; 328 off = gfx_text_find_pos(font, &anchor, &fmt, "Abc", &fpos); 329 PCUT_ASSERT_INT_EQUALS(0, off); 330 331 fpos.x = 11; 332 fpos.y = 0; 333 off = gfx_text_find_pos(font, &anchor, &fmt, "Abc", &fpos); 334 PCUT_ASSERT_INT_EQUALS(1, off); 335 336 fpos.x = 12; 337 fpos.y = 0; 338 off = gfx_text_find_pos(font, &anchor, &fmt, "Abc", &fpos); 339 PCUT_ASSERT_INT_EQUALS(2, off); 340 341 fpos.x = 13; 342 fpos.y = 0; 343 off = gfx_text_find_pos(font, &anchor, &fmt, "Abc", &fpos); 344 PCUT_ASSERT_INT_EQUALS(3, off); 345 346 fpos.x = 14; 347 fpos.y = 0; 348 off = gfx_text_find_pos(font, &anchor, &fmt, "Abc", &fpos); 349 PCUT_ASSERT_INT_EQUALS(3, off); 350 351 gfx_font_close(font); 352 gfx_typeface_destroy(tface); 353 354 rc = gfx_context_delete(gc); 355 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 356 } 357 358 /** gfx_text_cont() produces correct continuation parameters */ 359 PCUT_TEST(text_cont) 360 { 361 gfx_typeface_t *tface; 362 gfx_font_t *font; 363 gfx_context_t *gc; 364 gfx_color_t *color; 365 test_gc_t tgc; 366 gfx_text_fmt_t fmt; 367 gfx_coord2_t anchor; 368 gfx_coord2_t cpos; 369 gfx_text_fmt_t cfmt; 370 errno_t rc; 371 372 rc = gfx_context_new(&test_ops, (void *)&tgc, &gc); 373 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 374 375 rc = gfx_typeface_create(gc, &tface); 376 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 377 378 rc = gfx_font_create_textmode(tface, &font); 379 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 380 381 rc = gfx_color_new_rgb_i16(0, 0, 0, &color); 382 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 383 384 anchor.x = 10; 385 anchor.y = 20; 386 gfx_text_fmt_init(&fmt); 387 fmt.color = color; 388 389 gfx_text_cont(font, &anchor, &fmt, "Abc", &cpos, &cfmt); 390 391 PCUT_ASSERT_INT_EQUALS(13, cpos.x); 392 PCUT_ASSERT_INT_EQUALS(20, cpos.y); 393 PCUT_ASSERT_EQUALS(fmt.color, cfmt.color); 394 PCUT_ASSERT_EQUALS(gfx_halign_left, cfmt.halign); 395 PCUT_ASSERT_EQUALS(gfx_valign_baseline, cfmt.valign); 396 397 gfx_font_close(font); 398 gfx_typeface_destroy(tface); 399 gfx_color_delete(color); 400 401 rc = gfx_context_delete(gc); 402 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 403 } 404 405 /** gfx_text_rect() computes bounding rectangle */ 406 PCUT_TEST(text_rect) 407 { 408 gfx_typeface_t *tface; 409 gfx_font_t *font; 410 gfx_context_t *gc; 411 gfx_color_t *color; 412 test_gc_t tgc; 413 gfx_text_fmt_t fmt; 414 gfx_coord2_t anchor; 415 gfx_rect_t rect; 416 errno_t rc; 417 418 rc = gfx_context_new(&test_ops, (void *)&tgc, &gc); 419 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 420 421 rc = gfx_typeface_create(gc, &tface); 422 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 423 424 rc = gfx_font_create_textmode(tface, &font); 425 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 426 427 rc = gfx_color_new_rgb_i16(0, 0, 0, &color); 428 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 429 430 anchor.x = 10; 431 anchor.y = 20; 432 gfx_text_fmt_init(&fmt); 433 fmt.color = color; 434 435 gfx_text_rect(font, &anchor, &fmt, "Abc", &rect); 436 437 PCUT_ASSERT_INT_EQUALS(10, rect.p0.x); 438 PCUT_ASSERT_INT_EQUALS(20, rect.p0.y); 439 PCUT_ASSERT_INT_EQUALS(13, rect.p1.x); 440 PCUT_ASSERT_INT_EQUALS(21, rect.p1.y); 142 441 143 442 gfx_font_close(font);
Note:
See TracChangeset
for help on using the changeset viewer.