Imagelist Tests (Try 2)

Robert Shearman rob at codeweavers.com
Tue Aug 24 11:10:21 CDT 2004


This time, without needing resources.

Changelog:

Mike McCormack <mike at codeweavers.com>
Tests for icon and bitmap adding and removing and bitmap drawing with 
image lists.

-------------- next part --------------
Index: wine/dlls/comctl32/tests/imagelist.c
===================================================================
RCS file: /home/wine/wine/dlls/comctl32/tests/imagelist.c,v
retrieving revision 1.1
diff -u -p -r1.1 imagelist.c
--- wine/dlls/comctl32/tests/imagelist.c	22 Aug 2004 01:59:55 -0000	1.1
+++ wine/dlls/comctl32/tests/imagelist.c	24 Aug 2004 16:06:41 -0000
@@ -1,6 +1,7 @@
 /* Unit test suite for imagelist control.
  *
  * Copyright 2004 Michael Stefaniuc
+ * Copyright 2002 Mike McCormack for CodeWeavers
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -100,11 +101,215 @@ static void testHotspot (void)
 #undef HOTSPOTS_MAX
 }
 
+static HINSTANCE hinst;
+
+static const BYTE icon_bits[32*32/8] = {0};
+static const BYTE bitmap_bits[48*48/8] = {0};
+
+static BOOL DoTest1(void)
+{
+    HIMAGELIST himl ;
+
+    HICON hicon1 ;
+    HICON hicon2 ;
+    HICON hicon3 ;
+
+    /* create an imagelist to play with */
+    himl = ImageList_Create(84,84,0x10,0,3);
+    ok(himl!=0,"failed to create imagelist");
+
+    /* load the icons to add to the image list */
+    hicon1 = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits);
+    ok(hicon1 != 0, "no hicon1");
+    hicon2 = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits);
+    ok(hicon2 != 0, "no hicon2");
+    hicon3 = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits);
+    ok(hicon3 != 0, "no hicon3");
+
+    /* remove when nothing exists */
+    ok(!ImageList_Remove(himl,0),"removed non-existent icon");
+
+    /* add three */
+    ok(0==ImageList_AddIcon(himl, hicon1),"failed to add icon1");
+    ok(1==ImageList_AddIcon(himl, hicon2),"failed to add icon2");
+    ok(2==ImageList_AddIcon(himl, hicon3),"failed to add icon3");
+
+    /* remove three */
+    ok(ImageList_Remove(himl,0),"can't remove 0");
+    ok(ImageList_Remove(himl,0),"can't remove 0");
+    ok(ImageList_Remove(himl,0),"can't remove 0");
+
+    /* remove one extra */
+    ok(!ImageList_Remove(himl,0),"removed non-existent icon");
+
+    /* destroy it */
+    ok(ImageList_Destroy(himl),"destroy imagelist failed");
+
+    /* icons should be deleted by the imagelist */
+    ok(!DeleteObject(hicon1),"icon 1 wasn't deleted");
+    ok(!DeleteObject(hicon2),"icon 2 wasn't deleted");
+    ok(!DeleteObject(hicon3),"icon 3 wasn't deleted");
+
+    return TRUE;
+}
+
+static BOOL DoTest2(void)
+{
+    HIMAGELIST himl ;
+
+    HICON hicon1 ;
+    HICON hicon2 ;
+    HICON hicon3 ;
+
+    /* create an imagelist to play with */
+    himl = ImageList_Create(84,84,0x10,0,3);
+    ok(himl!=0,"failed to create imagelist");
+
+    /* load the icons to add to the image list */
+    hicon1 = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits);
+    ok(hicon1 != 0, "no hicon1");
+    hicon2 = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits);
+    ok(hicon2 != 0, "no hicon2");
+    hicon3 = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits);
+    ok(hicon3 != 0, "no hicon3");
+
+    /* remove when nothing exists */
+    ok(!ImageList_Remove(himl,0),"removed non-existent icon");
+
+    /* add three */
+    ok(0==ImageList_AddIcon(himl, hicon1),"failed to add icon1");
+    ok(1==ImageList_AddIcon(himl, hicon2),"failed to add icon2");
+    ok(2==ImageList_AddIcon(himl, hicon3),"failed to add icon3");
+
+    /* destroy it */
+    ok(ImageList_Destroy(himl),"destroy imagelist failed");
+
+    /* icons should be deleted by the imagelist */
+    ok(!DeleteObject(hicon1),"icon 1 wasn't deleted");
+    ok(!DeleteObject(hicon2),"icon 2 wasn't deleted");
+    ok(!DeleteObject(hicon3),"icon 3 wasn't deleted");
+
+    return TRUE;
+}
+
+static HWND create_a_window(void)
+{
+    WNDCLASSA cls;
+    char className[] = "bmwnd";
+    char winName[]   = "Test Bitmap";
+    HWND hWnd;
+
+    cls.style         = CS_HREDRAW | CS_VREDRAW | CS_GLOBALCLASS;
+    cls.lpfnWndProc   = DefWindowProcA;
+    cls.cbClsExtra    = 0;
+    cls.cbWndExtra    = 0;
+    cls.hInstance     = 0;
+    cls.hIcon         = LoadIconA (0, (LPSTR)IDI_APPLICATION);
+    cls.hCursor       = LoadCursorA (0, (LPSTR)IDC_ARROW);
+    cls.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
+    cls.lpszMenuName  = 0;
+    cls.lpszClassName = className;
+
+    RegisterClassA (&cls);
+
+    /* Setup windows */
+    hWnd = CreateWindowA (className, winName, 
+       WS_OVERLAPPEDWINDOW ,
+       CW_USEDEFAULT, CW_USEDEFAULT, 100, 100, 0,
+       0, hinst, 0);
+
+    return hWnd;
+}
+
+static BOOL DoTest3(void)
+{
+    HIMAGELIST himl ;
+
+    HBITMAP hbm1 ;
+    HBITMAP hbm2 ;
+    HBITMAP hbm3 ;
+
+    IMAGELISTDRAWPARAMS imldp;
+    HDC hdc;
+    HWND hwndfortest;
+
+    hwndfortest = create_a_window();
+    hdc = GetDC(hwndfortest);
+    ok(hdc!=NULL, "couldn't get DC\n");
+
+    /* create an imagelist to play with */
+    himl = ImageList_Create(48,48,0x10,0,3);
+    ok(himl!=0,"failed to create imagelist");
+
+    /* load the icons to add to the image list */
+    hbm1 = CreateBitmap(48, 48, 1, 1, bitmap_bits);
+    ok(hbm1 != 0, "no bitmap 1");
+    hbm2 = CreateBitmap(48, 48, 1, 1, bitmap_bits);
+    ok(hbm2 != 0, "no bitmap 2");
+    hbm3 = CreateBitmap(48, 48, 1, 1, bitmap_bits);
+    ok(hbm3 != 0, "no bitmap 3");
+
+    /* remove when nothing exists */
+    ok(!ImageList_Remove(himl,0),"removed non-existent bitmap");
+
+    /* add three */
+    ok(0==ImageList_Add(himl, hbm1, 0),"failed to add bitmap 1");
+    ok(1==ImageList_Add(himl, hbm2, 0),"failed to add bitmap 2");
+
+    ok(ImageList_SetImageCount(himl,3),"Setimage count failed");
+    /*ok(2==ImageList_Add(himl, hbm3, NULL),"failed to add bitmap 3"); */
+    ok(ImageList_Replace(himl, 2, hbm3, 0),"failed to replace bitmap 3");
+
+    Rectangle(hdc, 100, 100, 74, 74);
+    memset(&imldp, 0, sizeof imldp);
+    ok(!ImageList_DrawIndirect(&imldp), "zero data succeeded!");
+    imldp.cbSize = sizeof imldp;
+    ok(!ImageList_DrawIndirect(&imldp), "zero hdc succeeded!");
+    imldp.hdcDst = hdc;
+    ok(!ImageList_DrawIndirect(&imldp),"zero himl succeeded!");
+    imldp.himl = himl;
+    ok(ImageList_DrawIndirect(&imldp),"should succeeded");
+    imldp.fStyle = SRCCOPY;
+    imldp.rgbBk = CLR_DEFAULT;
+    imldp.rgbFg = CLR_DEFAULT;
+    imldp.y = 100;
+    imldp.x = 100;
+    ok(ImageList_DrawIndirect(&imldp),"should succeeded");
+    imldp.i ++;
+    ok(ImageList_DrawIndirect(&imldp),"should succeeded");
+    imldp.i ++;
+    ok(ImageList_DrawIndirect(&imldp),"should succeeded");
+    imldp.i ++;
+    ok(!ImageList_DrawIndirect(&imldp),"should fail");
+
+    /* remove three */
+    ok(ImageList_Remove(himl, 0), "removing 1st bitmap");
+    ok(ImageList_Remove(himl, 0), "removing 2nd bitmap");
+    ok(ImageList_Remove(himl, 0), "removing 3rd bitmap");
+
+    /* destroy it */
+    ok(ImageList_Destroy(himl),"destroy imagelist failed");
+
+    /* icons should be deleted by the imagelist */
+    ok(DeleteObject(hbm1),"bitmap 1 can't be deleted");
+    ok(DeleteObject(hbm2),"bitmap 2 can't be deleted");
+    ok(DeleteObject(hbm3),"bitmap 3 can't be deleted");
+
+    ReleaseDC(hwndfortest, hdc);
+    DestroyWindow(hwndfortest);
+
+    return TRUE;
+}
+
 START_TEST(imagelist)
 {
     desktopDC=GetDC(NULL);
+    hinst = GetModuleHandleA(NULL);
 
     InitCommonControls();
 
     testHotspot();
+    DoTest1();
+    DoTest2();
+    DoTest3();
 }


More information about the wine-patches mailing list