62 lines
2.4 KiB
C#
Raw Normal View History

// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
namespace System.Data.Entity
{
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using Xunit;
public static class ExceptionTestExtensions
{
public static void ValidateMessage(
this Exception exception,
string expectedResourceKey,
params object[] parameters)
{
Debug.Assert(exception != null);
Debug.Assert(expectedResourceKey != null);
ValidateMessage(exception, TestBase.EntityFrameworkAssembly, expectedResourceKey, null, parameters);
}
public static void ValidateMessage(
this Exception exception,
Assembly resourceAssembly,
string expectedResourceKey,
string resourceTable = null,
params object[] parameters)
{
Debug.Assert(exception != null);
Debug.Assert(resourceAssembly != null);
Debug.Assert(expectedResourceKey != null);
if (resourceTable == null
&& resourceAssembly == TestBase.EntityFrameworkAssembly)
{
resourceTable = "System.Data.Entity.Properties.Resources";
}
var actualMessage = exception.Message;
var argException = exception as ArgumentException;
if (argException != null)
{
var paramPartIndex = argException.Message.LastIndexOf("\r\n");
if (paramPartIndex != -1)
{
actualMessage = argException.Message.Substring(0, paramPartIndex);
Assert.True(parameters.Length >= 1, "Expected first parameter to be param for ArgumentException.");
Assert.Equal(parameters[0], argException.ParamName);
parameters = parameters.Skip(1).ToArray();
}
}
var assemblyResourceLookup
= resourceTable == null
? new AssemblyResourceLookup(resourceAssembly)
: new AssemblyResourceLookup(resourceAssembly, resourceTable);
new StringResourceVerifier(assemblyResourceLookup)
.VerifyMatch(expectedResourceKey, actualMessage, parameters);
}
}
}