enumerator_sequence_unittest_.h
来自「用STL的方式封装了WindowsAPI、COM调用、ACE、ATL、MFC、W」· C头文件 代码 · 共 1,065 行 · 第 1/3 页
H
1,065 行
guids[13] = IID_IPersist;
ss_bool_t bSuccess = true;
LPUNKNOWN punkEnum = NULL;
HRESULT hr = winstl::dl_call<HRESULT>(hinst, winstl::fn_desc<STLSOFT_STDCALL_VALUE>(MAKEINTRESOURCE(146)), guids, STLSOFT_NUM_ELEMENTS(guids), reinterpret_cast<void**>(&punkEnum));
if(FAILED(hr))
{
r->report("Failed to create GUID enumerator from Synesis COM server");
bSuccess = false;
}
else
{
// 1. input_cloning_policy
{
r->report("input_cloning_policy", -1, NULL);
typedef enumerator_sequence<IEnumGUID
, GUID
, GUID_policy
, GUID
, input_cloning_policy<IEnumGUID>
, 10
> enumerator_t;
{ for(cs_size_t q = 0; q < enumerator_t::retrievalQuanta; ++q)
{
LPENUMGUID lpenStr;
hr = punkEnum->QueryInterface(IID_IEnumGUID_(), reinterpret_cast<void**>(&lpenStr));
if(FAILED(hr))
{
r->report("Failed to retrieve required enumerator interface from enumerator object", __LINE__);
bSuccess = false;
}
else
{
enumerator_t en(lpenStr, false, q); // Eat the reference
char msg[101];
::sprintf(&msg[0], "Enumerating GUIDs using IEnumGUID; quanta=%u", q);
r->report(msg, -1, NULL);
enumerator_t::iterator b = en.begin();
enumerator_t::iterator e = en.end();
{ for(size_t i = 0; i < STLSOFT_NUM_ELEMENTS(guids); ++i)
{
if(en.end() == b)
{
r->report("Enumerator sequence contains the wrong number of elements", __LINE__);
bSuccess = false;
}
else
{
if(*b != guids[i])
{
r->report("Enumerator sequence element contains the wrong value", __LINE__);
bSuccess = false;
}
++b;
}
}}
if(en.end() != b)
{
r->report("Enumerator sequence contains the wrong number of elements", __LINE__);
bSuccess = false;
}
}
}}
}
// 2. input_cloning_policy with copying
{
r->report("input_cloning_policy with copying", -1, NULL);
typedef enumerator_sequence<IEnumGUID
, GUID
, GUID_policy
, GUID
, input_cloning_policy<IEnumGUID>
, 10
> enumerator_t;
{ for(cs_size_t q = 0; q < enumerator_t::retrievalQuanta; ++q)
{
LPENUMGUID lpenStr;
hr = punkEnum->QueryInterface(IID_IEnumGUID_(), reinterpret_cast<void**>(&lpenStr));
if(FAILED(hr))
{
r->report("Failed to retrieve required enumerator interface from enumerator object", __LINE__);
bSuccess = false;
}
else
{
enumerator_t en(lpenStr, false, q); // Eat the reference
char msg[101];
::sprintf(&msg[0], "Enumerating GUIDs using IEnumGUID; quanta=%u", q);
r->report(msg, -1, NULL);
enumerator_t::iterator b = en.begin();
enumerator_t::iterator e = en.end();
{ for(size_t i = 0; i < STLSOFT_NUM_ELEMENTS(guids); ++i)
{
enumerator_t::iterator b2 = b;
b = b2;
if(en.end() == b)
{
r->report("Enumerator sequence contains the wrong number of elements", __LINE__);
bSuccess = false;
}
else
{
if(*b != guids[i])
{
r->report("Enumerator sequence element contains the wrong value", __LINE__);
bSuccess = false;
}
b2 = b;
++b2;
b = b2;
}
}}
if(en.end() != b)
{
r->report("Enumerator sequence contains the wrong number of elements", __LINE__);
bSuccess = false;
}
}
}}
}
// 3. cloneable_cloning_policy
{
r->report("cloneable_cloning_policy", -1, NULL);
typedef enumerator_sequence<IEnumGUID
, GUID
, GUID_policy
, GUID
, cloneable_cloning_policy<IEnumGUID>
, 10
> enumerator_t;
{ for(cs_size_t q = 0; q < enumerator_t::retrievalQuanta; ++q)
{
LPENUMGUID lpenStr;
hr = punkEnum->QueryInterface(IID_IEnumGUID_(), reinterpret_cast<void**>(&lpenStr));
if(FAILED(hr))
{
r->report("Failed to retrieve required enumerator interface from enumerator object", __LINE__);
bSuccess = false;
}
else
{
enumerator_t en(lpenStr, false, q); // Eat the reference
char msg[101];
::sprintf(&msg[0], "Enumerating GUIDs using IEnumGUID; quanta=%u", q);
r->report(msg, -1, NULL);
enumerator_t::iterator b = en.begin();
enumerator_t::iterator e = en.end();
{ for(size_t i = 0; i < STLSOFT_NUM_ELEMENTS(guids); ++i)
{
if(en.end() == b)
{
r->report("Enumerator sequence contains the wrong number of elements", __LINE__);
bSuccess = false;
}
else
{
if(*b != guids[i])
{
r->report("Enumerator sequence element contains the wrong value", __LINE__);
bSuccess = false;
}
++b;
}
}}
if(en.end() != b)
{
r->report("Enumerator sequence contains the wrong number of elements", __LINE__);
bSuccess = false;
}
}
}}
}
// 4. cloneable_cloning_policy with copying
{
r->report("cloneable_cloning_policy with copying", -1, NULL);
typedef enumerator_sequence<IEnumGUID
, GUID
, GUID_policy
, GUID
, cloneable_cloning_policy<IEnumGUID>
, 10
> enumerator_t;
{ for(cs_size_t q = 0; q < enumerator_t::retrievalQuanta; ++q)
{
LPENUMGUID lpenStr;
hr = punkEnum->QueryInterface(IID_IEnumGUID_(), reinterpret_cast<void**>(&lpenStr));
if(FAILED(hr))
{
r->report("Failed to retrieve required enumerator interface from enumerator object", __LINE__);
bSuccess = false;
}
else
{
enumerator_t en(lpenStr, false, q); // Eat the reference
char msg[101];
::sprintf(&msg[0], "Enumerating GUIDs using IEnumGUID; quanta=%u", q);
r->report(msg, -1, NULL);
enumerator_t::iterator b = en.begin();
enumerator_t::iterator e = en.end();
{ for(size_t i = 0; i < STLSOFT_NUM_ELEMENTS(guids); ++i)
{
enumerator_t::iterator b2 = b;
b = b2;
if(en.end() == b)
{
r->report("Enumerator sequence contains the wrong number of elements", __LINE__);
bSuccess = false;
}
else
{
if(*b != guids[i])
{
r->report("Enumerator sequence element contains the wrong value", __LINE__);
bSuccess = false;
}
b2 = b;
++b2;
b = b2;
}
}}
if(en.end() != b)
{
r->report("Enumerator sequence contains the wrong number of elements", __LINE__);
bSuccess = false;
}
}
}}
}
// 5. forward_cloning_policy with copying
{
r->report("forward_cloning_policy with copying", -1, NULL);
typedef enumerator_sequence<IEnumGUID
, GUID
, GUID_policy
, GUID
, forward_cloning_policy<IEnumGUID>
, 10
> enumerator_t;
{ for(cs_size_t q = 0; q < enumerator_t::retrievalQuanta; ++q)
{
LPENUMGUID lpenStr;
hr = punkEnum->QueryInterface(IID_IEnumGUID_(), reinterpret_cast<void**>(&lpenStr));
if(FAILED(hr))
{
r->report("Failed to retrieve required enumerator interface from enumerator object", __LINE__);
bSuccess = false;
}
else
{
enumerator_t en(lpenStr, false, q); // Eat the reference
char msg[101];
::sprintf(&msg[0], "Enumerating GUIDs using IEnumGUID; quanta=%u", q);
r->report(msg, -1, NULL);
enumerator_t::iterator b = en.begin();
enumerator_t::iterator e = en.end();
{ for(size_t i = 0; i < STLSOFT_NUM_ELEMENTS(guids); ++i)
{
enumerator_t::iterator b2 = b;
b = b2;
if(en.end() == b)
{
r->report("Enumerator sequence contains the wrong number of elements", __LINE__);
bSuccess = false;
}
else
{
if(*b != guids[i])
{
r->report("Enumerator sequence element contains the wrong value", __LINE__);
bSuccess = false;
}
b2 = b;
++b2;
b = b2;
}
}}
if(en.end() != b)
{
r->report("Enumerator sequence contains the wrong number of elements", __LINE__);
bSuccess = false;
}
}
}}
}
// 6. forward_cloning_policy with comparison
{
r->report("forward_cloning_policy with comparison", -1, NULL);
typedef enumerator_sequence<IEnumGUID
, GUID
, GUID_policy
, GUID
, forward_cloning_policy<IEnumGUID>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?