[PATCH 4/5] comctl32/tests: Add tests for LB_INITSTORAGE

Gabriel Ivăncescu gabrielopcode at gmail.com
Thu Feb 7 05:56:20 CST 2019


On 2/7/19 1:35 PM, Huw Davies wrote:
> On Thu, Feb 07, 2019 at 01:16:39PM +0200, Gabriel Ivăncescu wrote:
>> On 2/7/19 11:55 AM, Huw Davies wrote:
>>> On Thu, Jan 31, 2019 at 05:23:22PM +0200, Gabriel Ivăncescu wrote:
>>>> Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
>>>> ---
>>>>    dlls/comctl32/tests/listbox.c | 64 +++++++++++++++++++++++++++++++++++
>>>>    1 file changed, 64 insertions(+)
>>>>
>>>> diff --git a/dlls/comctl32/tests/listbox.c b/dlls/comctl32/tests/listbox.c
>>>> index e789483..68e4073 100644
>>>> --- a/dlls/comctl32/tests/listbox.c
>>>> +++ b/dlls/comctl32/tests/listbox.c
>>>> @@ -1906,6 +1906,69 @@ static void test_GetListBoxInfo(void)
>>>>        DestroyWindow(parent);
>>>>    }
>>>> +static void test_init_storage( void )
>>>> +{
>>>> +    static const DWORD styles[] =
>>>> +    {
>>>> +        LBS_HASSTRINGS,
>>>> +        LBS_NODATA | LBS_OWNERDRAWFIXED,
>>>> +    };
>>>> +    HWND parent, listbox;
>>>> +    LONG ret, items_size;
>>>> +    int i, j;
>>>> +
>>>> +    parent = create_parent();
>>>> +    for (i = 0; i < ARRAY_SIZE(styles); i++)
>>>> +    {
>>>> +        listbox = CreateWindowA(WC_LISTBOXA, "TestList", styles[i] | WS_CHILD,
>>>> +                                0, 0, 100, 100, parent, (HMENU)ID_LISTBOX, NULL, 0);
>>>> +
>>>> +        items_size = SendMessageA(listbox, LB_INITSTORAGE, 100, 0);
>>>> +        ok(items_size >= 100, "expected at least 100, got %d\n", items_size);
>>>> +
>>>> +        ret = SendMessageA(listbox, LB_INITSTORAGE, 0, 0);
>>>> +        ok(ret == items_size, "expected %d, got %d\n", items_size, ret);
>>>> +
>>>> +        /* it doesn't grow since the space was already reserved */
>>>> +        ret = SendMessageA(listbox, LB_INITSTORAGE, items_size, 0);
>>>> +        ok(ret == items_size, "expected %d, got %d\n", items_size, ret);
>>>> +
>>>> +        /* it doesn't shrink the reserved space */
>>>> +        ret = SendMessageA(listbox, LB_INITSTORAGE, 42, 0);
>>>> +        ok(ret == items_size, "expected %d, got %d\n", items_size, ret);
>>>> +
>>>> +        /* now populate almost all of it so it's not reserved anymore */
>>>> +        if (styles[i] & LBS_NODATA)
>>>> +        {
>>>> +            ret = SendMessageA(listbox, LB_SETCOUNT, items_size - 1, 0);
>>>> +            ok(ret == 0, "unexpected return value %d\n", ret);
>>>> +        }
>>>> +        else
>>>> +        {
>>>> +            for (j = 0; j < items_size - 1; j++)
>>>> +            {
>>>> +                ret = SendMessageA(listbox, LB_INSERTSTRING, -1, (LPARAM)"");
>>>> +                ok(ret == j, "expected %d, got %d\n", j, ret);
>>>> +            }
>>>> +        }
>>>> +
>>>> +        /* we still have one more reserved slot, so it doesn't grow yet */
>>>> +        ret = SendMessageA(listbox, LB_INITSTORAGE, 1, 0);
>>>> +        ok(ret == items_size, "expected %d, got %d\n", items_size, ret);
>>>> +
>>>> +        /* fill the slot and check again, it should grow this time */
>>>> +        ret = SendMessageA(listbox, LB_INSERTSTRING, -1, (LPARAM)"");
>>>
>>> Don't you need to treat the NODATA case separately here just as you do above?
>>>
>>
>> I don't think so, but perhaps I'm missing something.
>>
>> I treat it specially above because I want to also test SETCOUNT's behavior
>> for init storage (test if it reserves or not, etc) and it only works with
>> NODATA so it has to be special cased. The init storage itself should be the
>> same.
> 
> So does LB_INSERTSTRING really fill up a slot in the NODATA case?  That seems
> odd, but ok.
> 

Heh yeah, it does work but obviously adds no data to it (it does seem to 
separate reserved from "allocated" though, even if it's virtual for 
LBS_NODATA). Seems weird but it's just Microsoft's naming for 
INSERTSTRING :-)



More information about the wine-devel mailing list