Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers...
[reactos.git] / rostests / winetests / comctl32 / tab.c
diff --git a/rostests/winetests/comctl32/tab.c b/rostests/winetests/comctl32/tab.c
deleted file mode 100644 (file)
index 431a49d..0000000
+++ /dev/null
@@ -1,1470 +0,0 @@
-/* Unit test suite for tab control.
- *
- * Copyright 2003 Vitaliy Margolen
- * Copyright 2007 Hagop Hagopian
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-#include <wine/test.h>
-
-#include <assert.h>
-//#include <windows.h>
-#include <wingdi.h>
-#include <winuser.h>
-#include <commctrl.h>
-#include <stdio.h>
-
-#include "msg.h"
-
-#define DEFAULT_MIN_TAB_WIDTH 54
-#define TAB_PADDING_X 6
-#define EXTRA_ICON_PADDING 3
-#define MAX_TABLEN 32
-
-#define NUM_MSG_SEQUENCES  2
-#define PARENT_SEQ_INDEX   0
-#define TAB_SEQ_INDEX      1
-
-#define expect(expected, got) ok ( expected == got, "Expected %d, got %d\n", expected, got)
-#define expect_str(expected, got)\
- ok ( strcmp(expected, got) == 0, "Expected '%s', got '%s'\n", expected, got)
-
-#define TabWidthPadded(padd_x, num) (DEFAULT_MIN_TAB_WIDTH - (TAB_PADDING_X - (padd_x)) * num)
-
-static void CheckSize(HWND hwnd, INT width, INT height, const char *msg, int line)
-{
-    RECT r;
-
-    SendMessageA(hwnd, TCM_GETITEMRECT, 0, (LPARAM)&r);
-    if (width >= 0 && height < 0)
-        ok_(__FILE__,line) (width == r.right - r.left, "%s: Expected width [%d] got [%d]\n",
-            msg, width, r.right - r.left);
-    else if (height >= 0 && width < 0)
-        ok_(__FILE__,line) (height == r.bottom - r.top,  "%s: Expected height [%d] got [%d]\n",
-            msg, height, r.bottom - r.top);
-    else
-        ok_(__FILE__,line) ((width  == r.right  - r.left) && (height == r.bottom - r.top ),
-           "%s: Expected [%d,%d] got [%d,%d]\n", msg, width, height,
-            r.right - r.left, r.bottom - r.top);
-}
-
-#define CHECKSIZE(hwnd,width,height,msg) CheckSize(hwnd,width,height,msg,__LINE__)
-
-static void TabCheckSetSize(HWND hwnd, INT set_width, INT set_height, INT exp_width,
-    INT exp_height, const char *msg, int line)
-{
-    SendMessageA(hwnd, TCM_SETITEMSIZE, 0,
-            MAKELPARAM((set_width >= 0) ? set_width : 0, (set_height >= 0) ? set_height : 0));
-    if (winetest_interactive) RedrawWindow (hwnd, NULL, 0, RDW_UPDATENOW);
-    CheckSize(hwnd, exp_width, exp_height, msg, line);
-}
-
-#define TABCHECKSETSIZE(hwnd,set_width,set_height,exp_width,exp_height,msg) \
-    TabCheckSetSize(hwnd,set_width,set_height,exp_width,exp_height,msg,__LINE__)
-
-static HFONT hFont;
-static DRAWITEMSTRUCT g_drawitem;
-static HWND parent_wnd;
-
-static struct msg_sequence *sequences[NUM_MSG_SEQUENCES];
-
-static const struct message add_tab_to_parent[] = {
-    { TCM_INSERTITEMA, sent },
-    { TCM_INSERTITEMA, sent|optional },
-    { WM_NOTIFYFORMAT, sent|defwinproc },
-    { WM_QUERYUISTATE, sent|wparam|lparam|defwinproc|optional, 0, 0 },
-    { WM_PARENTNOTIFY, sent|defwinproc },
-    { TCM_INSERTITEMA, sent },
-    { TCM_INSERTITEMA, sent },
-    { TCM_INSERTITEMA, sent },
-    { TCM_INSERTITEMA, sent|optional },
-    { 0 }
-};
-
-static const struct message add_tab_to_parent_interactive[] = {
-    { TCM_INSERTITEMA, sent },
-    { TCM_INSERTITEMA, sent },
-    { WM_NOTIFYFORMAT, sent|defwinproc },
-    { WM_QUERYUISTATE, sent|wparam|lparam|defwinproc, 0, 0 },
-    { WM_PARENTNOTIFY, sent|defwinproc },
-    { TCM_INSERTITEMA, sent },
-    { TCM_INSERTITEMA, sent },
-    { TCM_INSERTITEMA, sent },
-    { WM_SHOWWINDOW, sent},
-    { WM_WINDOWPOSCHANGING, sent},
-    { WM_WINDOWPOSCHANGING, sent},
-    { WM_NCACTIVATE, sent},
-    { WM_ACTIVATE, sent},
-    { WM_IME_SETCONTEXT, sent|defwinproc|optional},
-    { WM_IME_NOTIFY, sent|defwinproc|optional},
-    { WM_SETFOCUS, sent|defwinproc},
-    { WM_WINDOWPOSCHANGED, sent},
-    { WM_SIZE, sent},
-    { WM_MOVE, sent},
-    { 0 }
-};
-
-static const struct message add_tab_control_parent_seq[] = {
-    { WM_NOTIFYFORMAT, sent },
-    { WM_QUERYUISTATE, sent|wparam|lparam|optional, 0, 0 },
-    { 0 }
-};
-
-static const struct message add_tab_control_parent_seq_interactive[] = {
-    { WM_NOTIFYFORMAT, sent },
-    { WM_QUERYUISTATE, sent|wparam|lparam, 0, 0 },
-    { WM_WINDOWPOSCHANGING, sent|optional},
-    { WM_NCACTIVATE, sent},
-    { WM_ACTIVATE, sent},
-    { WM_WINDOWPOSCHANGING, sent|optional},
-    { WM_KILLFOCUS, sent},
-    { WM_IME_SETCONTEXT, sent|optional},
-    { WM_IME_NOTIFY, sent|optional},
-    { 0 }
-};
-
-static const struct message empty_sequence[] = {
-    { 0 }
-};
-
-static const struct message get_item_count_seq[] = {
-    { TCM_GETITEMCOUNT, sent|wparam|lparam, 0, 0 },
-    { 0 }
-};
-
-static const struct message get_row_count_seq[] = {
-    { TCM_GETROWCOUNT, sent|wparam|lparam, 0, 0 },
-    { 0 }
-};
-
-static const struct message get_item_rect_seq[] = {
-    { TCM_GETITEMRECT, sent },
-    { TCM_GETITEMRECT, sent },
-    { 0 }
-};
-
-static const struct message getset_cur_focus_seq[] = {
-    { TCM_SETCURFOCUS, sent|lparam, 0 },
-    { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 },
-    { TCM_SETCURFOCUS, sent|lparam, 0 },
-    { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 },
-    { TCM_SETCURSEL, sent|lparam, 0 },
-    { TCM_SETCURFOCUS, sent|lparam, 0 },
-    { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 },
-    { 0 }
-};
-
-static const struct message getset_cur_sel_seq[] = {
-    { TCM_SETCURSEL, sent|lparam, 0 },
-    { TCM_GETCURSEL, sent|wparam|lparam, 0, 0 },
-    { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 },
-    { TCM_SETCURSEL, sent|lparam, 0 },
-    { TCM_GETCURSEL, sent|wparam|lparam, 0, 0 },
-    { TCM_SETCURSEL, sent|lparam, 0 },
-    { TCM_SETCURSEL, sent|lparam, 0 },
-    { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 },
-    { 0 }
-};
-
-static const struct message getset_extended_style_seq[] = {
-    { TCM_GETEXTENDEDSTYLE, sent|wparam|lparam, 0, 0 },
-    { TCM_SETEXTENDEDSTYLE, sent },
-    { TCM_GETEXTENDEDSTYLE, sent|wparam|lparam, 0, 0 },
-    { TCM_SETEXTENDEDSTYLE, sent },
-    { TCM_GETEXTENDEDSTYLE, sent|wparam|lparam, 0, 0 },
-    { 0 }
-};
-
-static const struct message getset_unicode_format_seq[] = {
-    { CCM_SETUNICODEFORMAT, sent|lparam, 0 },
-    { CCM_GETUNICODEFORMAT, sent|wparam|lparam, 0, 0 },
-    { CCM_SETUNICODEFORMAT, sent|lparam, 0 },
-    { CCM_GETUNICODEFORMAT, sent|wparam|lparam, 0, 0 },
-    { CCM_SETUNICODEFORMAT, sent|lparam, 0 },
-    { 0 }
-};
-
-static const struct message getset_item_seq[] = {
-    { TCM_SETITEMA, sent },
-    { TCM_GETITEMA, sent },
-    { TCM_GETITEMA, sent },
-    { 0 }
-};
-
-static const struct message getset_tooltip_seq[] = {
-    { WM_NOTIFYFORMAT, sent|optional },
-    { WM_QUERYUISTATE, sent|wparam|lparam|optional, 0, 0 },
-    { WM_WINDOWPOSCHANGING, sent|wparam, 0 },
-    { WM_NOTIFYFORMAT, sent|optional },
-    { TCM_SETTOOLTIPS, sent|lparam, 0 },
-    { TCM_GETTOOLTIPS, sent|wparam|lparam, 0, 0 },
-    { TCM_SETTOOLTIPS, sent|lparam, 0 },
-    { TCM_GETTOOLTIPS, sent|wparam|lparam, 0, 0 },
-    { 0 }
-};
-
-static const struct message getset_tooltip_parent_seq[] = {
-    { WM_WINDOWPOSCHANGING, sent|wparam, 0 },
-    { 0 }
-};
-
-static const struct message insert_focus_seq[] = {
-    { TCM_GETITEMCOUNT, sent|wparam|lparam, 0, 0 },
-    { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 },
-    { TCM_INSERTITEMA, sent|wparam, 1 },
-    { WM_NOTIFYFORMAT, sent|defwinproc|optional },
-    { WM_QUERYUISTATE, sent|defwinproc|optional },
-    { WM_PARENTNOTIFY, sent|defwinproc|optional },
-    { TCM_GETITEMCOUNT, sent|wparam|lparam, 0, 0 },
-    { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 },
-    { TCM_INSERTITEMA, sent|wparam, 2 },
-    { WM_NOTIFYFORMAT, sent|defwinproc|optional },
-    { WM_QUERYUISTATE, sent|defwinproc|optional, },
-    { WM_PARENTNOTIFY, sent|defwinproc|optional },
-    { TCM_GETITEMCOUNT, sent|wparam|lparam, 0, 0 },
-    { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 },
-    { TCM_SETCURFOCUS, sent|wparam|lparam, -1, 0 },
-    { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 },
-    { TCM_INSERTITEMA, sent|wparam, 3 },
-    { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 },
-    { 0 }
-};
-
-static const struct message delete_focus_seq[] = {
-    { TCM_GETITEMCOUNT, sent|wparam|lparam, 0, 0 },
-    { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 },
-    { TCM_DELETEITEM, sent|wparam|lparam, 1, 0 },
-    { TCM_GETITEMCOUNT, sent|wparam|lparam, 0, 0 },
-    { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 },
-    { TCM_SETCURFOCUS, sent|wparam|lparam, -1, 0 },
-    { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 },
-    { TCM_DELETEITEM, sent|wparam|lparam, 0, 0 },
-    { TCM_GETITEMCOUNT, sent|wparam|lparam, 0, 0 },
-    { TCM_GETCURFOCUS, sent|wparam|lparam, 0, 0 },
-    { 0 }
-};
-
-static const struct message rbuttonup_seq[] = {
-    { WM_RBUTTONUP, sent|wparam|lparam, 0, 0 },
-    { WM_CONTEXTMENU, sent|defwinproc },
-    { 0 }
-};
-
-static HWND
-create_tabcontrol (DWORD style, DWORD mask)
-{
-    HWND handle;
-    TCITEMA tcNewTab;
-    static char text1[] = "Tab 1",
-    text2[] = "Wide Tab 2",
-    text3[] = "T 3";
-
-    handle = CreateWindowA(WC_TABCONTROLA, "TestTab",
-            WS_CLIPSIBLINGS | WS_CLIPCHILDREN | TCS_FOCUSNEVER | style, 10, 10, 300, 100, NULL,
-            NULL, NULL, 0);
-    ok(handle != NULL, "failed to create tab wnd\n");
-
-    SetWindowLongA(handle, GWL_STYLE, WS_CLIPSIBLINGS | WS_CLIPCHILDREN | TCS_FOCUSNEVER | style);
-    SendMessageA(handle, WM_SETFONT, 0, (LPARAM)hFont);
-
-    tcNewTab.mask = mask;
-    tcNewTab.pszText = text1;
-    tcNewTab.iImage = 0;
-    SendMessageA(handle, TCM_INSERTITEMA, 0, (LPARAM)&tcNewTab);
-    tcNewTab.pszText = text2;
-    tcNewTab.iImage = 1;
-    SendMessageA(handle, TCM_INSERTITEMA, 1, (LPARAM)&tcNewTab);
-    tcNewTab.pszText = text3;
-    tcNewTab.iImage = 2;
-    SendMessageA(handle, TCM_INSERTITEMA, 2, (LPARAM)&tcNewTab);
-
-    if (winetest_interactive)
-    {
-        ShowWindow (handle, SW_SHOW);
-        RedrawWindow (handle, NULL, 0, RDW_UPDATENOW);
-        Sleep (1000);
-    }
-
-    return handle;
-}
-
-static LRESULT WINAPI parentWindowProcess(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
-    static LONG defwndproc_counter = 0;
-    struct message msg = { 0 };
-    LRESULT ret;
-
-    /* do not log painting messages */
-    if (message != WM_PAINT &&
-        message != WM_ERASEBKGND &&
-        message != WM_NCPAINT &&
-        message != WM_NCHITTEST &&
-        message != WM_GETTEXT &&
-        message != WM_GETICON &&
-        message != WM_DEVICECHANGE)
-    {
-        msg.message = message;
-        msg.flags = sent|wparam|lparam;
-        if (defwndproc_counter) msg.flags |= defwinproc;
-        msg.wParam = wParam;
-        msg.lParam = lParam;
-        add_message(sequences, PARENT_SEQ_INDEX, &msg);
-    }
-
-    /* dump sent structure data */
-    if (message == WM_DRAWITEM)
-        g_drawitem = *(DRAWITEMSTRUCT*)lParam;
-
-    defwndproc_counter++;
-    ret = DefWindowProcA(hwnd, message, wParam, lParam);
-    defwndproc_counter--;
-
-    return ret;
-}
-
-static BOOL registerParentWindowClass(void)
-{
-    WNDCLASSA cls;
-
-    cls.style = 0;
-    cls.lpfnWndProc = parentWindowProcess;
-    cls.cbClsExtra = 0;
-    cls.cbWndExtra = 0;
-    cls.hInstance = GetModuleHandleA(NULL);
-    cls.hIcon = 0;
-    cls.hCursor = LoadCursorA(0, (LPCSTR)IDC_ARROW);
-    cls.hbrBackground = GetStockObject(WHITE_BRUSH);
-    cls.lpszMenuName = NULL;
-    cls.lpszClassName = "Tab test parent class";
-    return RegisterClassA(&cls);
-}
-
-static HWND createParentWindow(void)
-{
-    if (!registerParentWindowClass())
-        return NULL;
-
-    return CreateWindowExA(0, "Tab test parent class", "Tab test parent window",
-            WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_VISIBLE, 0, 0, 100, 100,
-            GetDesktopWindow(), NULL, GetModuleHandleA(NULL), NULL);
-}
-
-static LRESULT WINAPI tabSubclassProcess(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
-    WNDPROC oldproc = (WNDPROC)GetWindowLongPtrA(hwnd, GWLP_USERDATA);
-    static LONG defwndproc_counter = 0;
-    struct message msg = { 0 };
-    LRESULT ret;
-
-    /* do not log painting messages */
-    if (message != WM_PAINT &&
-        message != WM_ERASEBKGND &&
-        message != WM_NCPAINT &&
-        message != WM_NCHITTEST &&
-        message != WM_GETTEXT &&
-        message != WM_GETICON &&
-        message != WM_DEVICECHANGE)
-    {
-        msg.message = message;
-        msg.flags = sent|wparam|lparam;
-        if (defwndproc_counter) msg.flags |= defwinproc;
-        msg.wParam = wParam;
-        msg.lParam = lParam;
-        add_message(sequences, TAB_SEQ_INDEX, &msg);
-    }
-
-    defwndproc_counter++;
-    ret = CallWindowProcA(oldproc, hwnd, message, wParam, lParam);
-    defwndproc_counter--;
-
-    return ret;
-}
-
-static HWND createFilledTabControl(HWND parent_wnd, DWORD style, DWORD mask, INT nTabs)
-{
-    HWND tabHandle;
-    TCITEMA tcNewTab;
-    WNDPROC oldproc;
-    RECT rect;
-    INT i;
-
-    GetClientRect(parent_wnd, &rect);
-
-    tabHandle = CreateWindowA(WC_TABCONTROLA, "TestTab",
-            WS_CLIPSIBLINGS | WS_CLIPCHILDREN | TCS_FOCUSNEVER | style, 0, 0, rect.right,
-            rect.bottom, parent_wnd, NULL, NULL, 0);
-    ok(tabHandle != NULL, "failed to create tab wnd\n");
-
-    oldproc = (WNDPROC)SetWindowLongPtrA(tabHandle, GWLP_WNDPROC, (LONG_PTR)tabSubclassProcess);
-    SetWindowLongPtrA(tabHandle, GWLP_USERDATA, (LONG_PTR)oldproc);
-
-    tcNewTab.mask = mask;
-
-    for (i = 0; i < nTabs; i++)
-    {
-        char tabName[MAX_TABLEN];
-
-        sprintf(tabName, "Tab %d", i+1);
-        tcNewTab.pszText = tabName;
-        tcNewTab.iImage = i;
-        SendMessageA(tabHandle, TCM_INSERTITEMA, i, (LPARAM)&tcNewTab);
-    }
-
-    if (winetest_interactive)
-    {
-        ShowWindow (tabHandle, SW_SHOW);
-        RedrawWindow (tabHandle, NULL, 0, RDW_UPDATENOW);
-        Sleep (1000);
-    }
-
-    return tabHandle;
-}
-
-static HWND create_tooltip (HWND hTab, char toolTipText[])
-{
-    HWND hwndTT;
-
-    TTTOOLINFOA ti;
-    LPSTR lptstr = toolTipText;
-    RECT rect;
-
-    /* Creating a tooltip window*/
-    hwndTT = CreateWindowExA(WS_EX_TOPMOST, TOOLTIPS_CLASSA, NULL,
-            WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
-            CW_USEDEFAULT, hTab, NULL, 0, NULL);
-
-    SetWindowPos(
-        hwndTT,
-        HWND_TOPMOST,
-        0, 0, 0, 0,
-        SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
-
-    GetClientRect (hTab, &rect);
-
-    /* Initialize members of toolinfo*/
-    ti.cbSize = sizeof(TTTOOLINFOA);
-    ti.uFlags = TTF_SUBCLASS;
-    ti.hwnd = hTab;
-    ti.hinst = 0;
-    ti.uId = 0;
-    ti.lpszText = lptstr;
-
-    ti.rect = rect;
-
-    /* Add toolinfo structure to the tooltip control */
-    SendMessageA(hwndTT, TTM_ADDTOOLA, 0, (LPARAM)&ti);
-
-    return hwndTT;
-}
-
-static void test_tab(INT nMinTabWidth)
-{
-    HWND hwTab;
-    RECT rTab;
-    HIMAGELIST himl = ImageList_Create(21, 21, ILC_COLOR, 3, 4);
-    SIZE size;
-    HDC hdc;
-    HFONT hOldFont;
-    INT i, dpi, exp;
-
-    hwTab = create_tabcontrol(TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE);
-    SendMessageA(hwTab, TCM_SETMINTABWIDTH, 0, nMinTabWidth);
-    /* Get System default MinTabWidth */
-    if (nMinTabWidth < 0)
-        nMinTabWidth = SendMessageA(hwTab, TCM_SETMINTABWIDTH, 0, nMinTabWidth);
-
-    hdc = GetDC(hwTab);
-    dpi = GetDeviceCaps(hdc, LOGPIXELSX);
-    hOldFont = SelectObject(hdc, (HFONT)SendMessageA(hwTab, WM_GETFONT, 0, 0));
-    GetTextExtentPoint32A(hdc, "Tab 1", strlen("Tab 1"), &size);
-    trace("Tab1 text size: size.cx=%d size.cy=%d\n", size.cx, size.cy);
-    SelectObject(hdc, hOldFont);
-    ReleaseDC(hwTab, hdc);
-
-    trace ("  TCS_FIXEDWIDTH tabs no icon...\n");
-    CHECKSIZE(hwTab, dpi, -1, "default width");
-    TABCHECKSETSIZE(hwTab, 50, 20, 50, 20, "set size");
-    TABCHECKSETSIZE(hwTab, 0, 1, 0, 1, "min size");
-
-    SendMessageA(hwTab, TCM_SETIMAGELIST, 0, (LPARAM)himl);
-
-    trace ("  TCS_FIXEDWIDTH tabs with icon...\n");
-    TABCHECKSETSIZE(hwTab, 50, 30, 50, 30, "set size > icon");
-    TABCHECKSETSIZE(hwTab, 20, 20, 25, 20, "set size < icon");
-    TABCHECKSETSIZE(hwTab, 0, 1, 25, 1, "min size");
-
-    DestroyWindow (hwTab);
-
-    hwTab = create_tabcontrol(TCS_FIXEDWIDTH | TCS_BUTTONS, TCIF_TEXT|TCIF_IMAGE);
-    SendMessageA(hwTab, TCM_SETMINTABWIDTH, 0, nMinTabWidth);
-
-    hdc = GetDC(hwTab);
-    dpi = GetDeviceCaps(hdc, LOGPIXELSX);
-    ReleaseDC(hwTab, hdc);
-    trace ("  TCS_FIXEDWIDTH buttons no icon...\n");
-    CHECKSIZE(hwTab, dpi, -1, "default width");
-    TABCHECKSETSIZE(hwTab, 20, 20, 20, 20, "set size 1");
-    TABCHECKSETSIZE(hwTab, 10, 50, 10, 50, "set size 2");
-    TABCHECKSETSIZE(hwTab, 0, 1, 0, 1, "min size");
-
-    SendMessageA(hwTab, TCM_SETIMAGELIST, 0, (LPARAM)himl);
-
-    trace ("  TCS_FIXEDWIDTH buttons with icon...\n");
-    TABCHECKSETSIZE(hwTab, 50, 30, 50, 30, "set size > icon");
-    TABCHECKSETSIZE(hwTab, 20, 20, 25, 20, "set size < icon");
-    TABCHECKSETSIZE(hwTab, 0, 1, 25, 1, "min size");
-    SendMessageA(hwTab, TCM_SETPADDING, 0, MAKELPARAM(4, 4));
-    TABCHECKSETSIZE(hwTab, 0, 1, 25, 1, "set padding, min size");
-
-    DestroyWindow (hwTab);
-
-    hwTab = create_tabcontrol(TCS_FIXEDWIDTH | TCS_BOTTOM, TCIF_TEXT|TCIF_IMAGE);
-    SendMessageA(hwTab, TCM_SETMINTABWIDTH, 0, nMinTabWidth);
-
-    hdc = GetDC(hwTab);
-    dpi = GetDeviceCaps(hdc, LOGPIXELSX);
-    ReleaseDC(hwTab, hdc);
-    trace ("  TCS_FIXEDWIDTH | TCS_BOTTOM tabs...\n");
-    CHECKSIZE(hwTab, dpi, -1, "no icon, default width");
-
-    TABCHECKSETSIZE(hwTab, 20, 20, 20, 20, "no icon, set size 1");
-    TABCHECKSETSIZE(hwTab, 10, 50, 10, 50, "no icon, set size 2");
-    TABCHECKSETSIZE(hwTab, 0, 1, 0, 1, "no icon, min size");
-
-    SendMessageA(hwTab, TCM_SETIMAGELIST, 0, (LPARAM)himl);
-
-    TABCHECKSETSIZE(hwTab, 50, 30, 50, 30, "with icon, set size > icon");
-    TABCHECKSETSIZE(hwTab, 20, 20, 25, 20, "with icon, set size < icon");
-    TABCHECKSETSIZE(hwTab, 0, 1, 25, 1, "with icon, min size");
-    SendMessageA(hwTab, TCM_SETPADDING, 0, MAKELPARAM(4, 4));
-    TABCHECKSETSIZE(hwTab, 0, 1, 25, 1, "set padding, min size");
-
-    DestroyWindow (hwTab);
-
-    hwTab = create_tabcontrol(0, TCIF_TEXT|TCIF_IMAGE);
-    SendMessageA(hwTab, TCM_SETMINTABWIDTH, 0, nMinTabWidth);
-
-    trace ("  non fixed width, with text...\n");
-    exp = max(size.cx +TAB_PADDING_X*2, (nMinTabWidth < 0) ? DEFAULT_MIN_TAB_WIDTH : nMinTabWidth);
-    SendMessageA( hwTab, TCM_GETITEMRECT, 0, (LPARAM)&rTab );
-    ok( rTab.right  - rTab.left == exp || broken(rTab.right  - rTab.left == DEFAULT_MIN_TAB_WIDTH),
-        "no icon, default width: Expected width [%d] got [%d]\n", exp, rTab.right - rTab.left );
-
-    for (i=0; i<8; i++)
-    {
-        INT nTabWidth = (nMinTabWidth < 0) ? TabWidthPadded(i, 2) : nMinTabWidth;
-
-        SendMessageA(hwTab, TCM_SETIMAGELIST, 0, 0);
-        SendMessageA(hwTab, TCM_SETPADDING, 0, MAKELPARAM(i, i));
-
-        TABCHECKSETSIZE(hwTab, 50, 20, max(size.cx + i*2, nTabWidth), 20, "no icon, set size");
-        TABCHECKSETSIZE(hwTab, 0, 1, max(size.cx + i*2, nTabWidth), 1, "no icon, min size");
-
-        SendMessageA(hwTab, TCM_SETIMAGELIST, 0, (LPARAM)himl);
-        nTabWidth = (nMinTabWidth < 0) ? TabWidthPadded(i, 3) : nMinTabWidth;
-
-        TABCHECKSETSIZE(hwTab, 50, 30, max(size.cx + 21 + i*3, nTabWidth), 30, "with icon, set size > icon");
-        TABCHECKSETSIZE(hwTab, 20, 20, max(size.cx + 21 + i*3, nTabWidth), 20, "with icon, set size < icon");
-        TABCHECKSETSIZE(hwTab, 0, 1, max(size.cx + 21 + i*3, nTabWidth), 1, "with icon, min size");
-    }
-    DestroyWindow (hwTab);
-
-    hwTab = create_tabcontrol(0, TCIF_IMAGE);
-    SendMessageA(hwTab, TCM_SETMINTABWIDTH, 0, nMinTabWidth);
-
-    trace ("  non fixed width, no text...\n");
-    exp = (nMinTabWidth < 0) ? DEFAULT_MIN_TAB_WIDTH : nMinTabWidth;
-    SendMessageA( hwTab, TCM_GETITEMRECT, 0, (LPARAM)&rTab );
-    ok( rTab.right  - rTab.left == exp || broken(rTab.right  - rTab.left == DEFAULT_MIN_TAB_WIDTH),
-        "no icon, default width: Expected width [%d] got [%d]\n", exp, rTab.right - rTab.left );
-
-    for (i=0; i<8; i++)
-    {
-        INT nTabWidth = (nMinTabWidth < 0) ? TabWidthPadded(i, 2) : nMinTabWidth;
-
-        SendMessageA(hwTab, TCM_SETIMAGELIST, 0, 0);
-        SendMessageA(hwTab, TCM_SETPADDING, 0, MAKELPARAM(i, i));
-
-        TABCHECKSETSIZE(hwTab, 50, 20, nTabWidth, 20, "no icon, set size");
-        TABCHECKSETSIZE(hwTab, 0, 1, nTabWidth, 1, "no icon, min size");
-
-        SendMessageA(hwTab, TCM_SETIMAGELIST, 0, (LPARAM)himl);
-        if (i > 1 && nMinTabWidth > 0 && nMinTabWidth < DEFAULT_MIN_TAB_WIDTH)
-            nTabWidth += EXTRA_ICON_PADDING *(i-1);
-
-        TABCHECKSETSIZE(hwTab, 50, 30, nTabWidth, 30, "with icon, set size > icon");
-        TABCHECKSETSIZE(hwTab, 20, 20, nTabWidth, 20, "with icon, set size < icon");
-        TABCHECKSETSIZE(hwTab, 0, 1, nTabWidth, 1, "with icon, min size");
-    }
-
-    DestroyWindow (hwTab);
-
-    ImageList_Destroy(himl);
-}
-
-static void test_width(void)
-{
-    trace ("Testing with default MinWidth\n");
-    test_tab(-1);
-    trace ("Testing with MinWidth set to -3\n");
-    test_tab(-3);
-    trace ("Testing with MinWidth set to 24\n");
-    test_tab(24);
-    trace ("Testing with MinWidth set to 54\n");
-    test_tab(54);
-    trace ("Testing with MinWidth set to 94\n");
-    test_tab(94);
-}
-
-static void test_curfocus(void)
-{
-    const INT nTabs = 5;
-    INT focusIndex;
-    HWND hTab;
-
-    hTab = createFilledTabControl(parent_wnd, TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE, nTabs);
-    ok(hTab != NULL, "Failed to create tab control\n");
-
-    flush_sequences(sequences, NUM_MSG_SEQUENCES);
-
-    /* Testing CurFocus with largest appropriate value */
-    SendMessageA(hTab, TCM_SETCURFOCUS, nTabs - 1, 0);
-    focusIndex = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0);
-    expect(nTabs-1, focusIndex);
-
-    /* Testing CurFocus with negative value */
-    SendMessageA(hTab, TCM_SETCURFOCUS, -10, 0);
-    focusIndex = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0);
-    expect(-1, focusIndex);
-
-    /* Testing CurFocus with value larger than number of tabs */
-    focusIndex = SendMessageA(hTab, TCM_SETCURSEL, 1, 0);
-    expect(-1, focusIndex);
-
-    SendMessageA(hTab, TCM_SETCURFOCUS, nTabs + 1, 0);
-    focusIndex = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0);
-    expect(1, focusIndex);
-
-    ok_sequence(sequences, TAB_SEQ_INDEX, getset_cur_focus_seq, "Getset curFoc test sequence", FALSE);
-
-    DestroyWindow(hTab);
-}
-
-static void test_cursel(void)
-{
-    const INT nTabs = 5;
-    INT selectionIndex;
-    INT focusIndex;
-    TCITEMA tcItem;
-    HWND hTab;
-
-    hTab = createFilledTabControl(parent_wnd, TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE, nTabs);
-    ok(hTab != NULL, "Failed to create tab control\n");
-
-    flush_sequences(sequences, NUM_MSG_SEQUENCES);
-
-    /* Testing CurSel with largest appropriate value */
-    selectionIndex = SendMessageA(hTab, TCM_SETCURSEL, nTabs - 1, 0);
-    expect(0, selectionIndex);
-    selectionIndex = SendMessageA(hTab, TCM_GETCURSEL, 0, 0);
-    expect(nTabs-1, selectionIndex);
-
-    /* Focus should switch with selection */
-    focusIndex = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0);
-    expect(nTabs-1, focusIndex);
-
-    /* Testing CurSel with negative value */
-    SendMessageA(hTab, TCM_SETCURSEL, -10, 0);
-    selectionIndex = SendMessageA(hTab, TCM_GETCURSEL, 0, 0);
-    expect(-1, selectionIndex);
-
-    /* Testing CurSel with value larger than number of tabs */
-    selectionIndex = SendMessageA(hTab, TCM_SETCURSEL, 1, 0);
-    expect(-1, selectionIndex);
-
-    selectionIndex = SendMessageA(hTab, TCM_SETCURSEL, nTabs + 1, 0);
-    expect(-1, selectionIndex);
-    selectionIndex = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0);
-    expect(1, selectionIndex);
-
-    ok_sequence(sequences, TAB_SEQ_INDEX, getset_cur_sel_seq, "Getset curSel test sequence", FALSE);
-    ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "Getset curSel test parent sequence", FALSE);
-
-    /* selected item should have TCIS_BUTTONPRESSED state
-       It doesn't depend on button state */
-    memset(&tcItem, 0, sizeof(TCITEMA));
-    tcItem.mask = TCIF_STATE;
-    tcItem.dwStateMask = TCIS_BUTTONPRESSED;
-    selectionIndex = SendMessageA(hTab, TCM_GETCURSEL, 0, 0);
-    SendMessageA(hTab, TCM_GETITEMA, selectionIndex, (LPARAM)&tcItem);
-    ok (tcItem.dwState & TCIS_BUTTONPRESSED || broken(tcItem.dwState == 0), /* older comctl32 */
-        "Selected item should have TCIS_BUTTONPRESSED\n");
-
-    /* now deselect all and check previously selected item state */
-    focusIndex = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0);
-    ok(focusIndex == 1, "got %d\n", focusIndex);
-
-    selectionIndex = SendMessageA(hTab, TCM_SETCURSEL, -1, 0);
-    ok(selectionIndex == 1, "got %d\n", selectionIndex);
-
-    memset(&tcItem, 0, sizeof(TCITEMA));
-
-    /* focus is reset too */
-    focusIndex = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0);
-    ok(focusIndex == -1, "got %d\n", focusIndex);
-
-    tcItem.mask = TCIF_STATE;
-    tcItem.dwStateMask = TCIS_BUTTONPRESSED;
-    SendMessageA(hTab, TCM_GETITEMA, selectionIndex, (LPARAM)&tcItem);
-    ok(tcItem.dwState == 0, "got state %d\n", tcItem.dwState);
-
-    DestroyWindow(hTab);
-}
-
-static void test_extendedstyle(void)
-{
-    const INT nTabs = 5;
-    DWORD prevExtendedStyle;
-    DWORD extendedStyle;
-    HWND hTab;
-
-    hTab = createFilledTabControl(parent_wnd, TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE, nTabs);
-    ok(hTab != NULL, "Failed to create tab control\n");
-
-    flush_sequences(sequences, NUM_MSG_SEQUENCES);
-
-    /* Testing Flat Separators */
-    extendedStyle = SendMessageA(hTab, TCM_GETEXTENDEDSTYLE, 0, 0);
-    prevExtendedStyle = SendMessageA(hTab, TCM_SETEXTENDEDSTYLE, 0, TCS_EX_FLATSEPARATORS);
-    expect(extendedStyle, prevExtendedStyle);
-
-    extendedStyle = SendMessageA(hTab, TCM_GETEXTENDEDSTYLE, 0, 0);
-    expect(TCS_EX_FLATSEPARATORS, extendedStyle);
-
-    /* Testing Register Drop */
-    prevExtendedStyle = SendMessageA(hTab, TCM_SETEXTENDEDSTYLE, 0, TCS_EX_REGISTERDROP);
-    expect(extendedStyle, prevExtendedStyle);
-
-    extendedStyle = SendMessageA(hTab, TCM_GETEXTENDEDSTYLE, 0, 0);
-    todo_wine{
-        expect(TCS_EX_REGISTERDROP, extendedStyle);
-    }
-
-    ok_sequence(sequences, TAB_SEQ_INDEX, getset_extended_style_seq, "Getset extendedStyle test sequence", FALSE);
-    ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "Getset extendedStyle test parent sequence", FALSE);
-
-    DestroyWindow(hTab);
-}
-
-static void test_unicodeformat(void)
-{
-    const INT nTabs = 5;
-    INT unicodeFormat;
-    HWND hTab;
-
-    hTab = createFilledTabControl(parent_wnd, TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE, nTabs);
-    ok(hTab != NULL, "Failed to create tab control\n");
-
-    flush_sequences(sequences, NUM_MSG_SEQUENCES);
-
-    unicodeFormat = SendMessageA(hTab, TCM_SETUNICODEFORMAT, TRUE, 0);
-    todo_wine{
-        expect(0, unicodeFormat);
-    }
-    unicodeFormat = SendMessageA(hTab, TCM_GETUNICODEFORMAT, 0, 0);
-    expect(1, unicodeFormat);
-
-    unicodeFormat = SendMessageA(hTab, TCM_SETUNICODEFORMAT, FALSE, 0);
-    expect(1, unicodeFormat);
-    unicodeFormat = SendMessageA(hTab, TCM_GETUNICODEFORMAT, 0, 0);
-    expect(0, unicodeFormat);
-
-    unicodeFormat = SendMessageA(hTab, TCM_SETUNICODEFORMAT, TRUE, 0);
-    expect(0, unicodeFormat);
-
-    ok_sequence(sequences, TAB_SEQ_INDEX, getset_unicode_format_seq, "Getset unicodeFormat test sequence", FALSE);
-    ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "Getset unicodeFormat test parent sequence", FALSE);
-
-    DestroyWindow(hTab);
-}
-
-static void test_getset_item(void)
-{
-    char szText[32] = "New Label";
-    const INT nTabs = 5;
-    TCITEMA tcItem;
-    LPARAM lparam;
-    DWORD ret;
-    HWND hTab;
-
-    hTab = CreateWindowA(
-       WC_TABCONTROLA,
-       "TestTab",
-       WS_CLIPSIBLINGS | WS_CLIPCHILDREN | TCS_FOCUSNEVER | TCS_FIXEDWIDTH | TCS_OWNERDRAWFIXED,
-        10, 10, 300, 100,
-        parent_wnd, NULL, NULL, 0);
-
-    ok(GetParent(hTab) == NULL, "got %p, expected null parent\n", GetParent(hTab));
-
-    ret = SendMessageA(hTab, TCM_SETITEMEXTRA, sizeof(LPARAM)-1, 0);
-    ok(ret == TRUE, "got %d\n", ret);
-
-    /* set some item data */
-    tcItem.lParam = ~0;
-    tcItem.mask = TCIF_PARAM;
-
-    ret = SendMessageA(hTab, TCM_INSERTITEMA, 0, (LPARAM)&tcItem);
-    ok(ret == 0, "got %d\n", ret);
-
-    /* all sizeof(LPARAM) returned anyway when using sizeof(LPARAM)-1 size */
-    memset(&lparam, 0xaa, sizeof(lparam));
-    tcItem.lParam = lparam;
-    tcItem.mask = TCIF_PARAM;
-    ret = SendMessageA(hTab, TCM_GETITEMA, 0, (LPARAM)&tcItem);
-    expect(TRUE, ret);
-    /* everything higher specified size is preserved */
-    memset(&lparam, 0xff, sizeof(lparam)-1);
-    ok(tcItem.lParam == lparam, "Expected 0x%lx, got 0x%lx\n", lparam, tcItem.lParam);
-
-    DestroyWindow(hTab);
-
-    hTab = createFilledTabControl(parent_wnd, TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE, nTabs);
-    ok(hTab != NULL, "Failed to create tab control\n");
-
-    /* passing invalid index should result in initialization to zero
-       for members mentioned in mask requested */
-
-    /* valid range here is [0,4] */
-    memset(&tcItem, 0xcc, sizeof(tcItem));
-    tcItem.mask = TCIF_PARAM;
-    ret = SendMessageA(hTab, TCM_GETITEMA, 5, (LPARAM)&tcItem);
-    expect(FALSE, ret);
-    ok(tcItem.lParam == 0, "Expected zero lParam, got %lu\n", tcItem.lParam);
-
-    memset(&tcItem, 0xcc, sizeof(tcItem));
-    tcItem.mask = TCIF_IMAGE;
-    ret = SendMessageA(hTab, TCM_GETITEMA, 5, (LPARAM)&tcItem);
-    expect(FALSE, ret);
-    expect(0, tcItem.iImage);
-
-    memset(&tcItem, 0xcc, sizeof(tcItem));
-    tcItem.mask = TCIF_TEXT;
-    tcItem.pszText = szText;
-    szText[0] = 'a';
-    ret = SendMessageA(hTab, TCM_GETITEMA, 5, (LPARAM)&tcItem);
-    expect(FALSE, ret);
-    expect('a', szText[0]);
-
-    memset(&tcItem, 0xcc, sizeof(tcItem));
-    tcItem.mask = TCIF_STATE;
-    tcItem.dwStateMask = 0;
-    tcItem.dwState = TCIS_BUTTONPRESSED;
-    ret = SendMessageA(hTab, TCM_GETITEMA, 5, (LPARAM)&tcItem);
-    expect(FALSE, ret);
-    ok(tcItem.dwState == 0, "Expected zero dwState, got %u\n", tcItem.dwState);
-
-    memset(&tcItem, 0xcc, sizeof(tcItem));
-    tcItem.mask = TCIF_STATE;
-    tcItem.dwStateMask = TCIS_BUTTONPRESSED;
-    tcItem.dwState = TCIS_BUTTONPRESSED;
-    ret = SendMessageA(hTab, TCM_GETITEMA, 5, (LPARAM)&tcItem);
-    expect(FALSE, ret);
-    ok(tcItem.dwState == 0, "Expected zero dwState\n");
-
-    /* check with negative index to be sure */
-    memset(&tcItem, 0xcc, sizeof(tcItem));
-    tcItem.mask = TCIF_PARAM;
-    ret = SendMessageA(hTab, TCM_GETITEMA, -1, (LPARAM)&tcItem);
-    expect(FALSE, ret);
-    ok(tcItem.lParam == 0, "Expected zero lParam, got %lu\n", tcItem.lParam);
-
-    memset(&tcItem, 0xcc, sizeof(tcItem));
-    tcItem.mask = TCIF_PARAM;
-    ret = SendMessageA(hTab, TCM_GETITEMA, -2, (LPARAM)&tcItem);
-    expect(FALSE, ret);
-    ok(tcItem.lParam == 0, "Expected zero lParam, got %lu\n", tcItem.lParam);
-
-    flush_sequences(sequences, NUM_MSG_SEQUENCES);
-
-    tcItem.mask = TCIF_TEXT;
-    tcItem.pszText = &szText[0];
-    tcItem.cchTextMax = sizeof(szText);
-
-    strcpy(szText, "New Label");
-    ok(SendMessageA(hTab, TCM_SETITEMA, 0, (LPARAM)&tcItem), "Setting new item failed.\n");
-    ok(SendMessageA(hTab, TCM_GETITEMA, 0, (LPARAM)&tcItem), "Getting item failed.\n");
-    expect_str("New Label", tcItem.pszText);
-
-    ok(SendMessageA(hTab, TCM_GETITEMA, 1, (LPARAM)&tcItem), "Getting item failed.\n");
-    expect_str("Tab 2", tcItem.pszText);
-
-    ok_sequence(sequences, TAB_SEQ_INDEX, getset_item_seq, "Getset item test sequence", FALSE);
-    ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "Getset item test parent sequence", FALSE);
-
-    /* TCIS_BUTTONPRESSED doesn't depend on tab style */
-    memset(&tcItem, 0, sizeof(tcItem));
-    tcItem.mask = TCIF_STATE;
-    tcItem.dwStateMask = TCIS_BUTTONPRESSED;
-    tcItem.dwState = TCIS_BUTTONPRESSED;
-    ok(SendMessageA(hTab, TCM_SETITEMA, 0, (LPARAM)&tcItem), "Setting new item failed.\n");
-    tcItem.dwState = 0;
-    ok(SendMessageA(hTab, TCM_GETITEMA, 0, (LPARAM)&tcItem), "Getting item failed.\n");
-    if (tcItem.dwState)
-    {
-        ok (tcItem.dwState == TCIS_BUTTONPRESSED, "TCIS_BUTTONPRESSED should be set.\n");
-        /* next highlight item, test that dwStateMask actually masks */
-        tcItem.mask = TCIF_STATE;
-        tcItem.dwStateMask = TCIS_HIGHLIGHTED;
-        tcItem.dwState = TCIS_HIGHLIGHTED;
-        ok(SendMessageA(hTab, TCM_SETITEMA, 0, (LPARAM)&tcItem), "Setting new item failed.\n");
-        tcItem.dwState = 0;
-        ok(SendMessageA(hTab, TCM_GETITEMA, 0, (LPARAM)&tcItem), "Getting item failed.\n");
-        ok (tcItem.dwState == TCIS_HIGHLIGHTED, "TCIS_HIGHLIGHTED should be set.\n");
-        tcItem.mask = TCIF_STATE;
-        tcItem.dwStateMask = TCIS_BUTTONPRESSED;
-        tcItem.dwState = 0;
-        ok(SendMessageA(hTab, TCM_GETITEMA, 0, (LPARAM)&tcItem), "Getting item failed.\n");
-        ok (tcItem.dwState == TCIS_BUTTONPRESSED, "TCIS_BUTTONPRESSED should be set.\n");
-    }
-    else win_skip( "Item state mask not supported\n" );
-
-    DestroyWindow(hTab);
-}
-
-static void test_getset_tooltips(void)
-{
-    char toolTipText[32] = "ToolTip Text Test";
-    const INT nTabs = 5;
-    HWND hTab, toolTip;
-
-    hTab = createFilledTabControl(parent_wnd, TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE, nTabs);
-    ok(hTab != NULL, "Failed to create tab control\n");
-
-    flush_sequences(sequences, NUM_MSG_SEQUENCES);
-
-    toolTip = create_tooltip(hTab, toolTipText);
-    SendMessageA(hTab, TCM_SETTOOLTIPS, (LPARAM)toolTip, 0);
-    ok(toolTip == (HWND)SendMessageA(hTab, TCM_GETTOOLTIPS, 0,0), "ToolTip was set incorrectly.\n");
-
-    SendMessageA(hTab, TCM_SETTOOLTIPS, 0, 0);
-    ok(!SendMessageA(hTab, TCM_GETTOOLTIPS, 0,0), "ToolTip was set incorrectly.\n");
-
-    ok_sequence(sequences, TAB_SEQ_INDEX, getset_tooltip_seq, "Getset tooltip test sequence", TRUE);
-    ok_sequence(sequences, PARENT_SEQ_INDEX, getset_tooltip_parent_seq, "Getset tooltip test parent sequence", TRUE);
-
-    DestroyWindow(hTab);
-}
-
-static void test_misc(void)
-{
-    const INT nTabs = 5;
-    HWND hTab;
-    RECT rTab;
-    INT nTabsRetrieved;
-    INT rowCount;
-    INT dpi;
-    HDC hdc;
-
-    ok(parent_wnd != NULL, "no parent window!\n");
-    flush_sequences(sequences, NUM_MSG_SEQUENCES);
-
-    hTab = createFilledTabControl(parent_wnd, TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE, nTabs);
-    ok(hTab != NULL, "Failed to create tab control\n");
-
-    if(!winetest_interactive)
-        ok_sequence(sequences, TAB_SEQ_INDEX, add_tab_to_parent,
-                    "Tab sequence, after adding tab control to parent", TRUE);
-    else
-        ok_sequence(sequences, TAB_SEQ_INDEX, add_tab_to_parent_interactive,
-                    "Tab sequence, after adding tab control to parent", TRUE);
-
-    if(!winetest_interactive)
-        ok_sequence(sequences, PARENT_SEQ_INDEX, add_tab_control_parent_seq,
-                    "Parent after sequence, adding tab control to parent", TRUE);
-    else
-        ok_sequence(sequences, PARENT_SEQ_INDEX, add_tab_control_parent_seq_interactive,
-                    "Parent after sequence, adding tab control to parent", TRUE);
-
-    flush_sequences(sequences, NUM_MSG_SEQUENCES);
-    ok(SendMessageA(hTab, TCM_SETMINTABWIDTH, 0, -1) > 0, "TCM_SETMINTABWIDTH returned < 0\n");
-    ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "Set minTabWidth test parent sequence", FALSE);
-
-    /* Testing GetItemCount */
-    flush_sequences(sequences, NUM_MSG_SEQUENCES);
-    nTabsRetrieved = SendMessageA(hTab, TCM_GETITEMCOUNT, 0, 0);
-    expect(nTabs, nTabsRetrieved);
-    ok_sequence(sequences, TAB_SEQ_INDEX, get_item_count_seq, "Get itemCount test sequence", FALSE);
-    ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "Getset itemCount test parent sequence", FALSE);
-
-    /* Testing GetRowCount */
-    flush_sequences(sequences, NUM_MSG_SEQUENCES);
-    rowCount = SendMessageA(hTab, TCM_GETROWCOUNT, 0, 0);
-    expect(1, rowCount);
-    ok_sequence(sequences, TAB_SEQ_INDEX, get_row_count_seq, "Get rowCount test sequence", FALSE);
-    ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "Get rowCount test parent sequence", FALSE);
-
-    /* Testing GetItemRect */
-    flush_sequences(sequences, NUM_MSG_SEQUENCES);
-    ok(SendMessageA(hTab, TCM_GETITEMRECT, 0, (LPARAM)&rTab), "GetItemRect failed.\n");
-
-    hdc = GetDC(hTab);
-    dpi = GetDeviceCaps(hdc, LOGPIXELSX);
-    ReleaseDC(hTab, hdc);
-    CHECKSIZE(hTab, dpi, -1 , "Default Width");
-    ok_sequence(sequences, TAB_SEQ_INDEX, get_item_rect_seq, "Get itemRect test sequence", FALSE);
-    ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "Get itemRect test parent sequence", FALSE);
-
-    DestroyWindow(hTab);
-}
-
-static void test_adjustrect(void)
-{
-    HWND hTab;
-    INT r;
-
-    ok(parent_wnd != NULL, "no parent window!\n");
-
-    hTab = createFilledTabControl(parent_wnd, TCS_FIXEDWIDTH, 0, 0);
-    ok(hTab != NULL, "Failed to create tab control\n");
-
-    r = SendMessageA(hTab, TCM_ADJUSTRECT, FALSE, 0);
-    expect(-1, r);
-
-    r = SendMessageA(hTab, TCM_ADJUSTRECT, TRUE, 0);
-    expect(-1, r);
-}
-
-static void test_insert_focus(void)
-{
-    HWND hTab;
-    INT nTabsRetrieved;
-    INT r;
-    TCITEMA tcNewTab;
-    DWORD mask = TCIF_TEXT|TCIF_IMAGE;
-    static char tabName[] = "TAB";
-    tcNewTab.mask = mask;
-    tcNewTab.pszText = tabName;
-
-    ok(parent_wnd != NULL, "no parent window!\n");
-
-    hTab = createFilledTabControl(parent_wnd, TCS_FIXEDWIDTH, mask, 0);
-    ok(hTab != NULL, "Failed to create tab control\n");
-
-    r = SendMessageA(hTab, TCM_GETCURSEL, 0, 0);
-    expect(-1, r);
-
-    flush_sequences(sequences, NUM_MSG_SEQUENCES);
-
-    nTabsRetrieved = SendMessageA(hTab, TCM_GETITEMCOUNT, 0, 0);
-    expect(0, nTabsRetrieved);
-
-    r = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0);
-    expect(-1, r);
-
-    tcNewTab.iImage = 1;
-    r = SendMessageA(hTab, TCM_INSERTITEMA, 1, (LPARAM)&tcNewTab);
-    expect(0, r);
-
-    nTabsRetrieved = SendMessageA(hTab, TCM_GETITEMCOUNT, 0, 0);
-    expect(1, nTabsRetrieved);
-
-    r = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0);
-    expect(0, r);
-
-    tcNewTab.iImage = 2;
-    r = SendMessageA(hTab, TCM_INSERTITEMA, 2, (LPARAM)&tcNewTab);
-    expect(1, r);
-
-    nTabsRetrieved = SendMessageA(hTab, TCM_GETITEMCOUNT, 0, 0);
-    expect(2, nTabsRetrieved);
-
-    r = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0);
-    expect(0, r);
-
-    r = SendMessageA(hTab, TCM_SETCURFOCUS, -1, 0);
-    expect(0, r);
-
-    r = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0);
-    expect(-1, r);
-
-    tcNewTab.iImage = 3;
-    r = SendMessageA(hTab, TCM_INSERTITEMA, 3, (LPARAM)&tcNewTab);
-    expect(2, r);
-
-    r = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0);
-    expect(2, r);
-
-    ok_sequence(sequences, TAB_SEQ_INDEX, insert_focus_seq, "insert_focus test sequence", FALSE);
-    ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "insert_focus parent test sequence", TRUE);
-
-    DestroyWindow(hTab);
-}
-
-static void test_delete_focus(void)
-{
-    HWND hTab;
-    INT nTabsRetrieved;
-    INT r;
-
-    ok(parent_wnd != NULL, "no parent window!\n");
-
-    hTab = createFilledTabControl(parent_wnd, TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE, 2);
-    ok(hTab != NULL, "Failed to create tab control\n");
-
-    flush_sequences(sequences, NUM_MSG_SEQUENCES);
-
-    nTabsRetrieved = SendMessageA(hTab, TCM_GETITEMCOUNT, 0, 0);
-    expect(2, nTabsRetrieved);
-
-    r = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0);
-    expect(0, r);
-
-    r = SendMessageA(hTab, TCM_DELETEITEM, 1, 0);
-    expect(1, r);
-
-    nTabsRetrieved = SendMessageA(hTab, TCM_GETITEMCOUNT, 0, 0);
-    expect(1, nTabsRetrieved);
-
-    r = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0);
-    expect(0, r);
-
-    r = SendMessageA(hTab, TCM_SETCURFOCUS, -1, 0);
-    expect(0, r);
-
-    r = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0);
-    expect(-1, r);
-
-    r = SendMessageA(hTab, TCM_DELETEITEM, 0, 0);
-    expect(1, r);
-
-    nTabsRetrieved = SendMessageA(hTab, TCM_GETITEMCOUNT, 0, 0);
-    expect(0, nTabsRetrieved);
-
-    r = SendMessageA(hTab, TCM_GETCURFOCUS, 0, 0);
-    expect(-1, r);
-
-    ok_sequence(sequences, TAB_SEQ_INDEX, delete_focus_seq, "delete_focus test sequence", FALSE);
-    ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "delete_focus parent test sequence", TRUE);
-
-    DestroyWindow(hTab);
-}
-
-static void test_removeimage(void)
-{
-    static const BYTE bits[32];
-    HWND hwTab;
-    INT i;
-    TCITEMA item;
-    HICON hicon;
-    HIMAGELIST himl = ImageList_Create(16, 16, ILC_COLOR, 3, 4);
-
-    hicon = CreateIcon(NULL, 16, 16, 1, 1, bits, bits);
-    ImageList_AddIcon(himl, hicon);
-    ImageList_AddIcon(himl, hicon);
-    ImageList_AddIcon(himl, hicon);
-
-    hwTab = create_tabcontrol(TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE);
-    SendMessageA(hwTab, TCM_SETIMAGELIST, 0, (LPARAM)himl);
-
-    memset(&item, 0, sizeof(TCITEMA));
-    item.mask = TCIF_IMAGE;
-
-    for(i = 0; i < 3; i++) {
-        SendMessageA(hwTab, TCM_GETITEMA, i, (LPARAM)&item);
-        expect(i, item.iImage);
-    }
-
-    /* remove image middle image */
-    SendMessageA(hwTab, TCM_REMOVEIMAGE, 1, 0);
-    expect(2, ImageList_GetImageCount(himl));
-    item.iImage = -1;
-    SendMessageA(hwTab, TCM_GETITEMA, 0, (LPARAM)&item);
-    expect(0, item.iImage);
-    item.iImage = 0;
-    SendMessageA(hwTab, TCM_GETITEMA, 1, (LPARAM)&item);
-    expect(-1, item.iImage);
-    item.iImage = 0;
-    SendMessageA(hwTab, TCM_GETITEMA, 2, (LPARAM)&item);
-    expect(1, item.iImage);
-    /* remove first image */
-    SendMessageA(hwTab, TCM_REMOVEIMAGE, 0, 0);
-    expect(1, ImageList_GetImageCount(himl));
-    item.iImage = 0;
-    SendMessageA(hwTab, TCM_GETITEMA, 0, (LPARAM)&item);
-    expect(-1, item.iImage);
-    item.iImage = 0;
-    SendMessageA(hwTab, TCM_GETITEMA, 1, (LPARAM)&item);
-    expect(-1, item.iImage);
-    item.iImage = -1;
-    SendMessageA(hwTab, TCM_GETITEMA, 2, (LPARAM)&item);
-    expect(0, item.iImage);
-    /* remove the last one */
-    SendMessageA(hwTab, TCM_REMOVEIMAGE, 0, 0);
-    expect(0, ImageList_GetImageCount(himl));
-    for(i = 0; i < 3; i++) {
-        item.iImage = 0;
-        SendMessageA(hwTab, TCM_GETITEMA, i, (LPARAM)&item);
-        expect(-1, item.iImage);
-    }
-
-    DestroyWindow(hwTab);
-    ImageList_Destroy(himl);
-    DestroyIcon(hicon);
-}
-
-static void test_delete_selection(void)
-{
-    HWND hTab;
-    INT ret;
-
-    hTab = createFilledTabControl(parent_wnd, TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE, 4);
-    ok(hTab != NULL, "Failed to create tab control\n");
-
-    ret = SendMessageA(hTab, TCM_SETCURSEL, 3, 0);
-    expect(0, ret);
-    ret = SendMessageA(hTab, TCM_GETCURSEL, 0, 0);
-    expect(3, ret);
-    /* delete selected item - selection goes to -1 */
-    ret = SendMessageA(hTab, TCM_DELETEITEM, 3, 0);
-    expect(TRUE, ret);
-
-    ret = SendMessageA(hTab, TCM_GETCURSEL, 0, 0);
-    expect(-1, ret);
-
-    DestroyWindow(hTab);
-}
-
-static void test_TCM_SETITEMEXTRA(void)
-{
-    HWND hTab;
-    DWORD ret;
-
-    hTab = CreateWindowA(
-       WC_TABCONTROLA,
-       "TestTab",
-       WS_CLIPSIBLINGS | WS_CLIPCHILDREN | TCS_FOCUSNEVER | TCS_FIXEDWIDTH,
-        10, 10, 300, 100,
-        parent_wnd, NULL, NULL, 0);
-
-    /* zero is valid size too */
-    ret = SendMessageA(hTab, TCM_SETITEMEXTRA, 0, 0);
-    if (ret == FALSE)
-    {
-        win_skip("TCM_SETITEMEXTRA not supported\n");
-        DestroyWindow(hTab);
-        return;
-    }
-
-    ret = SendMessageA(hTab, TCM_SETITEMEXTRA, -1, 0);
-    ok(ret == FALSE, "got %d\n", ret);
-
-    ret = SendMessageA(hTab, TCM_SETITEMEXTRA, 2, 0);
-    ok(ret == TRUE, "got %d\n", ret);
-    DestroyWindow(hTab);
-
-    /* it's not possible to change extra data size for control with tabs */
-    hTab = createFilledTabControl(parent_wnd, TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE, 4);
-    ok(hTab != NULL, "Failed to create tab control\n");
-
-    ret = SendMessageA(hTab, TCM_SETITEMEXTRA, 2, 0);
-    ok(ret == FALSE, "got %d\n", ret);
-    DestroyWindow(hTab);
-}
-
-static void test_TCS_OWNERDRAWFIXED(void)
-{
-    LPARAM lparam;
-    ULONG_PTR itemdata, itemdata2;
-    TCITEMA item;
-    HWND hTab;
-    BOOL ret;
-
-    hTab = createFilledTabControl(parent_wnd, TCS_FIXEDWIDTH|TCS_OWNERDRAWFIXED, TCIF_TEXT|TCIF_IMAGE, 4);
-    ok(hTab != NULL, "Failed to create tab control\n");
-
-    ok(GetParent(hTab) == NULL, "got %p, expected null parent\n", GetParent(hTab));
-
-    /* set some item data */
-    memset(&lparam, 0xde, sizeof(LPARAM));
-
-    item.mask = TCIF_PARAM;
-    item.lParam = lparam;
-    ret = SendMessageA(hTab, TCM_SETITEMA, 0, (LPARAM)&item);
-    ok(ret == TRUE, "got %d\n", ret);
-
-    memset(&g_drawitem, 0, sizeof(g_drawitem));
-
-    ShowWindow(hTab, SW_SHOW);
-    RedrawWindow(hTab, NULL, 0, RDW_UPDATENOW);
-
-    itemdata = 0;
-    memset(&itemdata, 0xde, 4);
-    ok(g_drawitem.itemData == itemdata, "got 0x%lx, expected 0x%lx\n", g_drawitem.itemData, itemdata);
-
-    DestroyWindow(hTab);
-
-    /* now with custom extra data length */
-    hTab = CreateWindowA(
-       WC_TABCONTROLA,
-       "TestTab",
-       WS_CLIPSIBLINGS | WS_CLIPCHILDREN | TCS_FOCUSNEVER | TCS_FIXEDWIDTH | TCS_OWNERDRAWFIXED,
-        10, 10, 300, 100,
-        parent_wnd, NULL, NULL, 0);
-
-    ok(GetParent(hTab) == NULL, "got %p, expected null parent\n", GetParent(hTab));
-
-    ret = SendMessageA(hTab, TCM_SETITEMEXTRA, sizeof(LPARAM)+1, 0);
-    ok(ret == TRUE, "got %d\n", ret);
-
-    /* set some item data */
-    memset(&lparam, 0xde, sizeof(LPARAM));
-    item.mask = TCIF_PARAM;
-    item.lParam = lparam;
-
-    ret = SendMessageA(hTab, TCM_INSERTITEMA, 0, (LPARAM)&item);
-    ok(ret == 0, "got %d\n", ret);
-
-    memset(&g_drawitem, 0, sizeof(g_drawitem));
-
-    ShowWindow(hTab, SW_SHOW);
-    RedrawWindow(hTab, NULL, 0, RDW_UPDATENOW);
-
-    memset(&itemdata, 0xde, sizeof(ULONG_PTR));
-    ok(*(ULONG_PTR*)g_drawitem.itemData == itemdata, "got 0x%lx, expected 0x%lx\n", g_drawitem.itemData, itemdata);
-
-    DestroyWindow(hTab);
-
-    /* same thing, but size smaller than default */
-    hTab = CreateWindowA(
-       WC_TABCONTROLA,
-       "TestTab",
-       WS_CLIPSIBLINGS | WS_CLIPCHILDREN | TCS_FOCUSNEVER | TCS_FIXEDWIDTH | TCS_OWNERDRAWFIXED,
-        10, 10, 300, 100,
-        parent_wnd, NULL, NULL, 0);
-
-    ok(GetParent(hTab) == NULL, "got %p, expected null parent\n", GetParent(hTab));
-
-    ret = SendMessageA(hTab, TCM_SETITEMEXTRA, sizeof(LPARAM)-1, 0);
-    ok(ret == TRUE, "got %d\n", ret);
-
-    memset(&lparam, 0xde, sizeof(lparam));
-    item.mask = TCIF_PARAM;
-    item.lParam = lparam;
-
-    ret = SendMessageA(hTab, TCM_INSERTITEMA, 0, (LPARAM)&item);
-    ok(ret == 0, "got %d\n", ret);
-
-    memset(&g_drawitem, 0, sizeof(g_drawitem));
-
-    ShowWindow(hTab, SW_SHOW);
-    RedrawWindow(hTab, NULL, 0, RDW_UPDATENOW);
-
-    itemdata = itemdata2 = 0;
-    memset(&itemdata, 0xde, 4);
-    memset(&itemdata2, 0xde, sizeof(LPARAM)-1);
-    ok(g_drawitem.itemData == itemdata || broken(g_drawitem.itemData == itemdata2) /* win98 */,
-        "got 0x%lx, expected 0x%lx\n", g_drawitem.itemData, itemdata);
-
-    DestroyWindow(hTab);
-}
-
-static void test_WM_CONTEXTMENU(void)
-{
-    HWND hTab;
-
-    hTab = createFilledTabControl(parent_wnd, TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE, 4);
-    ok(hTab != NULL, "Failed to create tab control\n");
-
-    flush_sequences(sequences, NUM_MSG_SEQUENCES);
-
-    SendMessageA(hTab, WM_RBUTTONUP, 0, 0);
-
-    ok_sequence(sequences, TAB_SEQ_INDEX, rbuttonup_seq, "WM_RBUTTONUP response sequence", FALSE);
-
-    DestroyWindow(hTab);
-}
-
-struct tabcreate_style {
-    DWORD style;
-    DWORD act_style;
-};
-
-static const struct tabcreate_style create_styles[] =
-{
-    { WS_CHILD|TCS_BOTTOM|TCS_VERTICAL, WS_CHILD|WS_CLIPSIBLINGS|TCS_BOTTOM|TCS_VERTICAL|TCS_MULTILINE },
-    { WS_CHILD|TCS_VERTICAL,            WS_CHILD|WS_CLIPSIBLINGS|TCS_VERTICAL|TCS_MULTILINE },
-    { 0 }
-};
-
-static void test_create(void)
-{
-    const struct tabcreate_style *ptr = create_styles;
-    DWORD style;
-    HWND hTab;
-
-    while (ptr->style)
-    {
-        hTab = CreateWindowA(WC_TABCONTROLA, "TestTab", ptr->style,
-            10, 10, 300, 100, parent_wnd, NULL, NULL, 0);
-        style = GetWindowLongA(hTab, GWL_STYLE);
-        ok(style == ptr->act_style, "expected style 0x%08x, got style 0x%08x\n", ptr->act_style, style);
-
-        DestroyWindow(hTab);
-        ptr++;
-    }
-}
-
-START_TEST(tab)
-{
-    LOGFONTA logfont;
-
-    lstrcpyA(logfont.lfFaceName, "Arial");
-    memset(&logfont, 0, sizeof(logfont));
-    logfont.lfHeight = -12;
-    logfont.lfWeight = FW_NORMAL;
-    logfont.lfCharSet = ANSI_CHARSET;
-    hFont = CreateFontIndirectA(&logfont);
-
-    InitCommonControls();
-
-    test_width();
-
-    init_msg_sequences(sequences, NUM_MSG_SEQUENCES);
-
-    parent_wnd = createParentWindow();
-    ok(parent_wnd != NULL, "Failed to create parent window!\n");
-
-    test_curfocus();
-    test_cursel();
-    test_extendedstyle();
-    test_unicodeformat();
-    test_getset_item();
-    test_getset_tooltips();
-    test_misc();
-
-    test_adjustrect();
-
-    test_insert_focus();
-    test_delete_focus();
-    test_delete_selection();
-    test_removeimage();
-    test_TCM_SETITEMEXTRA();
-    test_TCS_OWNERDRAWFIXED();
-    test_WM_CONTEXTMENU();
-    test_create();
-
-    DestroyWindow(parent_wnd);
-}