[PATCH] d2d1/tests: Some tests for GetRect() and GetRoundedRect()

Nikolay Sivov nsivov at codeweavers.com
Tue Nov 8 08:05:15 CST 2016


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/d2d1/tests/d2d1.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 88 insertions(+), 1 deletion(-)

diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c
index 721afa4..70a1e43 100644
--- a/dlls/d2d1/tests/d2d1.c
+++ b/dlls/d2d1/tests/d2d1.c
@@ -55,6 +55,14 @@ static void set_rect(D2D1_RECT_F *rect, float left, float top, float right, floa
     rect->bottom = bottom;
 }
 
+static void set_rounded_rect(D2D1_ROUNDED_RECT *rect, float left, float top, float right, float bottom,
+        float radius_x, float radius_y)
+{
+    set_rect(&rect->rect, left, top, right, bottom);
+    rect->radiusX = radius_x;
+    rect->radiusY = radius_y;
+}
+
 static void set_rect_u(D2D1_RECT_U *rect, UINT32 left, UINT32 top, UINT32 right, UINT32 bottom)
 {
     rect->left = left;
@@ -1752,15 +1760,43 @@ static void test_path_geometry(void)
 static void test_rectangle_geometry(void)
 {
     ID2D1RectangleGeometry *geometry;
+    D2D1_RECT_F rect, rect2;
     ID2D1Factory *factory;
     D2D1_POINT_2F point;
-    D2D1_RECT_F rect;
     BOOL contains;
     HRESULT hr;
 
     hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &IID_ID2D1Factory, NULL, (void **)&factory);
     ok(SUCCEEDED(hr), "Failed to create factory, hr %#x.\n", hr);
 
+    set_rect(&rect, 0.0f, 0.0f, 0.0f, 0.0f);
+    hr = ID2D1Factory_CreateRectangleGeometry(factory, &rect, &geometry);
+    ok(SUCCEEDED(hr), "Failed to create geometry, hr %#x.\n", hr);
+    ID2D1RectangleGeometry_GetRect(geometry, &rect2);
+    ok(!memcmp(&rect, &rect2, sizeof(rect)), "Got wrong rectangle.\n");
+    ID2D1RectangleGeometry_Release(geometry);
+
+    set_rect(&rect, 50.0f, 0.0f, 40.0f, 100.0f);
+    hr = ID2D1Factory_CreateRectangleGeometry(factory, &rect, &geometry);
+    ok(SUCCEEDED(hr), "Failed to create geometry, hr %#x.\n", hr);
+    ID2D1RectangleGeometry_GetRect(geometry, &rect2);
+    ok(!memcmp(&rect, &rect2, sizeof(rect)), "Got wrong rectangle.\n");
+    ID2D1RectangleGeometry_Release(geometry);
+
+    set_rect(&rect, 0.0f, 100.0f, 40.0f, 50.0f);
+    hr = ID2D1Factory_CreateRectangleGeometry(factory, &rect, &geometry);
+    ok(SUCCEEDED(hr), "Failed to create geometry, hr %#x.\n", hr);
+    ID2D1RectangleGeometry_GetRect(geometry, &rect2);
+    ok(!memcmp(&rect, &rect2, sizeof(rect)), "Got wrong rectangle.\n");
+    ID2D1RectangleGeometry_Release(geometry);
+
+    set_rect(&rect, 50.0f, 100.0f, 40.0f, 50.0f);
+    hr = ID2D1Factory_CreateRectangleGeometry(factory, &rect, &geometry);
+    ok(SUCCEEDED(hr), "Failed to create geometry, hr %#x.\n", hr);
+    ID2D1RectangleGeometry_GetRect(geometry, &rect2);
+    ok(!memcmp(&rect, &rect2, sizeof(rect)), "Got wrong rectangle.\n");
+    ID2D1RectangleGeometry_Release(geometry);
+
     set_rect(&rect, 0.0f, 0.0f, 10.0f, 20.0f);
     hr = ID2D1Factory_CreateRectangleGeometry(factory, &rect, &geometry);
     ok(SUCCEEDED(hr), "Failed to create geometry, hr %#x.\n", hr);
@@ -1809,6 +1845,56 @@ static void test_rectangle_geometry(void)
     ID2D1Factory_Release(factory);
 }
 
+static void test_rounded_rectangle_geometry(void)
+{
+    ID2D1RoundedRectangleGeometry *geometry;
+    D2D1_ROUNDED_RECT rect, rect2;
+    ID2D1Factory *factory;
+    D2D1_POINT_2F point;
+    BOOL contains;
+    HRESULT hr;
+
+    hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &IID_ID2D1Factory, NULL, (void **)&factory);
+    ok(SUCCEEDED(hr), "Failed to create factory, hr %#x.\n", hr);
+
+    set_rounded_rect(&rect, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
+    hr = ID2D1Factory_CreateRoundedRectangleGeometry(factory, &rect, &geometry);
+todo_wine
+    ok(SUCCEEDED(hr), "Failed to create geometry, hr %#x.\n", hr);
+    if (FAILED(hr))
+    {
+        ID2D1Factory_Release(factory);
+        return;
+    }
+
+    ID2D1RoundedRectangleGeometry_GetRoundedRect(geometry, &rect2);
+    ok(!memcmp(&rect, &rect2, sizeof(rect)), "Got wrong rectangle.\n");
+    ID2D1RoundedRectangleGeometry_Release(geometry);
+
+    /* X radius larger than half width. */
+    set_rounded_rect(&rect, 0.0f, 0.0f, 50.0f, 40.0f, 30.0f, 5.0f);
+    hr = ID2D1Factory_CreateRoundedRectangleGeometry(factory, &rect, &geometry);
+    ID2D1RoundedRectangleGeometry_GetRoundedRect(geometry, &rect2);
+    ok(!memcmp(&rect, &rect2, sizeof(rect)), "Got wrong rectangle.\n");
+    ID2D1RoundedRectangleGeometry_Release(geometry);
+
+    /* Y radius larger than half height. */
+    set_rounded_rect(&rect, 0.0f, 0.0f, 50.0f, 40.0f, 5.0f, 30.0f);
+    hr = ID2D1Factory_CreateRoundedRectangleGeometry(factory, &rect, &geometry);
+    ID2D1RoundedRectangleGeometry_GetRoundedRect(geometry, &rect2);
+    ok(!memcmp(&rect, &rect2, sizeof(rect)), "Got wrong rectangle.\n");
+    ID2D1RoundedRectangleGeometry_Release(geometry);
+
+    /* Both exceed rectangle size. */
+    set_rounded_rect(&rect, 0.0f, 0.0f, 50.0f, 40.0f, 30.0f, 25.0f);
+    hr = ID2D1Factory_CreateRoundedRectangleGeometry(factory, &rect, &geometry);
+    ID2D1RoundedRectangleGeometry_GetRoundedRect(geometry, &rect2);
+    ok(!memcmp(&rect, &rect2, sizeof(rect)), "Got wrong rectangle.\n");
+    ID2D1RoundedRectangleGeometry_Release(geometry);
+
+    ID2D1Factory_Release(factory);
+}
+
 static void test_bitmap_formats(void)
 {
     D2D1_BITMAP_PROPERTIES bitmap_desc;
@@ -3249,6 +3335,7 @@ START_TEST(d2d1)
     test_bitmap_brush();
     test_path_geometry();
     test_rectangle_geometry();
+    test_rounded_rectangle_geometry();
     test_bitmap_formats();
     test_alpha_mode();
     test_shared_bitmap();
-- 
2.10.2




More information about the wine-patches mailing list