better diagnostics

This commit is contained in:
lbargaoanu
2014-02-10 15:23:10 +02:00
parent 8fb78f7414
commit d3106e487b
3 changed files with 35 additions and 4 deletions
@@ -4,8 +4,10 @@ using System.Collections.Generic;
using System.Linq;
using System.Reactive;
using System.Reflection;
using Octokit.Tests.Helpers;
using Xunit;
using Xunit.Extensions;
using Xunit.Sdk;
namespace Octokit.Tests.Conventions
{
@@ -14,7 +16,7 @@ namespace Octokit.Tests.Conventions
[Fact]
private void CheckObservableClientExample()
{
CheckObservableClients(typeof(IAssigneesClient));
CheckObservableClients(typeof(ISearchClient));
}
[Theory]
@@ -24,12 +26,15 @@ namespace Octokit.Tests.Conventions
var observableClient = clientInterface.GetObservableClientInterface();
var mainMethods = clientInterface.GetMethodsOrdered();
var observableMethods = observableClient.GetMethodsOrdered();
Assert.Equal(mainMethods.Length, observableMethods.Length);
var mainNames = Array.ConvertAll(mainMethods, m => m.Name);
var observableNames = Array.ConvertAll(observableMethods, m => m.Name);
AssertEx.Empty(observableNames.Except(mainNames), "Extra observable methods");
AssertEx.Empty(mainNames.Except(observableNames), "Missing observable methods");
int index = 0;
foreach(var mainMethod in mainMethods)
{
var observableMethod = observableMethods[index];
CheckMethod(mainMethod, observableMethod);
AssertEx.WithMessage(() => CheckMethod(mainMethod, observableMethod), "Invalid signature for " + observableMethod);
index++;
}
}
+6 -1
View File
@@ -68,7 +68,12 @@ namespace Octokit.Tests.Conventions
{
var observableClient = typeof(IObservableEventsClient);
var observableClientName = observableClient.Namespace + "." + ObservablePrefix + type.Name.Substring(RealNameIndex);
return observableClient.Assembly.GetType(observableClientName, throwOnError: true);
var observableInterface = observableClient.Assembly.GetType(observableClientName);
if(observableInterface == null)
{
throw new Exception("Cannot find observable interface "+observableClientName);
}
return observableInterface;
}
public static bool IsTask(this Type type)
+21
View File
@@ -1,12 +1,33 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using Xunit;
using Xunit.Sdk;
namespace Octokit.Tests.Helpers
{
public static class AssertEx
{
public static void Empty<T>(IEnumerable<T> actual, string message)
{
var empty = Enumerable.Empty<T>();
WithMessage(() => Assert.Equal(empty, actual.ToArray()), message);
}
public static void WithMessage(Action assert, string message)
{
try
{
assert();
}
catch(AssertException ex)
{
throw new Exception(message, ex);
}
}
public static void HasAttribute<TAttribute>(MemberInfo memberInfo, bool inherit = false) where TAttribute : Attribute
{
Assert.True(memberInfo.IsDefined(typeof(TAttribute), inherit), memberInfo.ToString() + Environment.NewLine);