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

Huw Davies huw at codeweavers.com
Thu Feb 7 05:35:47 CST 2019


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.



More information about the wine-devel mailing list