+static void
+Test_Bitmap()
+{
+ HBITMAP hbmp, hbmpInvalid, hbmpOld;
+ BYTE bmBits[4] = {0};
+ HDC hdcTmp;
+
+ hbmp = CreateBitmap(2, 2, 1, 1, &bmBits);
+ hbmpInvalid = CreateBitmap(2, 2, 1, 4, &bmBits);
+ if (!hbmp || !hbmpInvalid)
+ {
+ printf("couldn't create bitmaps, skipping\n");
+ return;
+ }
+
+ hbmpOld = SelectObject(hdc1, hbmp);
+ ok(GDI_HANDLE_GET_TYPE(hbmpOld) == GDI_OBJECT_TYPE_BITMAP, "wrong type\n");
+
+ /* Test invalid BITMAP */
+ ok(SelectObject(hdc1, hbmpInvalid) == NULL, "should fail\n");
+
+ /* Test if we get the right bitmap back */
+ hbmpOld = SelectObject(hdc1, hbmpOld);
+ ok(hbmpOld == hbmp, "didn't get the right bitmap back.\n");
+
+ /* Test selecting bitmap into 2 DCs */
+ hbmpOld = SelectObject(hdc1, hbmp);
+ ok(SelectObject(hdc2, hbmp) == NULL, "Should fail.\n");
+
+ /* Test selecting same bitmap twice */
+ hbmpOld = SelectObject(hdc1, hbmp);
+ ok(hbmpOld == hbmp, "didn't get the right bitmap back.\n");
+ SelectObject(hdc1, GetStockObject(DEFAULT_BITMAP));
+
+ /* Test selecting and then deleting the DC */
+ hdcTmp = CreateCompatibleDC(NULL);
+ hbmpOld = SelectObject(hdcTmp, hbmp);
+ ok(hbmpOld == GetStockObject(DEFAULT_BITMAP), "didn't get the right bitmap back.\n");
+ DeleteDC(hdcTmp);
+ hbmpOld = SelectObject(hdc1, hbmp);
+ ok(hbmpOld == GetStockObject(DEFAULT_BITMAP), "didn't get the right bitmap back.\n");
+
+ DeleteObject(hbmp);
+ DeleteObject(hbmpInvalid);
+}
+
+static void
+Test_Pen()
+{
+ HPEN hpen, hpenOld;
+
+ /* Test PEN */
+ hpen = GetStockObject(GRAY_BRUSH);
+ hpenOld = SelectObject(hdc1, hpen);
+ ok(hpenOld == GetStockObject(WHITE_BRUSH), "Got wrong pen.\n");
+// RTEST(pDc_Attr->hbrush == hpen);
+ ok(GDI_HANDLE_GET_TYPE(hpenOld) == GDI_OBJECT_TYPE_BRUSH, "wrong type.\n");
+ SelectObject(hdc1, hpenOld);
+}
+
+static void
+Test_Region()
+{
+ HRGN hrgn, hrgnOld;
+
+ /* Test REGION */
+ SetLastError(ERROR_SUCCESS);
+ hrgn = CreateRectRgn(0,0,0,0);
+ hrgnOld = SelectObject(hdc1, hrgn);
+ ok((UINT_PTR)hrgnOld == NULLREGION, "\n");
+ DeleteObject(hrgn);
+
+ hrgn = CreateRectRgn(0,0,10,10);
+ ok((UINT_PTR)SelectObject(hdc1, hrgn) == SIMPLEREGION, "\n");
+ hrgnOld = CreateRectRgn(5,5,20,20);
+ ok(CombineRgn(hrgn, hrgn, hrgnOld, RGN_OR) == COMPLEXREGION, "\n");
+ DeleteObject(hrgnOld);
+ ok((UINT_PTR)SelectObject(hdc1, hrgn) == SIMPLEREGION, "\n"); // ??? Why this?
+ DeleteObject(hrgn);
+// ok(IsHandleValid(hrgn) == TRUE, "\n");
+ ok_err(ERROR_SUCCESS);
+}
+