Changeset c78a03d in mainline for uspace/lib/gfxfont/test/glyph_bmp.c
- Timestamp:
- 2020-07-21T22:48:59Z (5 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 5592c56
- Parents:
- 703c743
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/gfxfont/test/glyph_bmp.c
r703c743 rc78a03d 27 27 */ 28 28 29 #include <gfx/context.h> 30 #include <gfx/font.h> 29 31 #include <gfx/glyph.h> 32 #include <gfx/glyph_bmp.h> 30 33 #include <pcut/pcut.h> 31 34 … … 34 37 PCUT_TEST_SUITE(glyph_bmp); 35 38 36 PCUT_TEST(dummy) 37 { 39 static errno_t testgc_set_color(void *, gfx_color_t *); 40 static errno_t testgc_fill_rect(void *, gfx_rect_t *); 41 42 static gfx_context_ops_t test_ops = { 43 .set_color = testgc_set_color, 44 .fill_rect = testgc_fill_rect 45 }; 46 47 /** Test opening and closing glyph bitmap */ 48 PCUT_TEST(open_close) 49 { 50 gfx_font_metrics_t fmetrics; 51 gfx_font_t *font; 52 gfx_glyph_metrics_t gmetrics; 53 gfx_glyph_t *glyph; 54 gfx_context_t *gc; 55 gfx_glyph_bmp_t *bmp; 56 errno_t rc; 57 58 rc = gfx_context_new(&test_ops, NULL, &gc); 59 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 60 61 gfx_font_metrics_init(&fmetrics); 62 rc = gfx_font_create(gc, &fmetrics, &font); 63 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 64 65 gfx_glyph_metrics_init(&gmetrics); 66 gmetrics.advance = 1; 67 68 rc = gfx_glyph_create(font, &gmetrics, &glyph); 69 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 70 71 bmp = NULL; 72 73 rc = gfx_glyph_bmp_open(glyph, &bmp); 74 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 75 PCUT_ASSERT_NOT_NULL(bmp); 76 77 gfx_glyph_bmp_close(bmp); 78 79 gfx_glyph_destroy(glyph); 80 81 gfx_font_destroy(font); 82 rc = gfx_context_delete(gc); 83 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 84 } 85 86 /** Test glyph_bmp_save() */ 87 PCUT_TEST(save) 88 { 89 gfx_font_metrics_t fmetrics; 90 gfx_font_t *font; 91 gfx_glyph_metrics_t gmetrics; 92 gfx_glyph_t *glyph; 93 gfx_context_t *gc; 94 gfx_glyph_bmp_t *bmp; 95 errno_t rc; 96 97 rc = gfx_context_new(&test_ops, NULL, &gc); 98 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 99 100 gfx_font_metrics_init(&fmetrics); 101 rc = gfx_font_create(gc, &fmetrics, &font); 102 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 103 104 gfx_glyph_metrics_init(&gmetrics); 105 gmetrics.advance = 1; 106 107 rc = gfx_glyph_create(font, &gmetrics, &glyph); 108 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 109 110 bmp = NULL; 111 112 rc = gfx_glyph_bmp_open(glyph, &bmp); 113 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 114 PCUT_ASSERT_NOT_NULL(bmp); 115 116 /* TODO: Need a test to verify that save actually worked */ 117 rc = gfx_glyph_bmp_save(bmp); 118 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 119 120 gfx_glyph_bmp_close(bmp); 121 122 gfx_glyph_destroy(glyph); 123 124 gfx_font_destroy(font); 125 rc = gfx_context_delete(gc); 126 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 127 } 128 129 /** Test glyph_bmp_getpix() */ 130 PCUT_TEST(getpix) 131 { 132 gfx_font_metrics_t fmetrics; 133 gfx_font_t *font; 134 gfx_glyph_metrics_t gmetrics; 135 gfx_glyph_t *glyph; 136 gfx_context_t *gc; 137 gfx_glyph_bmp_t *bmp; 138 int pix; 139 errno_t rc; 140 141 rc = gfx_context_new(&test_ops, NULL, &gc); 142 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 143 144 gfx_font_metrics_init(&fmetrics); 145 rc = gfx_font_create(gc, &fmetrics, &font); 146 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 147 148 gfx_glyph_metrics_init(&gmetrics); 149 gmetrics.advance = 1; 150 151 rc = gfx_glyph_create(font, &gmetrics, &glyph); 152 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 153 154 bmp = NULL; 155 156 rc = gfx_glyph_bmp_open(glyph, &bmp); 157 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 158 PCUT_ASSERT_NOT_NULL(bmp); 159 160 pix = gfx_glyph_bmp_getpix(bmp, 0, 0); 161 PCUT_ASSERT_INT_EQUALS(0, pix); 162 163 gfx_glyph_bmp_close(bmp); 164 165 gfx_glyph_destroy(glyph); 166 167 gfx_font_destroy(font); 168 rc = gfx_context_delete(gc); 169 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 170 } 171 172 /** Test glyph_bmp_setpix() can flip pixel value both ways */ 173 PCUT_TEST(setpix_flip) 174 { 175 gfx_font_metrics_t fmetrics; 176 gfx_font_t *font; 177 gfx_glyph_metrics_t gmetrics; 178 gfx_glyph_t *glyph; 179 gfx_context_t *gc; 180 gfx_glyph_bmp_t *bmp; 181 int pix; 182 errno_t rc; 183 184 rc = gfx_context_new(&test_ops, NULL, &gc); 185 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 186 187 gfx_font_metrics_init(&fmetrics); 188 rc = gfx_font_create(gc, &fmetrics, &font); 189 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 190 191 gfx_glyph_metrics_init(&gmetrics); 192 gmetrics.advance = 1; 193 194 rc = gfx_glyph_create(font, &gmetrics, &glyph); 195 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 196 197 bmp = NULL; 198 199 rc = gfx_glyph_bmp_open(glyph, &bmp); 200 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 201 PCUT_ASSERT_NOT_NULL(bmp); 202 203 pix = gfx_glyph_bmp_getpix(bmp, 0, 0); 204 PCUT_ASSERT_INT_EQUALS(0, pix); 205 206 rc = gfx_glyph_bmp_setpix(bmp, 0, 0, 1); 207 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 208 209 pix = gfx_glyph_bmp_getpix(bmp, 0, 0); 210 PCUT_ASSERT_INT_EQUALS(1, pix); 211 212 rc = gfx_glyph_bmp_setpix(bmp, 0, 0, 0); 213 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 214 215 pix = gfx_glyph_bmp_getpix(bmp, 0, 0); 216 PCUT_ASSERT_INT_EQUALS(0, pix); 217 218 gfx_glyph_bmp_close(bmp); 219 220 gfx_glyph_destroy(glyph); 221 222 gfx_font_destroy(font); 223 rc = gfx_context_delete(gc); 224 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 225 } 226 227 /** Test glyph_bmp_setpix() properly extends pixel array */ 228 PCUT_TEST(setpix_externd) 229 { 230 gfx_font_metrics_t fmetrics; 231 gfx_font_t *font; 232 gfx_glyph_metrics_t gmetrics; 233 gfx_glyph_t *glyph; 234 gfx_context_t *gc; 235 gfx_glyph_bmp_t *bmp; 236 gfx_coord_t x, y; 237 int pix; 238 errno_t rc; 239 240 rc = gfx_context_new(&test_ops, NULL, &gc); 241 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 242 243 gfx_font_metrics_init(&fmetrics); 244 rc = gfx_font_create(gc, &fmetrics, &font); 245 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 246 247 gfx_glyph_metrics_init(&gmetrics); 248 gmetrics.advance = 1; 249 250 rc = gfx_glyph_create(font, &gmetrics, &glyph); 251 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 252 253 bmp = NULL; 254 255 rc = gfx_glyph_bmp_open(glyph, &bmp); 256 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 257 PCUT_ASSERT_NOT_NULL(bmp); 258 259 /* 260 * Fill the rectangle [0, 0]..[3, 3] with alternating pixel pattern 261 * and then check it. 262 */ 263 264 rc = gfx_glyph_bmp_setpix(bmp, 0, 0, 1); 265 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 266 267 rc = gfx_glyph_bmp_setpix(bmp, 1, 1, 1); 268 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 269 270 rc = gfx_glyph_bmp_setpix(bmp, 2, 0, 1); 271 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 272 273 rc = gfx_glyph_bmp_setpix(bmp, 0, 2, 1); 274 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 275 276 rc = gfx_glyph_bmp_setpix(bmp, 2, 2, 1); 277 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 278 279 for (y = 0; y <= 2; y++) { 280 for (x = 0; x <= 2; x++) { 281 pix = gfx_glyph_bmp_getpix(bmp, x, y); 282 PCUT_ASSERT_INT_EQUALS((x & 1) ^ (y & 1) ^ 1, pix); 283 } 284 } 285 286 gfx_glyph_bmp_close(bmp); 287 288 gfx_glyph_destroy(glyph); 289 290 gfx_font_destroy(font); 291 rc = gfx_context_delete(gc); 292 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 293 } 294 295 static errno_t testgc_set_color(void *arg, gfx_color_t *color) 296 { 297 return EOK; 298 } 299 300 static errno_t testgc_fill_rect(void *arg, gfx_rect_t *rect) 301 { 302 return EOK; 38 303 } 39 304
Note:
See TracChangeset
for help on using the changeset viewer.