1 /* 2 * PROJECT: ReactOS api tests 3 * LICENSE: GPL - See COPYING in the top level directory 4 * PURPOSE: Test for NtGdiCreateBitmap 5 * PROGRAMMERS: 6 */ 7 8 #include "../win32nt.h" 9 10 void Test_NtGdiCreateBitmap_Params(void) 11 { 12 HBITMAP hBmp; 13 BITMAP bitmap; 14 BYTE BitmapData[10] = {0x11, 0x22, 0x33}; 15 16 /* Test simple params */ 17 SetLastError(ERROR_SUCCESS); 18 ok((hBmp = NtGdiCreateBitmap(1, 1, 1, 1, NULL)) != NULL, "hBmp was NULL.\n"); 19 ok_long(GetLastError(), ERROR_SUCCESS); 20 DeleteObject(hBmp); 21 22 /* Test all zero */ 23 SetLastError(ERROR_SUCCESS); 24 ok_ptr(NtGdiCreateBitmap(0, 0, 0, 0, NULL), NULL); 25 ok_long(GetLastError(), ERROR_INVALID_PARAMETER); 26 27 /* Test cx == 0 */ 28 SetLastError(ERROR_SUCCESS); 29 ok_ptr(NtGdiCreateBitmap(0, 1, 1, 1, NULL), NULL); 30 ok_long(GetLastError(), ERROR_INVALID_PARAMETER); 31 32 /* Test negative cx */ 33 SetLastError(ERROR_SUCCESS); 34 ok_ptr(NtGdiCreateBitmap(-10, 1, 1, 1, NULL), NULL); 35 ok_long(GetLastError(), ERROR_INVALID_PARAMETER); 36 37 /* Test cy == 0 */ 38 SetLastError(ERROR_SUCCESS); 39 ok_ptr(NtGdiCreateBitmap(1, 0, 1, 1, NULL), NULL); 40 ok_long(GetLastError(), ERROR_INVALID_PARAMETER); 41 42 /* Test negative cy */ 43 SetLastError(ERROR_SUCCESS); 44 ok_ptr(NtGdiCreateBitmap(1, -2, 1, 1, NULL), NULL); 45 ok_long(GetLastError(), ERROR_INVALID_PARAMETER); 46 47 /* Test negative cy and valid bits */ 48 SetLastError(ERROR_SUCCESS); 49 ok_ptr(NtGdiCreateBitmap(1, -2, 1, 1, BitmapData), NULL); 50 ok_long(GetLastError(), ERROR_SUCCESS); 51 52 /* Test negative cy and invalid bits */ 53 SetLastError(ERROR_SUCCESS); 54 ok_ptr(NtGdiCreateBitmap(1, -2, 1, 1, (BYTE*)(LONG_PTR)0x80001234), NULL); 55 ok_long(GetLastError(), ERROR_SUCCESS); 56 57 #ifndef _WIN64 // Win64 doesn't fail here 58 /* Test huge size */ 59 SetLastError(ERROR_SUCCESS); 60 ok_ptr(NtGdiCreateBitmap(100000, 100000, 1, 1, NULL), NULL); 61 ok_long(GetLastError(), ERROR_NOT_ENOUGH_MEMORY); 62 #endif 63 64 /* Test too huge size */ 65 SetLastError(ERROR_SUCCESS); 66 ok_ptr(NtGdiCreateBitmap(100000, 100000, 1, 32, NULL), NULL); 67 ok_long(GetLastError(), ERROR_INVALID_PARAMETER); 68 69 /* Test huge size and valid bits */ 70 SetLastError(ERROR_SUCCESS); 71 TEST(NtGdiCreateBitmap(1000, 1000, 1, 1, BitmapData) == NULL); 72 ok_long(GetLastError(), ERROR_SUCCESS); 73 74 /* Test huge size and invalid bits */ 75 SetLastError(ERROR_SUCCESS); 76 ok_ptr(NtGdiCreateBitmap(100000, 100000, 1, 1, (BYTE*)(LONG_PTR)0x80001234), NULL); 77 ok_long(GetLastError(), ERROR_SUCCESS); 78 79 /* Test cPlanes == 0 */ 80 SetLastError(ERROR_SUCCESS); 81 ok((hBmp = NtGdiCreateBitmap(1, 1, 0, 1, NULL)) != NULL, "hBmp was NULL.\n"); 82 ok_long(GetLastError(), ERROR_SUCCESS); 83 ok_int(GetObject(hBmp, sizeof(BITMAP), &bitmap), (int)sizeof(BITMAP)); 84 ok_int(bitmap.bmType, 0); 85 ok_int(bitmap.bmWidth, 1); 86 ok_int(bitmap.bmHeight, 1); 87 ok_int(bitmap.bmWidthBytes, 2); 88 ok_int(bitmap.bmPlanes, 1); 89 ok_int(bitmap.bmBitsPixel, 1); 90 DeleteObject(hBmp); 91 92 /* Test big cPlanes */ 93 SetLastError(ERROR_SUCCESS); 94 ok((hBmp = NtGdiCreateBitmap(1, 1, 32, 1, NULL)) != NULL, "hBmp was NULL.\n"); 95 ok_long(GetLastError(), ERROR_SUCCESS); 96 DeleteObject(hBmp); 97 98 ok_ptr(NtGdiCreateBitmap(1, 1, 33, 1, NULL), NULL); 99 ok_long(GetLastError(), ERROR_INVALID_PARAMETER); 100 101 /* Test cBPP == 0 */ 102 SetLastError(ERROR_SUCCESS); 103 ok((hBmp = NtGdiCreateBitmap(1, 1, 1, 0, NULL)) != NULL, "hBmp was NULL.\n"); 104 ok_long(GetLastError(), ERROR_SUCCESS); 105 ok_int(GetObject(hBmp, sizeof(BITMAP), &bitmap), (int)sizeof(BITMAP)); 106 ok_int(bitmap.bmType, 0); 107 ok_int(bitmap.bmWidth, 1); 108 ok_int(bitmap.bmHeight, 1); 109 ok_int(bitmap.bmWidthBytes, 2); 110 ok_int(bitmap.bmPlanes, 1); 111 ok_int(bitmap.bmBitsPixel, 1); 112 DeleteObject(hBmp); 113 114 /* Test negative cBPP */ 115 SetLastError(ERROR_SUCCESS); 116 ok_ptr(NtGdiCreateBitmap(1, 1, 1, -1, NULL), NULL); 117 ok_long(GetLastError(), ERROR_INVALID_PARAMETER); 118 119 /* Test bad cBPP */ 120 SetLastError(ERROR_SUCCESS); 121 ok((hBmp = NtGdiCreateBitmap(1, 1, 1, 3, NULL)) != NULL, "hBmp was NULL.\n"); 122 ok_int(GetObject(hBmp, sizeof(BITMAP), &bitmap), (int)sizeof(BITMAP)); 123 ok_int(bitmap.bmBitsPixel, 4); 124 DeleteObject(hBmp); 125 126 ok((hBmp = NtGdiCreateBitmap(1, 1, 1, 6, NULL)) != NULL, "hBmp was NULL.\n"); 127 ok_int(GetObject(hBmp, sizeof(BITMAP), &bitmap), (int)sizeof(BITMAP)); 128 ok_int(bitmap.bmBitsPixel, 8); 129 DeleteObject(hBmp); 130 131 ok((hBmp = NtGdiCreateBitmap(1, 1, 1, 15, NULL)) != NULL, "hBmp was NULL.\n"); 132 ok_int(GetObject(hBmp, sizeof(BITMAP), &bitmap), (int)sizeof(BITMAP)); 133 ok_int(bitmap.bmBitsPixel, 16); 134 DeleteObject(hBmp); 135 136 ok((hBmp = NtGdiCreateBitmap(1, 1, 1, 17, NULL)) != NULL, "hBmp was NULL.\n"); 137 ok_int(GetObject(hBmp, sizeof(BITMAP), &bitmap), (int)sizeof(BITMAP)); 138 ok_int(bitmap.bmBitsPixel, 24); 139 DeleteObject(hBmp); 140 141 ok((hBmp = NtGdiCreateBitmap(1, 1, 3, 7, NULL)) != NULL, "hBmp was NULL.\n"); 142 ok_int(GetObject(hBmp, sizeof(BITMAP), &bitmap), (int)sizeof(BITMAP)); 143 ok_int(bitmap.bmBitsPixel, 24); 144 DeleteObject(hBmp); 145 146 ok((hBmp = NtGdiCreateBitmap(1, 1, 1, 25, NULL)) != NULL, "hBmp was NULL.\n"); 147 ok_int(GetObject(hBmp, sizeof(BITMAP), &bitmap), (int)sizeof(BITMAP)); 148 ok_int(bitmap.bmBitsPixel, 32); 149 DeleteObject(hBmp); 150 151 ok_long(GetLastError(), ERROR_SUCCESS); 152 153 ok_ptr(NtGdiCreateBitmap(1, 1, 1, 33, NULL), NULL); 154 ok_long(GetLastError(), ERROR_INVALID_PARAMETER); 155 156 /* Test bad pointer */ 157 SetLastError(ERROR_SUCCESS); 158 ok_ptr(NtGdiCreateBitmap(1, 1, 1, 1, (BYTE*)(LONG_PTR)0x80001234), NULL); 159 ok_long(GetLastError(), ERROR_SUCCESS); 160 161 /* Test pointer alignment */ 162 SetLastError(ERROR_SUCCESS); 163 ok((hBmp = NtGdiCreateBitmap(1, 1, 1, 1, &BitmapData[1])) != NULL, "hBmp was NULL.\n"); 164 ok_long(GetLastError(), ERROR_SUCCESS); 165 DeleteObject(hBmp); 166 167 /* Test normal params */ 168 SetLastError(ERROR_SUCCESS); 169 ok((hBmp = NtGdiCreateBitmap(5, 7, 2, 4, NULL)) != NULL, "hBmp was NULL.\n"); 170 ok_long(GetLastError(), ERROR_SUCCESS); 171 ok_int(GetObject(hBmp, sizeof(BITMAP), &bitmap), (int)sizeof(BITMAP)); 172 ok_int(bitmap.bmType, 0); 173 ok_int(bitmap.bmWidth, 5); 174 ok_int(bitmap.bmHeight, 7); 175 ok_int(bitmap.bmWidthBytes, 6); 176 ok_int(bitmap.bmPlanes, 1); 177 ok_int(bitmap.bmBitsPixel, 8); 178 DeleteObject(hBmp); 179 180 181 /* Test height 0 params */ 182 SetLastError(ERROR_SUCCESS); 183 ok_ptr(NtGdiCreateBitmap(1, 0, 1, 1, NULL), NULL); 184 ok_long(GetLastError(), ERROR_INVALID_PARAMETER); 185 186 /* Test height -1 params */ 187 SetLastError(ERROR_SUCCESS); 188 ok_ptr(NtGdiCreateBitmap(1, -1, 1, 1, NULL), NULL); 189 ok_long(GetLastError(), ERROR_INVALID_PARAMETER); 190 191 /* Test witdth 0 params */ 192 SetLastError(ERROR_SUCCESS); 193 ok_ptr(NtGdiCreateBitmap(0, 1, 1, 1, NULL), NULL); 194 ok_long(GetLastError(), ERROR_INVALID_PARAMETER); 195 196 /* Test witdth -1 params */ 197 SetLastError(ERROR_SUCCESS); 198 ok_ptr(NtGdiCreateBitmap(-1, 0, 1, 1, NULL), NULL); 199 ok_long(GetLastError(), ERROR_INVALID_PARAMETER); 200 201 /* Test witdth -1 params */ 202 SetLastError(ERROR_SUCCESS); 203 ok_ptr(NtGdiCreateBitmap(0, 0, 1, 1, NULL), NULL); 204 ok_long(GetLastError(), ERROR_INVALID_PARAMETER); 205 } 206 207 START_TEST(NtGdiCreateBitmap) 208 { 209 210 Test_NtGdiCreateBitmap_Params(); 211 // Test_NtGdiCreateBitmap_Pixel(); 212 213 } 214