Changeset 782 in dev for branches/egtra/ab5.0/abdev/ab-test/ab-test.cpp
- Timestamp:
- Jan 29, 2011, 3:39:34 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/egtra/ab5.0/abdev/ab-test/ab-test.cpp
r781 r782 1 1 #include "stdafx.h" 2 3 #include <cstdint> 4 #include <cstring> 2 5 3 6 #include <GdiPlus.h> … … 6 9 7 10 #include <boost/test/unit_test.hpp> 11 12 #include <boost/preprocessor/cat.hpp> 8 13 9 14 #include <Resource/Load.h> … … 27 32 typedef std::unique_ptr<HMODULE, HModuleDeleter> UniqueHModule; 28 33 34 template<typename F> 35 struct ScopeExitHolder 36 { 37 ScopeExitHolder(F f) : f(f) {} 38 39 ~ScopeExitHolder() 40 { 41 f(); 42 } 43 44 private: 45 F f; 46 47 ScopeExitHolder(ScopeExitHolder const&); 48 ScopeExitHolder& operator =(ScopeExitHolder const&); 49 }; 50 51 #define AB_SCOPE_EXIT_2(f) auto BOOST_PP_CAT(AB_SCOPE_EXIT_FUNCTION_TEMP_, __LINE__) = (f); \ 52 ScopeExitHolder<decltype(BOOST_PP_CAT(AB_SCOPE_EXIT_FUNCTION_TEMP_, __LINE__))> BOOST_PP_CAT(AB_SCOPE_EXIT_FUNCTION_HOLDER_, __LINE__)_ (BOOST_PP_CAT(AB_SCOPE_EXIT_FUNCTION_TEMP_, __LINE__)); 53 #define AB_SCOPE_EXIT(f) AB_SCOPE_EXIT_2([&]() f) 54 55 template<typename F> 56 ScopeExitHolder<F> ScopeExit(F fn) 57 { 58 return fn; 59 } 60 61 #define GET_AT(bd, y, x) (*reinterpret_cast<DWORD const*>(static_cast<BYTE const*>((bd).Scan0) + (y) * bdL.Stride + (x) * sizeof (DWORD))) 62 29 63 bool IconEquals(HICON hiconL, HICON hiconR) 30 64 { 65 Gdiplus::Bitmap bmpL(hiconL), bmpR(hiconR); 66 67 if (bmpL.GetWidth() == bmpR.GetWidth() 68 && bmpR.GetHeight() == bmpR.GetHeight()) 69 { 70 Gdiplus::Rect rc(0, 0, bmpL.GetWidth(), bmpL.GetHeight()); 71 Gdiplus::BitmapData bdL = {}, bdR = {}; 72 BOOST_CHECK_EQUAL(bmpL.LockBits(&rc, Gdiplus::ImageLockModeRead, PixelFormat32bppARGB, &bdL), Gdiplus::Ok); 73 BOOST_CHECK_EQUAL(bmpR.LockBits(&rc, Gdiplus::ImageLockModeRead, PixelFormat32bppARGB, &bdR), Gdiplus::Ok); 74 75 AB_SCOPE_EXIT({bmpL.UnlockBits(&bdL);}); 76 AB_SCOPE_EXIT({bmpR.UnlockBits(&bdR);}); 77 78 if (bdL.Width == bdR.Width && bdL.Height == bdR.Height) 79 { 80 for (UINT i = 0; i < bdL.Height; ++i) 81 { 82 if (std::memcmp( 83 static_cast<BYTE const*>(bdL.Scan0) + i * bdL.Stride, 84 static_cast<BYTE const*>(bdR.Scan0) + i * bdR.Stride, 85 bdL.Width * sizeof (std::uint32_t)) != 0) 86 { 87 return false; 88 } 89 } 90 return true; 91 } 92 } 31 93 return false; 32 94 } … … 34 96 BOOST_AUTO_TEST_CASE( ResourceLoading ) 35 97 { 98 Gdiplus::GdiplusStartupInput gdiplusStartupInput; 99 100 ULONG_PTR gdiplusToken; 101 Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, nullptr); 102 AB_SCOPE_EXIT_2(std::bind(Gdiplus::GdiplusShutdown, gdiplusToken)); 103 36 104 TCHAR moduleName[MAX_PATH]; 37 105 ::GetModuleFileName(nullptr, moduleName, MAX_PATH);
Note:
See TracChangeset
for help on using the changeset viewer.