[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