⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 enumerator_sequence_unittest_.h

📁 用STL的方式封装了WindowsAPI、COM调用、ACE、ATL、MFC、WTL等多种组件
💻 H
📖 第 1 页 / 共 3 页
字号:
            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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -