MockUnexpectedOutputParameterFailure::MockUnexpectedOutputParameterFailure(UtestShell* test, const SimpleString& functionName, const MockNamedValue& parameter, const MockExpectedCallsList& expectations) : MockFailure(test) { MockExpectedCallsList expectationsForFunctionWithParameterName; expectationsForFunctionWithParameterName.addExpectationsRelatedTo(functionName, expectations); expectationsForFunctionWithParameterName.onlyKeepExpectationsWithOutputParameterName(parameter.getName()); if (expectationsForFunctionWithParameterName.isEmpty()) { message_ = "Mock Failure: Unexpected output parameter name to function \""; message_ += functionName; message_ += "\": "; message_ += parameter.getName(); } else { message_ = "Mock Failure: Unexpected parameter type \""; message_ += parameter.getType(); message_ += "\" to output parameter \""; message_ += parameter.getName(); message_ += "\" to function \""; message_ += functionName; message_ += "\""; } message_ += "\n"; addExpectationsAndCallHistoryRelatedTo(functionName, expectations); message_ += "\n\tACTUAL unexpected output parameter passed to function: "; message_ += functionName; message_ += "\n"; message_ += "\t\t"; message_ += parameter.getType(); message_ += " "; message_ += parameter.getName(); }
static MockValue_c getMockValueCFromNamedValue(const MockNamedValue& namedValue) { MockValue_c returnValue; if (strcmp(namedValue.getType().asCharString(), "int") == 0) { returnValue.type = MOCKVALUETYPE_INTEGER; returnValue.value.intValue = namedValue.getIntValue(); } else if (strcmp(namedValue.getType().asCharString(), "double") == 0) { returnValue.type = MOCKVALUETYPE_DOUBLE; returnValue.value.doubleValue = namedValue.getDoubleValue(); } else if (strcmp(namedValue.getType().asCharString(), "char*") == 0) { returnValue.type = MOCKVALUETYPE_STRING; returnValue.value.stringValue = namedValue.getStringValue(); } else if (strcmp(namedValue.getType().asCharString(), "void*") == 0) { returnValue.type = MOCKVALUETYPE_POINTER; returnValue.value.pointerValue = namedValue.getPointerValue(); } else { returnValue.type = MOCKVALUETYPE_OBJECT; returnValue.value.objectValue = namedValue.getObjectPointer(); } return returnValue; }
void MockCheckedActualCall::finalizeOutputParameters(MockCheckedExpectedCall* expectedCall) { for (MockOutputParametersListNode* p = outputParameterExpectations_; p; p = p->next_) { MockNamedValue outputParameter = expectedCall->getOutputParameter(p->name_); MockNamedValueCopier* copier = outputParameter.getCopier(); if (copier) { copier->copy(p->ptr_, outputParameter.getObjectPointer()); } else if ((outputParameter.getType() == "const void*") && (p->type_ == "void*")) { const void* data = outputParameter.getConstPointerValue(); size_t size = outputParameter.getSize(); PlatformSpecificMemCpy(p->ptr_, data, size); } else if (outputParameter.getName() != "") { SimpleString type = expectedCall->getOutputParameter(p->name_).getType(); MockNoWayToCopyCustomTypeFailure failure(getTest(), type); failTest(failure); } } }
SimpleString MockExpectedFunctionCall::getParameterType(const SimpleString& name) { MockNamedValue * p = parameters_->getValueByName(name); return (p) ? p->getType() : ""; }
SimpleString MockCheckedExpectedCall::getInputParameterType(const SimpleString& name) { MockNamedValue * p = inputParameters_->getValueByName(name); return (p) ? p->getType() : ""; }