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 + -
显示快捷键?