[GDI32_APITEST]
[reactos.git] / rostests / apitests / gdi32 / CreateBitmap.c
index 35b1079..c5bc362 100644 (file)
 
 #define DEFAULT_BITMAP 21
 
+void Test_CreateBitmap_Params()
+{
+    HBITMAP hbmp;
+
+    /* All of these should get us the default bitmap */
+    hbmp = CreateBitmap(0, 0, 0, 0, NULL);
+    ok(hbmp == GetStockObject(21), "should get the default bitmap\n");
+    hbmp = CreateBitmap(1, 0, 0, 0, NULL);
+    ok(hbmp == GetStockObject(21), "should get the default bitmap\n");
+    hbmp = CreateBitmap(0, 1, 0, 0, NULL);
+    ok(hbmp == GetStockObject(21), "should get the default bitmap\n");
+    hbmp = CreateBitmap(0, 1, 1, 0, NULL);
+    ok(hbmp == GetStockObject(21), "should get the default bitmap\n");
+    hbmp = CreateBitmap(0, 1, 63, 33, NULL);
+    ok(hbmp == GetStockObject(21), "should get the default bitmap\n");
+    hbmp = CreateBitmap(0, -4, -32, 233, NULL);
+    ok(hbmp == GetStockObject(21), "should get the default bitmap\n");
+
+    SetLastError(0);
+    hbmp = CreateBitmap(1, -1, 1, 0, NULL);
+    ok(hbmp == 0, "\n");
+    ok_err(ERROR_INVALID_PARAMETER);
+
+    SetLastError(0);
+    hbmp = CreateBitmap(-1, 1, 1, 0, NULL);
+    ok(hbmp == 0, "\n");
+    ok_err(ERROR_INVALID_PARAMETER);
+
+    SetLastError(0);
+    hbmp = CreateBitmap(-1, 1, 1, 1, NULL);
+    ok(hbmp == 0, "\n");
+    ok_err(ERROR_INVALID_PARAMETER);
+
+    SetLastError(0);
+    hbmp = CreateBitmap(1, -1, 1, 1, NULL);
+    ok(hbmp == 0, "\n");
+    ok_err(ERROR_INVALID_PARAMETER);
+
+    /* Check if an overflow in cPlanes * cBitsPixel is handled */
+    SetLastError(0);
+    hbmp = CreateBitmap(1, 1, 2, 0x80000004, NULL);
+    ok(hbmp == 0, "\n");
+    ok_err(ERROR_INVALID_PARAMETER);
+
+    /* Check for maximum width */
+    hbmp = CreateBitmap(0x7FFFFFF, 1, 1, 1, NULL);
+    ok(hbmp != 0, "\n");
+    DeleteObject(hbmp);
+    SetLastError(0);
+    hbmp = CreateBitmap(0x8000000, 1, 1, 1, NULL);
+    ok(hbmp == 0, "\n");
+    ok_err(ERROR_INVALID_PARAMETER);
+
+    /* Check for maximum height */
+    hbmp = CreateBitmap(1, 0x1FFFFF00, 1, 1, NULL);
+    ok(hbmp != 0, "\n");
+    DeleteObject(hbmp);
+    SetLastError(0);
+    hbmp = CreateBitmap(1, 0x1FFFFFFF, 1, 1, NULL);
+    ok(hbmp == 0, "\n");
+    ok_err(0);
+
+    /* Check for overflow in width * height */
+    hbmp = CreateBitmap(0x20000, 0x1FFFF, 1, 1, NULL);
+    ok(hbmp != 0, "\n");
+    DeleteObject(hbmp);
+    SetLastError(0);
+    hbmp = CreateBitmap(0x20000, 0x20000, 1, 1, NULL);
+    ok(hbmp == 0, "\n");
+    ok_err(0);
+
+    /* Check huge allocation */
+    SetLastError(0);
+    hbmp = CreateBitmap(0x2000, 0x20000, 32, 1, NULL);
+    ok(hbmp == 0, "\n");
+    ok_err(ERROR_INVALID_PARAMETER);
+
+}
+
 void Test_CreateBitmap()
 {
     HBITMAP hbmp;
@@ -20,10 +99,8 @@ void Test_CreateBitmap()
     hbmp = CreateBitmap(0, 0, 0, 0, NULL);
     ok(hbmp != 0, "should get a 1x1 bitmap\n");
     ok(hbmp == GetStockObject(DEFAULT_BITMAP), "\n");
-
     result = GetObject(hbmp, sizeof(bitmap), &bitmap);
     ok(result > 0, "result = %d\n", result);
-
     ok(bitmap.bmType == 0, "bmType = %ld\n", bitmap.bmType);
     ok(bitmap.bmWidth == 1, "bmWidth = %ld\n", bitmap.bmWidth);
     ok(bitmap.bmHeight == 1, "bmHeight = %ld\n", bitmap.bmHeight);
@@ -31,19 +108,27 @@ void Test_CreateBitmap()
     ok(bitmap.bmPlanes == 1, "bmPlanes = %d\n", bitmap.bmPlanes);
     ok(bitmap.bmBitsPixel == 1, "bmBitsPixel = %d\n", bitmap.bmBitsPixel);
     ok(bitmap.bmBits == 0, "bmBits = %p\n", bitmap.bmBits);
-
     DeleteObject(hbmp);
 
-    hbmp = CreateBitmap(1, -1, 1, 0, NULL);
-    ok(hbmp == 0, "\n");
+    hbmp = CreateBitmap(1, 2, 1, 1, NULL);
+    ok(hbmp != 0, "should get a 1x2 bitmap\n");
+    result = GetObject(hbmp, sizeof(bitmap), &bitmap);
+    ok(result > 0, "result = %d\n", result);
+    ok(bitmap.bmType == 0, "bmType = %ld\n", bitmap.bmType);
+    ok(bitmap.bmWidth == 1, "bmWidth = %ld\n", bitmap.bmWidth);
+    ok(bitmap.bmHeight == 2, "bmHeight = %ld\n", bitmap.bmHeight);
+    ok(bitmap.bmWidthBytes == 2, "bmWidthBytes = %ld\n", bitmap.bmWidthBytes);
+    ok(bitmap.bmPlanes == 1, "bmPlanes = %d\n", bitmap.bmPlanes);
+    ok(bitmap.bmBitsPixel == 1, "bmBitsPixel = %d\n", bitmap.bmBitsPixel);
+    ok(bitmap.bmBits == 0, "bmBits = %p\n", bitmap.bmBits);
+    DeleteObject(hbmp);
 
-    hbmp = CreateBitmap(-1, 1, 1, 0, NULL);
-    ok(hbmp == 0, "\n");
 
 }
 
 START_TEST(CreateBitmap)
 {
+    Test_CreateBitmap_Params();
     Test_CreateBitmap();
 }