qmgr: Implement IEnumBackgroundCopyJobs_Next.
This commit is contained in:
parent
8dfba77c8c
commit
1317e3115a
|
@ -73,15 +73,41 @@ static ULONG WINAPI BITS_IEnumBackgroundCopyJobs_Release(
|
||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** IEnumBackgroundCopyJobs methods ***/
|
|
||||||
static HRESULT WINAPI BITS_IEnumBackgroundCopyJobs_Next(
|
static HRESULT WINAPI BITS_IEnumBackgroundCopyJobs_Next(
|
||||||
IEnumBackgroundCopyJobs* iface,
|
IEnumBackgroundCopyJobs* iface,
|
||||||
ULONG celt,
|
ULONG celt,
|
||||||
IBackgroundCopyJob **rgelt,
|
IBackgroundCopyJob **rgelt,
|
||||||
ULONG *pceltFetched)
|
ULONG *pceltFetched)
|
||||||
{
|
{
|
||||||
FIXME("Not implemented\n");
|
EnumBackgroundCopyJobsImpl *This = (EnumBackgroundCopyJobsImpl *) iface;
|
||||||
return E_NOTIMPL;
|
ULONG fetched;
|
||||||
|
ULONG i;
|
||||||
|
IBackgroundCopyJob *job;
|
||||||
|
|
||||||
|
fetched = min(celt, This->numJobs - This->indexJobs);
|
||||||
|
if (pceltFetched)
|
||||||
|
*pceltFetched = fetched;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* We need to initialize this array if the caller doesn't request
|
||||||
|
the length because length_is will default to celt. */
|
||||||
|
for (i = 0; i < celt; ++i)
|
||||||
|
rgelt[i] = NULL;
|
||||||
|
|
||||||
|
/* pceltFetched can only be NULL if celt is 1 */
|
||||||
|
if (celt != 1)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fill in the array of objects */
|
||||||
|
for (i = 0; i < fetched; ++i)
|
||||||
|
{
|
||||||
|
job = This->jobs[This->indexJobs++];
|
||||||
|
IBackgroundCopyJob_AddRef(job);
|
||||||
|
rgelt[i] = job;
|
||||||
|
}
|
||||||
|
|
||||||
|
return fetched == celt ? S_OK : S_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI BITS_IEnumBackgroundCopyJobs_Skip(
|
static HRESULT WINAPI BITS_IEnumBackgroundCopyJobs_Skip(
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* Unit test suite for Enum Background Copy Jobs Interface
|
* Unit test suite for Enum Background Copy Jobs Interface
|
||||||
*
|
*
|
||||||
* Copyright 2007 Google (Roy Shea)
|
* Copyright 2007 Google (Roy Shea, Dan Hipschman)
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -31,6 +31,7 @@ static const WCHAR test_displayNameB[] = {'T','e','s','t','B', 0};
|
||||||
static IBackgroundCopyManager *test_manager;
|
static IBackgroundCopyManager *test_manager;
|
||||||
static IBackgroundCopyJob *test_jobA;
|
static IBackgroundCopyJob *test_jobA;
|
||||||
static IBackgroundCopyJob *test_jobB;
|
static IBackgroundCopyJob *test_jobB;
|
||||||
|
static ULONG test_jobCountB;
|
||||||
static IEnumBackgroundCopyJobs *test_enumJobsA;
|
static IEnumBackgroundCopyJobs *test_enumJobsA;
|
||||||
static IEnumBackgroundCopyJobs *test_enumJobsB;
|
static IEnumBackgroundCopyJobs *test_enumJobsB;
|
||||||
static GUID test_jobIdA;
|
static GUID test_jobIdA;
|
||||||
|
@ -73,6 +74,10 @@ static BOOL setup(void)
|
||||||
if(hres != S_OK)
|
if(hres != S_OK)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
hres = IEnumBackgroundCopyJobs_GetCount(test_enumJobsB, &test_jobCountB);
|
||||||
|
if (hres != S_OK)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -125,12 +130,118 @@ static void test_GetCount(void)
|
||||||
ok(jobCountB == jobCountA + 1, "Got incorrect count\n");
|
ok(jobCountB == jobCountA + 1, "Got incorrect count\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Test Next with a NULL pceltFetched*/
|
||||||
|
static void test_Next_walkListNull(void)
|
||||||
|
{
|
||||||
|
HRESULT hres;
|
||||||
|
IBackgroundCopyJob *job;
|
||||||
|
ULONG i;
|
||||||
|
|
||||||
|
/* Fetch the available jobs */
|
||||||
|
for (i = 0; i < test_jobCountB; i++)
|
||||||
|
{
|
||||||
|
hres = IEnumBackgroundCopyJobs_Next(test_enumJobsB, 1, &job, NULL);
|
||||||
|
ok(hres == S_OK, "Next failed: %08x\n", hres);
|
||||||
|
if(hres != S_OK)
|
||||||
|
{
|
||||||
|
skip("Unable to get job from Next\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
IBackgroundCopyJob_Release(job);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Attempt to fetch one more than the number of available jobs */
|
||||||
|
hres = IEnumBackgroundCopyJobs_Next(test_enumJobsB, 1, &job, NULL);
|
||||||
|
ok(hres == S_FALSE, "Next off end of available jobs failed: %08x\n", hres);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test Next */
|
||||||
|
static void test_Next_walkList_1(void)
|
||||||
|
{
|
||||||
|
HRESULT hres;
|
||||||
|
IBackgroundCopyJob *job;
|
||||||
|
ULONG fetched;
|
||||||
|
ULONG i;
|
||||||
|
|
||||||
|
/* Fetch the available jobs */
|
||||||
|
for (i = 0; i < test_jobCountB; i++)
|
||||||
|
{
|
||||||
|
fetched = 0;
|
||||||
|
hres = IEnumBackgroundCopyJobs_Next(test_enumJobsB, 1, &job, &fetched);
|
||||||
|
ok(hres == S_OK, "Next failed: %08x\n", hres);
|
||||||
|
if(hres != S_OK)
|
||||||
|
{
|
||||||
|
skip("Unable to get job from Next\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ok(fetched == 1, "Next returned the incorrect number of jobs: %08x\n", hres);
|
||||||
|
IBackgroundCopyJob_Release(job);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Attempt to fetch one more than the number of available jobs */
|
||||||
|
fetched = 0;
|
||||||
|
hres = IEnumBackgroundCopyJobs_Next(test_enumJobsB, 1, &job, &fetched);
|
||||||
|
ok(hres == S_FALSE, "Next off end of available jobs failed: %08x\n", hres);
|
||||||
|
ok(fetched == 0, "Next returned the incorrect number of jobs: %08x\n", hres);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test Next by requesting multiple files at a time */
|
||||||
|
static void test_Next_walkList_2(void)
|
||||||
|
{
|
||||||
|
HRESULT hres;
|
||||||
|
IBackgroundCopyJob **jobs;
|
||||||
|
ULONG fetched;
|
||||||
|
ULONG i;
|
||||||
|
|
||||||
|
jobs = HeapAlloc(GetProcessHeap(), 0, test_jobCountB * sizeof *jobs);
|
||||||
|
if (!jobs)
|
||||||
|
{
|
||||||
|
skip("Couldn't allocate memory\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < test_jobCountB; i++)
|
||||||
|
jobs[i] = NULL;
|
||||||
|
|
||||||
|
fetched = 0;
|
||||||
|
hres = IEnumBackgroundCopyJobs_Next(test_enumJobsB, test_jobCountB, jobs, &fetched);
|
||||||
|
ok(hres == S_OK, "Next failed: %08x\n", hres);
|
||||||
|
if(hres != S_OK)
|
||||||
|
{
|
||||||
|
skip("Unable to get file from test_enumJobs\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ok(fetched == test_jobCountB, "Next returned the incorrect number of jobs: %08x\n", hres);
|
||||||
|
|
||||||
|
for (i = 0; i < test_jobCountB; i++)
|
||||||
|
{
|
||||||
|
ok(jobs[i] != NULL, "Next returned NULL\n");
|
||||||
|
if (jobs[i])
|
||||||
|
IBackgroundCopyFile_Release(jobs[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test Next Error conditions */
|
||||||
|
static void test_Next_errors(void)
|
||||||
|
{
|
||||||
|
HRESULT hres;
|
||||||
|
IBackgroundCopyJob *jobs[2];
|
||||||
|
|
||||||
|
/* E_INVALIDARG: pceltFetched can ONLY be NULL if celt is 1 */
|
||||||
|
hres = IEnumBackgroundCopyJobs_Next(test_enumJobsB, 2, jobs, NULL);
|
||||||
|
ok(hres != S_OK, "Invalid call to Next succeeded: %08x\n", hres);
|
||||||
|
}
|
||||||
|
|
||||||
typedef void (*test_t)(void);
|
typedef void (*test_t)(void);
|
||||||
|
|
||||||
START_TEST(enum_jobs)
|
START_TEST(enum_jobs)
|
||||||
{
|
{
|
||||||
static const test_t tests[] = {
|
static const test_t tests[] = {
|
||||||
test_GetCount,
|
test_GetCount,
|
||||||
|
test_Next_walkListNull,
|
||||||
|
test_Next_walkList_1,
|
||||||
|
test_Next_walkList_2,
|
||||||
|
test_Next_errors,
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
const test_t *test;
|
const test_t *test;
|
||||||
|
|
Loading…
Reference in New Issue