mirror of
https://github.com/zoriya/octokit.net.git
synced 2026-06-08 12:42:32 +00:00
better diagnostics
This commit is contained in:
@@ -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++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user