diff options
Diffstat (limited to 'gunit_tests/patternDraw.cpp')
| -rw-r--r-- | gunit_tests/patternDraw.cpp | 363 |
1 files changed, 344 insertions, 19 deletions
diff --git a/gunit_tests/patternDraw.cpp b/gunit_tests/patternDraw.cpp index 101869c..71145ae 100644 --- a/gunit_tests/patternDraw.cpp +++ b/gunit_tests/patternDraw.cpp @@ -1,4 +1,6 @@ #include "drawTestBase.h" +#include "unitTest.h" + class PatternDrawTest : public DrawTestBase { @@ -14,6 +16,20 @@ class PatternDrawTest : public DrawTestBase { vkvg_surface_destroy(imgSurf); DrawTestBase::TearDown(); } + VkvgPattern CreateLinearPattern () { + VkvgPattern pat = vkvg_pattern_create_linear(0, 0, 200, 0); + vkvg_pattern_add_color_stop(pat, 0.0, 1, 0, 0, 1); + vkvg_pattern_add_color_stop(pat, 0.5, 0, 1, 0, 1); + vkvg_pattern_add_color_stop(pat, 1.0, 0, 0, 1, 1); + return pat; + } + VkvgPattern CreateRadialPattern () { + VkvgPattern pat = vkvg_pattern_create_radial(150.0f, 150.0f, 10.f, 170, 170, 130.0f); + vkvg_pattern_add_color_stop(pat, 0.0, 1, 0, 0, 1); + vkvg_pattern_add_color_stop(pat, 0.5, 0, 1, 0, 1); + vkvg_pattern_add_color_stop(pat, 1.0, 0, 0, 1, 1); + return pat; + } }; TEST_F(PatternDrawTest, References) { EXPECT_EQ(VKVG_STATUS_NULL_POINTER, vkvg_pattern_status(NULL)); @@ -33,41 +49,119 @@ TEST_F(PatternDrawTest, References) { vkvg_pattern_destroy(pat); EXPECT_EQ(1, vkvg_pattern_get_reference_count(pat)); vkvg_pattern_destroy(pat); - // EXPECT_EQ(NULL, pat); + + pat = vkvg_pattern_create_radial(0, 0, 0, 0, 0, 0); + EXPECT_EQ(VKVG_STATUS_SUCCESS, vkvg_pattern_status(pat)); + EXPECT_EQ(1, vkvg_pattern_get_reference_count(pat)); + vkvg_pattern_destroy(pat); } TEST_F(PatternDrawTest, CreateSetGet) { VkvgContext ctx = vkvg_create(surf); - vkvg_paint(ctx); - VkvgPattern src = vkvg_get_source (ctx);//get default pattern - VkvgPattern pat = vkvg_pattern_create_for_surface(NULL); + EXPECT_NO_FATAL_FAILURE(vkvg_set_source(ctx, NULL)); + EXPECT_EQ(VKVG_STATUS_SUCCESS, vkvg_status(ctx)); + + VkvgPattern pat = vkvg_pattern_create_linear(0, 0, 200, 0); + + EXPECT_EQ(VKVG_PATTERN_TYPE_LINEAR, vkvg_pattern_get_type(pat)); + EXPECT_EQ(VKVG_EXTEND_NONE, vkvg_pattern_get_extend(pat)); + EXPECT_EQ(VKVG_FILTER_FAST, vkvg_pattern_get_filter(pat)); + + vkvg_pattern_add_color_stop(pat, 0, 1, 0, 0, 1); + vkvg_pattern_add_color_stop(pat, 0.5, 0, 1, 0, 1); + vkvg_pattern_add_color_stop(pat, 1.0, 0, 0, 1, 1); + + uint32_t ccpt = 0; + EXPECT_EQ(VKVG_STATUS_NULL_POINTER, vkvg_pattern_get_color_stop_count(NULL, &ccpt)); + EXPECT_EQ(VKVG_STATUS_SUCCESS, vkvg_pattern_get_color_stop_count(pat, &ccpt)); + EXPECT_EQ(3, ccpt); + + float r,g,b,a,offset; + EXPECT_EQ(VKVG_STATUS_SUCCESS, vkvg_pattern_get_color_stop_rgba(pat, 0, &offset, &r, &g, &b, &a)); + EXPECT_EQ(0, offset); + EXPECT_EQ(1, r); EXPECT_EQ(0, g); EXPECT_EQ(0, b); EXPECT_EQ(1, a); + EXPECT_EQ(VKVG_STATUS_SUCCESS, vkvg_pattern_get_color_stop_rgba(pat, 1, &offset, &r, &g, &b, &a)); + EXPECT_EQ(0.5, offset); + EXPECT_EQ(0, r); EXPECT_EQ(1, g); EXPECT_EQ(0, b); EXPECT_EQ(1, a); + EXPECT_EQ(VKVG_STATUS_SUCCESS, vkvg_pattern_get_color_stop_rgba(pat, 2, &offset, &r, &g, &b, &a)); + EXPECT_EQ(0, r); EXPECT_EQ(0, g); EXPECT_EQ(1, b); EXPECT_EQ(1, a); + EXPECT_EQ(1, offset); + EXPECT_EQ(VKVG_STATUS_INVALID_INDEX, vkvg_pattern_get_color_stop_rgba(pat, 3, &offset, &r, &g, &b, &a)); + + vkvg_matrix_t mat = {0}; + vkvg_pattern_get_matrix(pat, &mat); + CHECK_MAT(1, 0, 0, 1, 0, 0); + vkvg_matrix_translate(&mat, 100, 50); + vkvg_pattern_set_matrix(pat, &mat); + vkvg_pattern_get_matrix(pat, &mat); + CHECK_MAT(1, 0, 0, 1, 100, 50); + vkvg_set_source(ctx, pat); + EXPECT_EQ(VKVG_STATUS_SUCCESS, vkvg_status(ctx)); EXPECT_EQ(2, vkvg_pattern_get_reference_count(pat)); - src = vkvg_get_source (ctx); + vkvg_save(ctx); EXPECT_EQ(3, vkvg_pattern_get_reference_count(pat)); - vkvg_pattern_destroy(pat); + vkvg_restore(ctx); + EXPECT_EQ(2, vkvg_pattern_get_reference_count(pat)); + + pat = vkvg_get_source(ctx); + EXPECT_EQ(VKVG_STATUS_SUCCESS, vkvg_pattern_status(pat)); + EXPECT_EQ(VKVG_PATTERN_TYPE_LINEAR, vkvg_pattern_get_type(pat)); + EXPECT_EQ(3, vkvg_pattern_get_reference_count(pat)); + + vkvg_set_source_rgb(ctx, 1, 0, 0); EXPECT_EQ(2, vkvg_pattern_get_reference_count(pat)); + vkvg_pattern_destroy(pat); - EXPECT_EQ(1, vkvg_pattern_get_reference_count(pat)); vkvg_pattern_destroy(pat); - EXPECT_EQ(0, vkvg_pattern_get_reference_count(pat)); - EXPECT_EQ(0, vkvg_pattern_get_reference_count(src)); - EXPECT_EQ(VKVG_STATUS_NULL_POINTER, vkvg_pattern_status(pat)); - EXPECT_EQ(VKVG_STATUS_NULL_POINTER, vkvg_pattern_status(src)); - src = vkvg_get_source (ctx); + pat = vkvg_pattern_create_radial(250.0f, 250.0f, 0, 300, 300, 260.0f); + EXPECT_EQ(VKVG_STATUS_SUCCESS, vkvg_pattern_status(pat)); + EXPECT_EQ(VKVG_PATTERN_TYPE_RADIAL, vkvg_pattern_get_type(pat)); + EXPECT_EQ(VKVG_EXTEND_NONE, vkvg_pattern_get_extend(pat)); + EXPECT_EQ(VKVG_FILTER_FAST, vkvg_pattern_get_filter(pat)); - /*pat = vkvg_pattern_create_linear(0, 0, 0, 0); - src = vkvg_get_source (ctx); - EXPECT_EQ(3, vkvg_pattern_get_reference_count(pat));*/ + vkvg_pattern_add_color_stop(pat, 0.0, 1, 0, 0, 1); + vkvg_pattern_add_color_stop(pat, 0.5, 0, 1, 0, 1); + vkvg_pattern_add_color_stop(pat, 1.0, 0, 0, 0, 1); + EXPECT_EQ(VKVG_STATUS_SUCCESS, vkvg_pattern_get_color_stop_count(pat, &ccpt)); + EXPECT_EQ(3, ccpt); + EXPECT_EQ(VKVG_STATUS_SUCCESS, vkvg_pattern_get_color_stop_rgba(pat, 0, &offset, &r, &g, &b, &a)); + EXPECT_EQ(0, offset); + EXPECT_EQ(1, r); EXPECT_EQ(0, g); EXPECT_EQ(0, b); EXPECT_EQ(1, a); + EXPECT_EQ(VKVG_STATUS_SUCCESS, vkvg_pattern_get_color_stop_rgba(pat, 1, &offset, &r, &g, &b, &a)); + EXPECT_EQ(0.5, offset); + EXPECT_EQ(0, r); EXPECT_EQ(1, g); EXPECT_EQ(0, b); EXPECT_EQ(1, a); + EXPECT_EQ(VKVG_STATUS_SUCCESS, vkvg_pattern_get_color_stop_rgba(pat, 2, &offset, &r, &g, &b, &a)); + EXPECT_EQ(0, r); EXPECT_EQ(0, g); EXPECT_EQ(0, b); EXPECT_EQ(1, a); + EXPECT_EQ(1, offset); + EXPECT_EQ(VKVG_STATUS_INVALID_INDEX, vkvg_pattern_get_color_stop_rgba(pat, 3, &offset, &r, &g, &b, &a)); + vkvg_set_source(ctx, pat); + EXPECT_EQ(VKVG_STATUS_SUCCESS, vkvg_status(ctx)); + EXPECT_EQ(2, vkvg_pattern_get_reference_count(pat)); + vkvg_save(ctx); + EXPECT_EQ(3, vkvg_pattern_get_reference_count(pat)); + vkvg_restore(ctx); + EXPECT_EQ(2, vkvg_pattern_get_reference_count(pat)); + + pat = vkvg_get_source(ctx); + EXPECT_EQ(VKVG_STATUS_SUCCESS, vkvg_pattern_status(pat)); + EXPECT_EQ(VKVG_PATTERN_TYPE_RADIAL, vkvg_pattern_get_type(pat)); + EXPECT_EQ(3, vkvg_pattern_get_reference_count(pat)); + + vkvg_set_source_rgb(ctx, 1, 0, 0); + EXPECT_EQ(2, vkvg_pattern_get_reference_count(pat)); + + vkvg_pattern_destroy(pat); + vkvg_pattern_destroy(pat); vkvg_destroy(ctx); } -TEST_F(PatternDrawTest, PaintPattern) { +TEST_F(PatternDrawTest, PaintImgPattern) { VkvgContext ctx = vkvg_create(surf); VkvgPattern pat = vkvg_pattern_create_for_surface(imgSurf); @@ -83,7 +177,60 @@ TEST_F(PatternDrawTest, PaintPattern) { compareWithRefImage(); } -TEST_F(PatternDrawTest, PaintPatternRepeat) { +TEST_F(PatternDrawTest, FillImgPattern) { + + VkvgContext ctx = vkvg_create(surf); + VkvgPattern pat = vkvg_pattern_create_for_surface(imgSurf); + vkvg_rectangle(ctx, 70, 70, 200, 160); + vkvg_set_source(ctx, pat); + vkvg_fill(ctx); + vkvg_pattern_destroy(pat); + vkvg_destroy(ctx); + + compareWithRefImage(); +} +TEST_F(PatternDrawTest, FillImgPatternTransformed) { + + VkvgContext ctx = vkvg_create(surf); + VkvgPattern pat = vkvg_pattern_create_for_surface(imgSurf); + vkvg_rotate(ctx, 0.3f); + vkvg_rectangle(ctx, 50, 50, 200, 160); + vkvg_set_source(ctx, pat); + vkvg_fill(ctx); + vkvg_pattern_destroy(pat); + vkvg_destroy(ctx); + + compareWithRefImage(); +} +TEST_F(PatternDrawTest, FillImgTransformedPattern) { + + VkvgContext ctx = vkvg_create(surf); + VkvgPattern pat = vkvg_pattern_create_for_surface(imgSurf); + vkvg_matrix_t mat = {0}; + vkvg_matrix_init_rotate(&mat, 0.3f); + vkvg_pattern_set_matrix(pat, &mat); + vkvg_rectangle(ctx, 50, 50, 200, 160); + vkvg_set_source(ctx, pat); + vkvg_fill(ctx); + vkvg_pattern_destroy(pat); + vkvg_destroy(ctx); + + compareWithRefImage(); +} +TEST_F(PatternDrawTest, StrokeImgPattern) { + + VkvgContext ctx = vkvg_create(surf); + VkvgPattern pat = vkvg_pattern_create_for_surface(imgSurf); + vkvg_set_line_width(ctx, 20); + vkvg_rectangle(ctx, 50, 50, 200, 160); + vkvg_set_source(ctx, pat); + vkvg_stroke(ctx); + vkvg_pattern_destroy(pat); + vkvg_destroy(ctx); + + compareWithRefImage(); +} +TEST_F(PatternDrawTest, PaintImgPatternRepeat) { VkvgContext ctx = vkvg_create(surf); VkvgPattern pat = vkvg_pattern_create_for_surface(imgSurf); vkvg_pattern_set_extend(pat, VKVG_EXTEND_REPEAT); @@ -94,7 +241,7 @@ TEST_F(PatternDrawTest, PaintPatternRepeat) { compareWithRefImage(); } -TEST_F(PatternDrawTest, PaintPatternRepeatScaled) { +TEST_F(PatternDrawTest, PaintImgPatternRepeatScaled) { VkvgContext ctx = vkvg_create(surf); vkvg_scale(ctx, 0.2f, 0.2f); VkvgPattern pat = vkvg_pattern_create_for_surface(imgSurf); @@ -106,7 +253,7 @@ TEST_F(PatternDrawTest, PaintPatternRepeatScaled) { compareWithRefImage(); } -TEST_F(PatternDrawTest, PaintPatternPad) { +TEST_F(PatternDrawTest, PaintImgPatternPad) { VkvgContext ctx = vkvg_create(surf); VkvgPattern pat = vkvg_pattern_create_for_surface(imgSurf); vkvg_pattern_set_extend(pat, VKVG_EXTEND_PAD); @@ -117,3 +264,181 @@ TEST_F(PatternDrawTest, PaintPatternPad) { compareWithRefImage(); } +TEST_F(PatternDrawTest, PaintLinearPattern) { + + VkvgContext ctx = vkvg_create(surf); + VkvgPattern pat = CreateLinearPattern(); + vkvg_set_source(ctx, pat); + vkvg_paint(ctx); + vkvg_pattern_destroy(pat); + vkvg_destroy(ctx); + + compareWithRefImage(); +} +TEST_F(PatternDrawTest, FillLinearPatternTransformed) { + + VkvgContext ctx = vkvg_create(surf); + VkvgPattern pat = CreateLinearPattern(); + vkvg_rotate(ctx, 0.3f); + vkvg_rectangle(ctx, 50, 50, 200, 160); + vkvg_set_source(ctx, pat); + vkvg_fill(ctx); + vkvg_pattern_destroy(pat); + vkvg_destroy(ctx); + + compareWithRefImage(); +} +TEST_F(PatternDrawTest, FillLinearTransformedPattern) { + + VkvgContext ctx = vkvg_create(surf); + VkvgPattern pat = CreateLinearPattern(); + vkvg_matrix_t mat = {0}; + vkvg_matrix_init_rotate(&mat, 0.3f); + vkvg_pattern_set_matrix(pat, &mat); + vkvg_rectangle(ctx, 50, 50, 200, 160); + vkvg_set_source(ctx, pat); + vkvg_fill(ctx); + vkvg_pattern_destroy(pat); + vkvg_destroy(ctx); + + compareWithRefImage(); +} +TEST_F(PatternDrawTest, PaintLinearPatternRepeat) { + VkvgContext ctx = vkvg_create(surf); + VkvgPattern pat = CreateLinearPattern(); + vkvg_pattern_set_extend(pat, VKVG_EXTEND_REPEAT); + vkvg_set_source(ctx, pat); + vkvg_paint(ctx); + vkvg_pattern_destroy(pat); + vkvg_destroy(ctx); + + compareWithRefImage(); +} +TEST_F(PatternDrawTest, PaintLinearPatternRepeatScaled) { + VkvgContext ctx = vkvg_create(surf); + vkvg_scale(ctx, 0.2f, 0.2f); + VkvgPattern pat = CreateLinearPattern(); + vkvg_pattern_set_extend(pat, VKVG_EXTEND_REPEAT); + vkvg_set_source(ctx, pat); + vkvg_paint(ctx); + vkvg_pattern_destroy(pat); + vkvg_destroy(ctx); + + compareWithRefImage(); +} +TEST_F(PatternDrawTest, PaintLinearPatternPad) { + VkvgContext ctx = vkvg_create(surf); + VkvgPattern pat = CreateLinearPattern(); + vkvg_pattern_set_extend(pat, VKVG_EXTEND_PAD); + vkvg_set_source(ctx, pat); + vkvg_paint(ctx); + vkvg_pattern_destroy(pat); + vkvg_destroy(ctx); + + compareWithRefImage(); +} +TEST_F(PatternDrawTest, PaintRadialPattern) { + + VkvgContext ctx = vkvg_create(surf); + VkvgPattern pat = CreateRadialPattern(); + vkvg_set_source(ctx, pat); + vkvg_paint(ctx); + vkvg_pattern_destroy(pat); + vkvg_destroy(ctx); + + compareWithRefImage(); +} +TEST_F(PatternDrawTest, FillRadialPatternTransformed) { + + VkvgContext ctx = vkvg_create(surf); + VkvgPattern pat = CreateRadialPattern(); + vkvg_rotate(ctx, 0.3f); + vkvg_rectangle(ctx, 50, 50, 200, 160); + vkvg_set_source(ctx, pat); + vkvg_fill(ctx); + vkvg_pattern_destroy(pat); + vkvg_destroy(ctx); + + compareWithRefImage(); +} +TEST_F(PatternDrawTest, FillRadialTransformedPattern) { + + VkvgContext ctx = vkvg_create(surf); + VkvgPattern pat = CreateRadialPattern(); + vkvg_matrix_t mat = {0}; + vkvg_matrix_init_rotate(&mat, 0.3f); + vkvg_pattern_set_matrix(pat, &mat); + vkvg_rectangle(ctx, 50, 50, 200, 160); + vkvg_set_source(ctx, pat); + vkvg_fill(ctx); + vkvg_pattern_destroy(pat); + vkvg_destroy(ctx); + + compareWithRefImage(); +} +TEST_F(PatternDrawTest, PaintRadialPatternRepeat) { + VkvgContext ctx = vkvg_create(surf); + VkvgPattern pat = CreateRadialPattern(); + vkvg_pattern_set_extend(pat, VKVG_EXTEND_REPEAT); + vkvg_set_source(ctx, pat); + vkvg_paint(ctx); + vkvg_pattern_destroy(pat); + vkvg_destroy(ctx); + + compareWithRefImage(); +} +TEST_F(PatternDrawTest, PaintRadialPatternRepeatScaled) { + VkvgContext ctx = vkvg_create(surf); + vkvg_scale(ctx, 0.2f, 0.2f); + VkvgPattern pat = CreateRadialPattern(); + vkvg_pattern_set_extend(pat, VKVG_EXTEND_REPEAT); + vkvg_set_source(ctx, pat); + vkvg_paint(ctx); + vkvg_pattern_destroy(pat); + vkvg_destroy(ctx); + + compareWithRefImage(); +} +TEST_F(PatternDrawTest, PaintRadialPatternPad) { + VkvgContext ctx = vkvg_create(surf); + VkvgPattern pat = CreateRadialPattern(); + vkvg_pattern_set_extend(pat, VKVG_EXTEND_PAD); + vkvg_set_source(ctx, pat); + vkvg_paint(ctx); + vkvg_pattern_destroy(pat); + vkvg_destroy(ctx); + + compareWithRefImage(); +} +TEST_F(PatternDrawTest, PaintLinearPatternTransformed) { + + VkvgContext ctx = vkvg_create(surf); + VkvgPattern pat = CreateLinearPattern(); + vkvg_matrix_t mat = {0}; + vkvg_matrix_init_rotate(&mat, 0.3f); + vkvg_matrix_translate(&mat, -20, -20); + vkvg_matrix_scale(&mat, 0.5f, 0.5f); + vkvg_pattern_set_matrix(pat, &mat); + vkvg_set_source(ctx, pat); + vkvg_paint(ctx); + vkvg_pattern_destroy(pat); + vkvg_destroy(ctx); + + compareWithRefImage(); +} +TEST_F(PatternDrawTest, PaintRadialPatternTransformed) { + + VkvgContext ctx = vkvg_create(surf); + VkvgPattern pat = CreateRadialPattern(); + vkvg_matrix_t mat = {0}; + vkvg_matrix_init_rotate(&mat, 0.3f); + vkvg_matrix_translate(&mat, -20, -20); + vkvg_matrix_scale(&mat, 0.5f, 0.5f); + vkvg_pattern_set_matrix(pat, &mat); + vkvg_set_source(ctx, pat); + vkvg_paint(ctx); + vkvg_pattern_destroy(pat); + vkvg_destroy(ctx); + + compareWithRefImage(); +}
\ No newline at end of file |