15 #ifndef INCG_IRIS_IUTEST_UTIL_VC_UNITTEST_HPP_5CA7C30C_2D2A_40A1_A9DE_83EAB4527787_
16 #define INCG_IRIS_IUTEST_UTIL_VC_UNITTEST_HPP_5CA7C30C_2D2A_40A1_A9DE_83EAB4527787_
20 #include <CppUnitTest.h>
21 #include "../../include/iutest_prod.hpp"
22 #include "../../include/util/iutest_util_tests.hpp"
27 #ifdef IUTEST_USE_GTEST
32 #define IIUT_TEST_P_ TEST_P
34 #ifdef IIUT_TYPED_TEST_
35 # undef IIUT_TYPED_TEST_
37 #define IIUT_TYPED_TEST_ TYPED_TEST
39 #ifdef IIUT_TYPED_TEST_P_
40 # undef IIUT_TYPED_TEST_P_
42 #define IIUT_TYPED_TEST_P_ TYPED_TEST_P
54 #define IUTEST(testcase_, testname_) \
55 IUTEST_VCUNIT_I(testcase_, testname_, testcase_##testname_##_class, testcase_##_##testname_); \
56 IUTEST_TEST(testcase_, testname_)
61 #define IUTEST_F(testfixture_, testname_) \
62 IUTEST_VCUNIT_I(testfixture_, testname_, testfixture_##testname_##_class, testfixture_##_##testname_); \
63 IUTEST_TEST_F_(testfixture_, testname_)
68 #define IUTEST_P(testfixture_, testname_) \
69 IUTEST_VCUNIT_I(testfixture_, testname_, testfixture_##testname_##_class, testfixture_##_##testname_); \
70 IUTEST_TEST_P_(testfixture_, testname_)
72 #ifdef IUTEST_TYPED_TEST
73 # undef IUTEST_TYPED_TEST
75 #define IUTEST_TYPED_TEST(testfixture_, testname_) \
76 IUTEST_VCUNIT_I(testfixture_, testname_, testfixture_##testname_##_class, testfixture_##_##testname_); \
77 IUTEST_TYPED_TEST_(testfixture_, testname_)
79 #ifdef IUTEST_TYPED_TEST_P
80 # undef IUTEST_TYPED_TEST_P
82 #define IUTEST_TYPED_TEST_P(testfixture_, testname_) \
83 IUTEST_VCUNIT_I(testfixture_, testname_, testfixture_##testname_##_class, testfixture_##_##testname_); \
84 IIUT_TYPED_TEST_P_(testfixture_, testname_)
87 #define IUTEST_VCUNIT_I(testcase_, testname_, className, methodName) \
88 IUTEST_VCUNIT_TEST_CLASS(className) { \
89 public: TEST_METHOD(methodName) { \
90 IUTEST_VCUNIT_EXEC_(testcase_, testname_); } \
91 IIUT_VCUNIT_METHOD_ATTRIBUTE(testcase_, methodName) \
103 #define IIUT_VCUNIT_METHOD_ATTRIBUTE(testcase_, methodName) \
104 BEGIN_TEST_METHOD_ATTRIBUTE(methodName) \
105 TEST_METHOD_ATTRIBUTE(L"TestCase", L#testcase_) \
106 END_TEST_METHOD_ATTRIBUTE()
108 #define IUTEST_VCUNIT_EXEC_(testcase_, testname_) \
109 Body( "*" #testcase_ "." #testname_ "*" )
111 #define IUTEST_VCUNIT_TEST_CLASS(className) \
112 ONLY_USED_AT_NAMESPACE_SCOPE class className : public ::iuutil::VisualStudio::TestClass<className>
117 namespace VisualStudio
121 class TestClass :
public ::Microsoft::VisualStudio::CppUnitTestFramework::TestClass<T>
123 typedef ::Microsoft::VisualStudio::CppUnitTestFramework::Logger Logger;
125 void Body(
const char* filter)
138 class VCCppUnitTestLogger :
public ::iutest::detail::iuLogger
140 typedef ::Microsoft::VisualStudio::CppUnitTestFramework::Logger Logger;
142 virtual void voutput(
const char* fmt, va_list va)
144 int length = _vscprintf(fmt, va);
150 char* buf =
new char [length];
151 vsprintf_s(buf, length, fmt, va);
155 int pos = m_log.find(
'\n');
157 Logger::WriteMessage(m_log.substr(0, pos).c_str());
158 m_log = m_log.substr(pos+1);
159 pos = m_log.find(
'\n');
172 VCCppUnitTestPartResultReporter()
177 virtual ~VCCppUnitTestPartResultReporter()
185 if( result.failed() )
189 wchar_t buf2[MAX_PATH];
190 ::mbstowcs_s(&size, buf1,
sizeof(buf1)/
sizeof(buf1[0]), result.message(), _TRUNCATE);
191 ::mbstowcs_s(&size, buf2,
sizeof(buf2)/
sizeof(buf2[0]), result.file_name(), _TRUNCATE);
192 ::Microsoft::VisualStudio::CppUnitTestFramework::Assert::Fail(buf1
193 , &Microsoft::VisualStudio::CppUnitTestFramework::__LineInfo(buf2,
"", result.line_number()) );
202 : m_default_printer(default_printer)
204 virtual ~VCCppUnitResultPrinter()
206 delete m_default_printer;
220 virtual void OnTestStart(const ::iutest::TestInfo& test_info)
224 virtual void OnTestPartResult(const ::iutest::TestPartResult& test_part_result)
228 virtual void OnTestEnd(const ::iutest::TestInfo& test_info)
249 static ::iutest::TestEventListener* SetUp()
251 static ::iutest::TestEventListener* p = NULL;
256 if( default_printer == NULL )
260 p =
new VCCppUnitResultPrinter(default_printer);
267 inline void SetUpCppUnitTest()
270 static VCCppUnitTestPartResultReporter fake;
271 #ifndef IUTEST_USE_GTEST
272 static VCCppUnitTestLogger logger;
273 ::iutest::detail::iuConsole::SetLogger(&logger);
274 ::iutest::UnitTestSource::GetInstance().Initialize();
276 VCCppUnitResultPrinter::SetUp();
288 #endif // INCG_IRIS_IUTEST_UTIL_VC_UNITTEST_HPP_5CA7C30C_2D2A_40A1_A9DE_83EAB4527787_