testtools/micromock/src/mockmethodcallbase.cpp (97 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" #include "mockmethodcallbase.h" CMockMethodCallBase::CMockMethodCallBase() { Init(_T("")); } CMockMethodCallBase::~CMockMethodCallBase() { if (NULL != m_ReturnValue) { delete m_ReturnValue; } for (size_t i = 0; i < m_MockCallArguments.size(); i++) { delete m_MockCallArguments[i]; } if (NULL != m_FailReturnValue) { delete m_FailReturnValue; } } CMockMethodCallBase::CMockMethodCallBase(std::tstring methodName, size_t argCount, CMockCallArgumentBase** arguments) { Init(methodName); for (size_t i = 0; i < argCount; i++) { m_MockCallArguments.push_back(arguments[i]); } } void CMockMethodCallBase::Init(std::tstring methodName) { m_ReturnValue = NULL; m_MethodName = methodName; m_MatchedCall = NULL; m_OnlySpecifiesActions = false; m_IgnoreAllCalls = false; m_ExpectedTimes = 1; m_MatchedTimes = 0; m_AlwaysReport = false; m_ExactExpectedTimes = false; m_FailReturnValue = NULL; } std::tstring CMockMethodCallBase::GetArgumentsString() { std::tstring result; for (size_t i = 0; i < m_MockCallArguments.size(); i++) { if (result.length() > 0) { result += _T(","); } result += m_MockCallArguments[i]->ToString(); } return result; } std::tstring CMockMethodCallBase::ToString() { std::tstring result = m_MethodName; result += _T("("); result += GetArgumentsString(); result += _T(")"); return result; } void CMockMethodCallBase::RollbackMatch() { m_MatchedCall = NULL; } void CMockMethodCallBase::AddExtraCallArgument(CMockCallArgumentBase* callArgument) { m_MockCallArguments.push_back(callArgument); } bool CMockMethodCallBase::operator==(const CMockMethodCallBase& right) { bool result = (m_MethodName == right.m_MethodName); result = result && (m_MockCallArguments.size() == right.m_MockCallArguments.size()); if (result) { for (size_t i = 0; i < m_MockCallArguments.size(); i++) { if (!(m_MockCallArguments[i]->EqualTo(right.m_MockCallArguments[i]))) { result = false; } } } return result; } void CMockMethodCallBase::CopyOutArgumentBuffers(CMockMethodCallBase* sourceMockMethodCall) { if (m_MockCallArguments.size() == sourceMockMethodCall->m_MockCallArguments.size()) { for (size_t i = 0; i < m_MockCallArguments.size(); i++) { // TODO: This should also be handled when comparing calls ... (void)m_MockCallArguments[i]->CopyOutArgumentDataFrom(sourceMockMethodCall->m_MockCallArguments[i]); } } }