public string ConstructExpectedMessage(object[] IdsAndParams)
{
var lineInfoMessage = "";
var paramList = new ArrayList();
var paramsStartPosition = 1;
// Verify that input list contains at least one element - ResId
if (IdsAndParams.Length == 0 || !(IdsAndParams[0] is string))
throw new VerifyException("ResID at IDsAndParams[0] missing!");
string expectedResId = (IdsAndParams[0] as string);
// Verify that resource id exists in resources
if (!_resources.ContainsKey(expectedResId))
{
ExceptionInfoOutput();
throw new VerifyException("Resources in [" + _asm.GetName().Name + "] does not contain string resource: " + expectedResId);
}
// If LineInfo exist, construct LineInfo message
if (IdsAndParams.Length > 1 && (IdsAndParams[1] is LineInfo))
{
if (!IgnoreLineInfo)
{
var lineInfo = (IdsAndParams[1] as LineInfo);
// Xml_ErrorPosition = "Line {0}, position {1}."
lineInfoMessage = String.IsNullOrEmpty(lineInfo.FilePath) ? _resources["Xml_ErrorPosition"].ToString() : _resources["Xml_ErrorFilePosition"].ToString();
var lineNumber = lineInfo.LineNumber.ToString();
var linePosition = lineInfo.LinePosition.ToString();
lineInfoMessage = String.IsNullOrEmpty(lineInfo.FilePath) ? String.Format(lineInfoMessage, lineNumber, linePosition) : String.Format(lineInfoMessage, lineInfo.FilePath, lineNumber, linePosition);
}
else
lineInfoMessage = ESCAPE_ANY;
lineInfoMessage = " " + lineInfoMessage;
paramsStartPosition = 2;
}
string message = _resources[expectedResId].ToString();
for (var i = paramsStartPosition; i < IdsAndParams.Length; i++)
{
if (IdsAndParams[i] is object[])
paramList.Add(ConstructExpectedMessage(IdsAndParams[i] as object[]));
else
{
if (IdsAndParams[i] == null)
paramList.Add(ESCAPE_ANY);
else
paramList.Add(IdsAndParams[i] as string);
}
}
try
{
message = string.Format(message, paramList.ToArray());
}
catch (FormatException)
{
throw new VerifyException("Mismatch in number of parameters!");
}
return message + lineInfoMessage;
}
}