throw a wobbly when you're doing overloads wrong

This commit is contained in:
Brendan Forster
2014-03-08 17:18:04 +11:00
parent 276a47d8e4
commit 5c662cdc80
3 changed files with 48 additions and 0 deletions

View File

@@ -0,0 +1,42 @@
using System;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
namespace Octokit.Tests.Conventions
{
public class InterfaceMethodsMismatchException : Exception
{
public InterfaceMethodsMismatchException(Type observableType, Type clientInterface)
: base(CreateMessage(observableType, clientInterface)) { }
public InterfaceMethodsMismatchException(Type type,Type clientInterface, Exception innerException)
: base(CreateMessage(type, clientInterface), innerException) { }
protected InterfaceMethodsMismatchException(SerializationInfo info, StreamingContext context)
: base(info, context) { }
static string Format(ParameterInfo parameterInfo)
{
return String.Format("{0} {1}", parameterInfo.ParameterType.Name, parameterInfo.Name);
}
static string Format(MethodInfo methodInfo)
{
var parameters = methodInfo.GetParameters().Select(Format);
return String.Format("{0} {1}({2})", methodInfo.ReturnType, methodInfo.Name, String.Join(", ", parameters));
}
static string CreateMessage(Type observableInterface, Type clientInterface)
{
var mainMethods = clientInterface.GetMethodsOrdered();
var observableMethods = observableInterface.GetMethodsOrdered();
var formattedMainMethods = String.Join("\r\n", mainMethods.Select(Format).Select(m => String.Format(" - {0}", m)));
var formattedObservableMethods = String.Join("\r\n", observableMethods.Select(Format).Select(m => String.Format(" - {0}", m)));
return String.Format("There are some overloads which are confusing the convention tests. Check everything is okay in these types:\r\n{0}\r\n{2}\r\n{1}\r\n{3}", clientInterface.Name, observableInterface.Name, formattedMainMethods, formattedObservableMethods);
}
}
}

View File

@@ -51,6 +51,7 @@
<ItemGroup>
<Compile Include="DebuggerDisplayOnModels.cs" />
<Compile Include="Exception\InterfaceHasAdditionalMethodsException.cs" />
<Compile Include="Exception\InterfaceMethodsMismatchException.cs" />
<Compile Include="Exception\InterfaceMissingMethodsException.cs" />
<Compile Include="Exception\InterfaceNotFoundException.cs" />
<Compile Include="Exception\ParameterCountMismatchException.cs" />

View File

@@ -34,6 +34,11 @@ namespace Octokit.Tests.Conventions
throw new InterfaceHasAdditionalMethodsException(observableClient, additionalMethodsOnReactiveClient);
}
if (mainNames.Count() != observableNames.Count())
{
throw new InterfaceMethodsMismatchException(observableClient, clientInterface);
}
int index = 0;
foreach(var mainMethod in mainMethods)
{