testtools/micromock/unittests/micromocktest/nullargsstringificationunittests.cpp (152 lines of code) (raw):
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
#include "stdafx.h"
using namespace std;
//------------------------------------------------------------------------------------------------------------------------------
// Tests TOC
//------------------------------------------------------------------------------------------------------------------------------
// - Stringify NULL arguments
// TEST_FUNCTION(MicroMock_TFS102616_NULL_Const_wchar_Pointer_Does_Not_Trigger_Exceptions)
// TEST_FUNCTION(MicroMock_TFS102616_NULL_Const_char_Pointer_Does_Not_Trigger_Exceptions)
// TEST_FUNCTION(MicroMock_TFS102616_NULL_wchar_Pointer_Does_Not_Trigger_Exceptions)
// TEST_FUNCTION(MicroMock_TFS102616_NULL_char_Pointer_Does_Not_Trigger_Exceptions)
// - Stringify non-NULL arguments
// TEST_FUNCTION(MicroMock_TFS102616_Const_wchar_String_Is_Printed_As_Such_In_Unexpected_Call)
// TEST_FUNCTION(MicroMock_TFS102616_Const_char_String_Is_Printed_As_Such_In_Unexpected_Call)
// TEST_FUNCTION(MicroMock_TFS102616_wchar_String_Is_Printed_As_Such_In_Unexpected_Call)
// TEST_FUNCTION(MicroMock_TFS102616_char_String_Is_Printed_As_Such_In_Unexpected_Call)
//------------------------------------------------------------------------------------------------------------------------------
TYPED_MOCK_CLASS(CSomeMocks, CGlobalMock)
{
public:
MOCK_STATIC_METHOD_1(,void, XAA_wchar_const, const wchar_t*, p)
MOCK_VOID_METHOD_END()
MOCK_STATIC_METHOD_1(, void, XAA_char_const, const char*, p)
MOCK_VOID_METHOD_END()
MOCK_STATIC_METHOD_1(, void, XAA_wchar, wchar_t*, p)
MOCK_VOID_METHOD_END()
MOCK_STATIC_METHOD_1(, void, XAA_char, char*, p)
MOCK_VOID_METHOD_END()
};
DECLARE_GLOBAL_MOCK_METHOD_1(CSomeMocks, , void, XAA_wchar_const, const wchar_t*, p)
DECLARE_GLOBAL_MOCK_METHOD_1(CSomeMocks, , void, XAA_char_const, const char*, p)
DECLARE_GLOBAL_MOCK_METHOD_1(CSomeMocks, , void, XAA_wchar, wchar_t*, p)
DECLARE_GLOBAL_MOCK_METHOD_1(CSomeMocks, , void, XAA_char, char*, p)
template<>
bool operator==<char*>(const CMockValue<char*>& lhs, const CMockValue<char*>& rhs)
{
bool result = false;
if (lhs.GetValue() == rhs.GetValue())
{
result = true;
} else
{
if ((NULL != lhs.GetValue()) &&
(NULL != rhs.GetValue()) &&
(strcmp(lhs.GetValue(), rhs.GetValue()) == 0))
{
result = true;
}
}
return result;
}
static int tstring_Compare(const std::tstring& a, const std::tstring&b)
{
return strcmp(a.c_str(), b.c_str());
}
static void tstring_ToString(char* string, size_t bufferSize, std::tstring val)
{
size_t val_size = strlen(val.c_str());
strncpy(string, val.c_str(), (val_size >= bufferSize) ? (bufferSize - 1) : val_size);
}
static MICROMOCK_MUTEX_HANDLE g_testByTest;
static MICROMOCK_GLOBAL_SEMAPHORE_HANDLE g_dllByDll;
BEGIN_TEST_SUITE(NULLArgsStringificationTests)
TEST_SUITE_INITIALIZE(TestClassInitialize)
{
g_testByTest = MicroMockCreateMutex();
ASSERT_IS_NOT_NULL(g_testByTest);
}
TEST_SUITE_CLEANUP(TestClassCleanup)
{
MicroMockDestroyMutex(g_testByTest);
}
TEST_FUNCTION_INITIALIZE(TestMethodInitialize)
{
if (!MicroMockAcquireMutex(g_testByTest))
{
ASSERT_FAIL("our mutex is ABANDONED. Failure in test framework");
}
}
TEST_FUNCTION_CLEANUP(TestMethodCleanup)
{
if (!MicroMockReleaseMutex(g_testByTest))
{
ASSERT_FAIL("failure in test framework at ReleaseMutex");
}
}
/*http://webvstf:8080/tfs/web/wi.aspx?pcguid=8947f9e3-3622-497e-ab87-a27e01082a6c&id=102616*/
TEST_FUNCTION(MicroMock_TFS102616_NULL_Const_wchar_Pointer_Does_Not_Trigger_Exceptions)
{
// arrange
CSomeMocks testMock;
STRICT_EXPECTED_CALL(testMock, XAA_wchar_const(NULL))
.NeverInvoked();
// act
XAA_wchar_const(NULL);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Actual:XAA_wchar_const(NULL)]")), testMock.CompareActualAndExpectedCalls(),
_T("An unexpected call with NULL argument should be reported"));
}
TEST_FUNCTION(MicroMock_TFS102616_NULL_Const_char_Pointer_Does_Not_Trigger_Exceptions)
{
// arrange
CSomeMocks testMock;
STRICT_EXPECTED_CALL(testMock, XAA_char_const(NULL))
.NeverInvoked();
// act
XAA_char_const(NULL);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Actual:XAA_char_const(NULL)]")), testMock.CompareActualAndExpectedCalls(),
_T("An unexpected call with NULL argument should be reported"));
}
TEST_FUNCTION(MicroMock_TFS102616_NULL_wchar_Pointer_Does_Not_Trigger_Exceptions)
{
// arrange
CSomeMocks testMock;
STRICT_EXPECTED_CALL(testMock, XAA_wchar(NULL))
.NeverInvoked();
// act
XAA_wchar(NULL);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Actual:XAA_wchar(NULL)]")), testMock.CompareActualAndExpectedCalls(),
_T("An unexpected call with NULL argument should be reported"));
}
TEST_FUNCTION(MicroMock_TFS102616_NULL_char_Pointer_Does_Not_Trigger_Exceptions)
{
// arrange
CSomeMocks testMock;
STRICT_EXPECTED_CALL(testMock, XAA_char(NULL))
.NeverInvoked();
// act
XAA_char(NULL);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Actual:XAA_char(NULL)]")), testMock.CompareActualAndExpectedCalls(),
_T("An unexpected call with NULL argument should be reported"));
}
TEST_FUNCTION(MicroMock_TFS102616_Const_wchar_String_Is_Printed_As_Such_In_Unexpected_Call)
{
// arrange
CSomeMocks testMock;
wchar_t val1[] = L"oink";
wchar_t val2[] = L"oink";
STRICT_EXPECTED_CALL(testMock, XAA_wchar_const(val1))
.NeverInvoked();
// act
XAA_wchar_const(val2);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Actual:XAA_wchar_const(oink)]")), testMock.CompareActualAndExpectedCalls(),
_T("An unexpected call with NULL argument should be reported"));
}
TEST_FUNCTION(MicroMock_TFS102616_Const_char_String_Is_Printed_As_Such_In_Unexpected_Call)
{
// arrange
CSomeMocks testMock;
char val1[] = "oink";
char val2[] = "oink";
STRICT_EXPECTED_CALL(testMock, XAA_char_const(val1))
.NeverInvoked();
// act
XAA_char_const(val2);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Actual:XAA_char_const(oink)]")), testMock.CompareActualAndExpectedCalls(),
_T("An unexpected call with NULL argument should be reported"));
}
TEST_FUNCTION(MicroMock_TFS102616_wchar_String_Is_Printed_As_Such_In_Unexpected_Call)
{
// arrange
CSomeMocks testMock;
wchar_t val1[] = L"oink";
wchar_t val2[] = L"oink";
STRICT_EXPECTED_CALL(testMock, XAA_wchar(val1))
.NeverInvoked();
// act
XAA_wchar(val2);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Actual:XAA_wchar(oink)]")), testMock.CompareActualAndExpectedCalls(),
_T("An unexpected call with NULL argument should be reported"));
}
TEST_FUNCTION(MicroMock_TFS102616_char_String_Is_Printed_As_Such_In_Unexpected_Call)
{
// arrange
CSomeMocks testMock;
char val1[] = "oink";
char val2[] = "oink";
STRICT_EXPECTED_CALL(testMock, XAA_char(val1))
.NeverInvoked();
// act
XAA_char(val2);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Actual:XAA_char(oink)]")), testMock.CompareActualAndExpectedCalls(),
_T("An unexpected call with NULL argument should be reported"));
}
END_TEST_SUITE(NULLArgsStringificationTests)