testtools/micromock/unittests/micromocktest/micromockvalidateargumentbufferunittests.cpp (444 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;
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);
}
TYPED_MOCK_CLASS(CTestArgBufferMock, CMock)
{
public:
MOCK_METHOD_1(, void, Test1ArgFunction, UINT8*, bufferArg);
MOCK_VOID_METHOD_END()
MOCK_METHOD_2(, void, Test2ArgsFunction, UINT8*, buffer1Arg, UINT8*, buffer2Arg);
MOCK_VOID_METHOD_END()
};
static MICROMOCK_MUTEX_HANDLE g_testByTest;
static MICROMOCK_GLOBAL_SEMAPHORE_HANDLE g_dllByDll;
BEGIN_TEST_SUITE(MicroMockValidateArgumentBufferTests)
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");
}
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_With_Zero_Argument_Index_Throws)
{
// arrange
CTestArgBufferMock testMock;
testMock.SetPerformAutomaticCallComparison(AUTOMATIC_CALL_COMPARISON_OFF);
UINT8 expectedArgumentBuffer[1] = {42};
MICROMOCK_EXCEPTION exceptionCode = MICROMOCK_EXCEPTION_INTERNAL_ERROR; // anything that is different than the expected code
try
{
// act
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(NULL))
.ValidateArgumentBuffer(0, expectedArgumentBuffer, sizeof(expectedArgumentBuffer));
}
catch (CMicroMockException e)
{
exceptionCode = e.GetMicroMockExceptionCode();
}
// assert
ASSERT_ARE_EQUAL_WITH_MSG(int, (int)MICROMOCK_EXCEPTION_INVALID_ARGUMENT, (int)exceptionCode,
_T("Expected an invalid argument exception"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_With_Argument_Index_Out_Of_Bounds_Throws)
{
// arrange
CTestArgBufferMock testMock;
testMock.SetPerformAutomaticCallComparison(AUTOMATIC_CALL_COMPARISON_OFF);
UINT8 expectedArgumentBuffer[1] = {42};
MICROMOCK_EXCEPTION exceptionCode = MICROMOCK_EXCEPTION_INTERNAL_ERROR; // anything that is different than the expected code
try
{
// act
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(NULL))
.ValidateArgumentBuffer(2, expectedArgumentBuffer, sizeof(expectedArgumentBuffer));
}
catch (CMicroMockException e)
{
exceptionCode = e.GetMicroMockExceptionCode();
}
// assert
ASSERT_ARE_EQUAL_WITH_MSG(int, (int)MICROMOCK_EXCEPTION_INVALID_ARGUMENT, (int)exceptionCode,
_T("Expected an invalid argument exception"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_When_Expected_Memory_Matches_Indicates_No_Call_Mismatch)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgumentBuffer[1] = {42};
UINT8 actualArgumentBuffer[1] = {42};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(expectedArgumentBuffer))
.ValidateArgumentBuffer(1, expectedArgumentBuffer, sizeof(expectedArgumentBuffer));
// act
testMock.Test1ArgFunction(actualArgumentBuffer);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("")), testMock.CompareActualAndExpectedCalls(),
_T("Expected and actual calls do not match"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_When_Expected_Memory_Matches_And_Expetced_Call_Argument_Value_Is_NULL_Indicates_No_Call_Mismatch)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgumentBuffer[1] = {42};
UINT8 actualArgumentBuffer[1] = {42};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(NULL))
.ValidateArgumentBuffer(1, expectedArgumentBuffer, sizeof(expectedArgumentBuffer));
// act
testMock.Test1ArgFunction(actualArgumentBuffer);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("")), testMock.CompareActualAndExpectedCalls(),
_T("Expected and actual calls do not match"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_When_Expected_Memory_Does_Not_Match_Indicates_A_Call_Mismatch)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgumentBuffer[1] = { 0x43 };
UINT8 actualArgumentBuffer[1] = { 0x42 };
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(NULL))
.ValidateArgumentBuffer(1, expectedArgumentBuffer, sizeof(expectedArgumentBuffer));
// act
testMock.Test1ArgFunction(actualArgumentBuffer);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Expected:Test1ArgFunction([43])][Actual:Test1ArgFunction([42])]")), testMock.CompareActualAndExpectedCalls(),
_T("Expected and actual calls do not match"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_When_Expected_Buffer_Is_NULL_Throws)
{
// arrange
CTestArgBufferMock testMock;
testMock.SetPerformAutomaticCallComparison(AUTOMATIC_CALL_COMPARISON_OFF);
UINT8 expectedArgumentBuffer[1] = {42};
MICROMOCK_EXCEPTION exceptionCode = MICROMOCK_EXCEPTION_INTERNAL_ERROR; // anything that is different than the expected code
try
{
// act
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(expectedArgumentBuffer))
.ValidateArgumentBuffer(1, NULL, sizeof(expectedArgumentBuffer));
}
catch (CMicroMockException e)
{
exceptionCode = e.GetMicroMockExceptionCode();
}
// assert
ASSERT_ARE_EQUAL_WITH_MSG(int, (int)MICROMOCK_EXCEPTION_INVALID_ARGUMENT, (int)exceptionCode,
_T("Expected an invalid argument exception"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_With_0_Size_Throws)
{
// arrange
CTestArgBufferMock testMock;
testMock.SetPerformAutomaticCallComparison(AUTOMATIC_CALL_COMPARISON_OFF);
UINT8 expectedArgumentBuffer[1] = {42};
MICROMOCK_EXCEPTION exceptionCode = MICROMOCK_EXCEPTION_INTERNAL_ERROR; // anything that is different than the expected code
try
{
// act
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(expectedArgumentBuffer))
.ValidateArgumentBuffer(1, expectedArgumentBuffer, 0);
}
catch (CMicroMockException e)
{
exceptionCode = e.GetMicroMockExceptionCode();
}
// assert
ASSERT_ARE_EQUAL_WITH_MSG(int, (int)MICROMOCK_EXCEPTION_INVALID_ARGUMENT, (int)exceptionCode,
_T("Expected an invalid argument exception"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_Only_Byte_1_Of_2_Checked_When_1st_Byte_Matches)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgumentBuffer[2] = {42, 43};
UINT8 actualArgumentBuffer[2] = {42, 42};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(expectedArgumentBuffer))
.ValidateArgumentBuffer(1, expectedArgumentBuffer, 1);
// act
testMock.Test1ArgFunction(actualArgumentBuffer);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("")), testMock.CompareActualAndExpectedCalls(),
_T("Expected and actual calls do not match"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_Only_Byte_1_Of_2_Checked_When_1st_Byte_Does_Not_Match)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgumentBuffer[2] = {0x42, 0x42};
UINT8 actualArgumentBuffer[2] = {0x43, 0x42};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(expectedArgumentBuffer))
.ValidateArgumentBuffer(1, expectedArgumentBuffer, 1);
// act
testMock.Test1ArgFunction(actualArgumentBuffer);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Expected:Test1ArgFunction([42])][Actual:Test1ArgFunction([43])]")), testMock.CompareActualAndExpectedCalls(),
_T("Expected and actual calls do not match"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_Only_Byte_2_Of_2_Checked_When_2nd_Byte_Matches)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgumentBuffer[] = {42};
UINT8 actualArgumentBuffer[2] = {43, 42};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(expectedArgumentBuffer))
.ValidateArgumentBuffer(1, expectedArgumentBuffer, 1, 1);
// act
testMock.Test1ArgFunction(actualArgumentBuffer);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("")), testMock.CompareActualAndExpectedCalls(),
_T("Expected and actual calls do not match"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_Only_Byte_2_Of_2_Checked_When_2nd_Byte_Does_Not_Match)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgumentBuffer[] = {0x42};
UINT8 actualArgumentBuffer[2] = {0x42, 0x43};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(expectedArgumentBuffer))
.ValidateArgumentBuffer(1, expectedArgumentBuffer, 1, 1);
// act
testMock.Test1ArgFunction(actualArgumentBuffer);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Expected:Test1ArgFunction([.. 42])][Actual:Test1ArgFunction([.. 43])]")), testMock.CompareActualAndExpectedCalls(),
_T("Expected and actual calls do not match"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_Makes_A_Copy_Of_The_Expected_Buffer)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgumentBuffer[1] = {42};
UINT8 actualArgumentBuffer[1] = {42};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(NULL))
.ValidateArgumentBuffer(1, expectedArgumentBuffer, sizeof(expectedArgumentBuffer));
expectedArgumentBuffer[0] = 41;
// act
testMock.Test1ArgFunction(actualArgumentBuffer);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("")), testMock.CompareActualAndExpectedCalls(),
_T("Expected and actual calls do not match"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_For_2_Bytes_Formats_Both_Bytes_Into_The_Assert_String)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgumentBuffer[2] = {0x42, 0x42};
UINT8 actualArgumentBuffer[2] = {0x42, 0x43};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(expectedArgumentBuffer))
.ValidateArgumentBuffer(1, expectedArgumentBuffer, 2);
// act
testMock.Test1ArgFunction(actualArgumentBuffer);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Expected:Test1ArgFunction([42 42])][Actual:Test1ArgFunction([42 43])]")), testMock.CompareActualAndExpectedCalls(),
_T("Expected and actual calls do not match"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_For_1_Digit_Values_Works)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgumentBuffer[] = {0x2};
UINT8 actualArgumentBuffer[] = {0x3};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(expectedArgumentBuffer))
.ValidateArgumentBuffer(1, expectedArgumentBuffer, sizeof(expectedArgumentBuffer));
// act
testMock.Test1ArgFunction(actualArgumentBuffer);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Expected:Test1ArgFunction([02])][Actual:Test1ArgFunction([03])]")), testMock.CompareActualAndExpectedCalls(),
_T("Expected and actual calls do not match"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_With_Expected_0x0F_Formats_The_Argument_Buffer_Correctly)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgumentBuffer[] = {0xF};
UINT8 actualArgumentBuffer[] = {0x0};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(expectedArgumentBuffer))
.ValidateArgumentBuffer(1, expectedArgumentBuffer, sizeof(expectedArgumentBuffer));
// act
testMock.Test1ArgFunction(actualArgumentBuffer);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Expected:Test1ArgFunction([0F])][Actual:Test1ArgFunction([00])]")), testMock.CompareActualAndExpectedCalls(),
_T("Expected and actual calls do not match"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_With_Expected_0xFF_Formats_The_Argument_Buffer_Correctly)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgumentBuffer[] = {0xFF};
UINT8 actualArgumentBuffer[] = {0x0};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(expectedArgumentBuffer))
.ValidateArgumentBuffer(1, expectedArgumentBuffer, sizeof(expectedArgumentBuffer));
// act
testMock.Test1ArgFunction(actualArgumentBuffer);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Expected:Test1ArgFunction([FF])][Actual:Test1ArgFunction([00])]")), testMock.CompareActualAndExpectedCalls(),
_T("Expected and actual calls do not match"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_With_Actual_0x0F_Formats_The_Argument_Buffer_Correctly)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgumentBuffer[] = {0x0};
UINT8 actualArgumentBuffer[] = {0xF};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(expectedArgumentBuffer))
.ValidateArgumentBuffer(1, expectedArgumentBuffer, sizeof(expectedArgumentBuffer));
// act
testMock.Test1ArgFunction(actualArgumentBuffer);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Expected:Test1ArgFunction([00])][Actual:Test1ArgFunction([0F])]")), testMock.CompareActualAndExpectedCalls(),
_T("Expected and actual calls do not match"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_With_Actual_0xFF_Formats_The_Argument_Buffer_Correctly)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgumentBuffer[] = {0x00};
UINT8 actualArgumentBuffer[] = {0xFF};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(expectedArgumentBuffer))
.ValidateArgumentBuffer(1, expectedArgumentBuffer, sizeof(expectedArgumentBuffer));
// act
testMock.Test1ArgFunction(actualArgumentBuffer);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Expected:Test1ArgFunction([00])][Actual:Test1ArgFunction([FF])]")), testMock.CompareActualAndExpectedCalls(),
_T("Expected and actual calls do not match"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_For_2_Bytes_With_1_Digit_Values_Works)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgumentBuffer[] = {0x2, 0x3};
UINT8 actualArgumentBuffer[] = {0x3, 0x2};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(expectedArgumentBuffer))
.ValidateArgumentBuffer(1, expectedArgumentBuffer, sizeof(expectedArgumentBuffer));
// act
testMock.Test1ArgFunction(actualArgumentBuffer);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Expected:Test1ArgFunction([02 03])][Actual:Test1ArgFunction([03 02])]")), testMock.CompareActualAndExpectedCalls(),
_T("Expected and actual calls do not match"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_For_2_Bytes_Containing_0x0F_And_0xFF_Outputs_The_Correct_Formatted_Buffer)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgumentBuffer[] = {0xF, 0xFF};
UINT8 actualArgumentBuffer[] = {0x0, 0x0};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(expectedArgumentBuffer))
.ValidateArgumentBuffer(1, expectedArgumentBuffer, sizeof(expectedArgumentBuffer));
// act
testMock.Test1ArgFunction(actualArgumentBuffer);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Expected:Test1ArgFunction([0F FF])][Actual:Test1ArgFunction([00 00])]")), testMock.CompareActualAndExpectedCalls(),
_T("Expected and actual calls do not match"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_With_2_Arguments_Formats_Property_Both_Arguments)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgument1Buffer[] = {0x2};
UINT8 actualArgument1Buffer[] = {0x3};
UINT8 expectedArgument2Buffer[] = {0x4, 0x5};
UINT8 actualArgument2Buffer[] = {0x5, 0x4};
STRICT_EXPECTED_CALL(testMock, Test2ArgsFunction(expectedArgument1Buffer, expectedArgument2Buffer))
.ValidateArgumentBuffer(1, expectedArgument1Buffer, sizeof(expectedArgument1Buffer))
.ValidateArgumentBuffer(2, expectedArgument2Buffer, sizeof(expectedArgument2Buffer));
// act
testMock.Test2ArgsFunction(actualArgument1Buffer, actualArgument2Buffer);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Expected:Test2ArgsFunction([02],[04 05])][Actual:Test2ArgsFunction([03],[05 04])]")), testMock.CompareActualAndExpectedCalls(),
_T("Expected and actual calls do not match"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_For_The_3rd_Byte_Issues_Two_Placeholders_In_The_Formatted_Argument)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgumentBuffer[] = {0x42};
UINT8 actualArgumentBuffer[] = {0x42, 0x43, 0x44};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(expectedArgumentBuffer))
.ValidateArgumentBuffer(1, expectedArgumentBuffer, 1, 2);
// act
testMock.Test1ArgFunction(actualArgumentBuffer);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Expected:Test1ArgFunction([.. .. 42])][Actual:Test1ArgFunction([.. .. 44])]")), testMock.CompareActualAndExpectedCalls(),
_T("Something is wrong with argument buffer validations"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_With_2_Validation_Entries_When_Expected_And_Actual_Values_Match_Does_Not_Yield_Any_Call_Difference)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgumentBuffer1[] = {0x42};
UINT8 expectedArgumentBuffer2[] = {0x43};
UINT8 actualArgumentBuffer[] = {0x42, 0x43};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(NULL))
.ValidateArgumentBuffer(1, expectedArgumentBuffer1, sizeof(expectedArgumentBuffer1))
.ValidateArgumentBuffer(1, expectedArgumentBuffer2, sizeof(expectedArgumentBuffer2), 1);
// act
testMock.Test1ArgFunction(actualArgumentBuffer);
// assert
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_With_2_Validation_Entries_When_First_Byte_Is_Different_Than_Expected_Yields_A_Call_Difference)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgumentBuffer1[] = {0x43};
UINT8 expectedArgumentBuffer2[] = {0x42};
UINT8 actualArgumentBuffer[] = {0x42, 0x42};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(NULL))
.ValidateArgumentBuffer(1, expectedArgumentBuffer1, sizeof(expectedArgumentBuffer1))
.ValidateArgumentBuffer(1, expectedArgumentBuffer2, sizeof(expectedArgumentBuffer2), 1);
// act
testMock.Test1ArgFunction(actualArgumentBuffer);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Expected:Test1ArgFunction([43 42])][Actual:Test1ArgFunction([42 42])]")), testMock.CompareActualAndExpectedCalls(),
_T("Something is wrong with argument buffer validations"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_With_2_Validation_Entries_When_Second_Byte_Is_Different_Than_Expected_Yields_A_Call_Difference)
{
// arrange
CTestArgBufferMock testMock;
UINT8 expectedArgumentBuffer1[] = {0x42};
UINT8 expectedArgumentBuffer2[] = {0x43};
UINT8 actualArgumentBuffer[] = {0x42, 0x42};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(NULL))
.ValidateArgumentBuffer(1, expectedArgumentBuffer1, sizeof(expectedArgumentBuffer1))
.ValidateArgumentBuffer(1, expectedArgumentBuffer2, sizeof(expectedArgumentBuffer2), 1);
// act
testMock.Test1ArgFunction(actualArgumentBuffer);
// assert
ASSERT_ARE_EQUAL_WITH_MSG(tstring, tstring(_T("[Expected:Test1ArgFunction([42 43])][Actual:Test1ArgFunction([42 42])]")), testMock.CompareActualAndExpectedCalls(),
_T("Something is wrong with argument buffer validations"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_2_Times_On_The_Same_Byte_With_Different_Content_Throws)
{
// arrange
CTestArgBufferMock testMock;
testMock.SetPerformAutomaticCallComparison(AUTOMATIC_CALL_COMPARISON_OFF);
UINT8 expectedArgumentBuffer1[] = {0x42};
UINT8 expectedArgumentBuffer2[] = {0x43};
bool exceptionThrown = false;
try
{
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(NULL))
.ValidateArgumentBuffer(1, expectedArgumentBuffer1, sizeof(expectedArgumentBuffer1))
.ValidateArgumentBuffer(1, expectedArgumentBuffer2, sizeof(expectedArgumentBuffer2));
}
catch (CMicroMockException e)
{
exceptionThrown = (e.GetMicroMockExceptionCode() == MICROMOCK_EXCEPTION_INVALID_VALIDATE_BUFFERS);
}
// act
// assert
ASSERT_IS_TRUE_WITH_MSG(exceptionThrown, _T("ValidateArgumentBuffer should assert/throw"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_On_The_Same_Byte_With_Same_Byte_Content_Does_Not_Throws)
{
// arrange
CTestArgBufferMock testMock;
testMock.SetPerformAutomaticCallComparison(AUTOMATIC_CALL_COMPARISON_OFF);
UINT8 expectedArgumentBuffer1[] = {0x42};
UINT8 expectedArgumentBuffer2[] = {0x42};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(NULL))
.ValidateArgumentBuffer(1, expectedArgumentBuffer1, sizeof(expectedArgumentBuffer1))
.ValidateArgumentBuffer(1, expectedArgumentBuffer2, sizeof(expectedArgumentBuffer2));
// act
// assert
// no exception expected
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_Overlapping_Validation_Buffers_Left_Side_The_Same_Throws_When_Bytes_Are_Different)
{
// arrange
CTestArgBufferMock testMock;
testMock.SetPerformAutomaticCallComparison(AUTOMATIC_CALL_COMPARISON_OFF);
UINT8 expectedArgumentBuffer1[] = {0x42};
UINT8 expectedArgumentBuffer2[] = {0x43, 0x42};
bool exceptionThrown = false;
try
{
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(NULL))
.ValidateArgumentBuffer(1, expectedArgumentBuffer1, sizeof(expectedArgumentBuffer1), 1)
.ValidateArgumentBuffer(1, expectedArgumentBuffer2, sizeof(expectedArgumentBuffer2), 1);
}
catch (CMicroMockException e)
{
exceptionThrown = (e.GetMicroMockExceptionCode() == MICROMOCK_EXCEPTION_INVALID_VALIDATE_BUFFERS);
}
// act
// assert
ASSERT_IS_TRUE_WITH_MSG(exceptionThrown, _T("ValidateArgumentBuffer should assert/throw"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_Overlapping_Validation_Buffers_Right_Side_The_Same_Throws_When_Bytes_Are_Different)
{
// arrange
CTestArgBufferMock testMock;
testMock.SetPerformAutomaticCallComparison(AUTOMATIC_CALL_COMPARISON_OFF);
UINT8 expectedArgumentBuffer1[] = {0x42};
UINT8 expectedArgumentBuffer2[] = {0x42, 0x43};
bool exceptionThrown = false;
try
{
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(NULL))
.ValidateArgumentBuffer(1, expectedArgumentBuffer1, sizeof(expectedArgumentBuffer1), 1)
.ValidateArgumentBuffer(1, expectedArgumentBuffer2, sizeof(expectedArgumentBuffer2), 0);
}
catch (CMicroMockException e)
{
exceptionThrown = (e.GetMicroMockExceptionCode() == MICROMOCK_EXCEPTION_INVALID_VALIDATE_BUFFERS);
}
// act
// assert
ASSERT_IS_TRUE_WITH_MSG(exceptionThrown, _T("ValidateArgumentBuffer should assert/throw"));
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_Overlapping_Validation_Buffer_Left_Side_The_Same_Does_Not_Thrown_When_Bytes_Are_The_Same)
{
// arrange
CTestArgBufferMock testMock;
testMock.SetPerformAutomaticCallComparison(AUTOMATIC_CALL_COMPARISON_OFF);
UINT8 expectedArgumentBuffer1[] = {0x42};
UINT8 expectedArgumentBuffer2[] = {0x42, 0x42};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(NULL))
.ValidateArgumentBuffer(1, expectedArgumentBuffer1, sizeof(expectedArgumentBuffer1), 1)
.ValidateArgumentBuffer(1, expectedArgumentBuffer2, sizeof(expectedArgumentBuffer2), 1);
// act
// assert
// no exception expected
}
TEST_FUNCTION(MicroMock_ValidateArgumentBuffer_Overlapping_Validation_Buffer_Right_Side_The_Same_Does_Not_Thrown_When_Bytes_Are_The_Same)
{
// arrange
CTestArgBufferMock testMock;
testMock.SetPerformAutomaticCallComparison(AUTOMATIC_CALL_COMPARISON_OFF);
UINT8 expectedArgumentBuffer1[] = {0x42};
UINT8 expectedArgumentBuffer2[] = {0x42, 0x42};
STRICT_EXPECTED_CALL(testMock, Test1ArgFunction(NULL))
.ValidateArgumentBuffer(1, expectedArgumentBuffer1, sizeof(expectedArgumentBuffer1), 1)
.ValidateArgumentBuffer(1, expectedArgumentBuffer2, sizeof(expectedArgumentBuffer2), 0);
// act
// assert
// no exception expected
}
END_TEST_SUITE(MicroMockValidateArgumentBufferTests)