Changes in uspace/lib/gfxfont/test/text.c [9eb8d12:7470d97] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/gfxfont/test/text.c
r9eb8d12 r7470d97 30 30 #include <gfx/context.h> 31 31 #include <gfx/font.h> 32 #include <gfx/glyph.h>33 32 #include <gfx/text.h> 34 33 #include <gfx/typeface.h> … … 141 140 rc = gfx_puttext(font, &pos, &fmt, "Hello world!"); 142 141 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; // XXX178 metrics.descent = 10; // XXX179 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);441 142 442 143 gfx_font_close(font);
Note:
See TracChangeset
for help on using the changeset viewer.