From d3106e487b43debacdeb6c886a096b07158b137c Mon Sep 17 00:00:00 2001 From: lbargaoanu Date: Mon, 10 Feb 2014 15:23:10 +0200 Subject: [PATCH] better diagnostics --- .../SyncObservableClients.cs | 11 +++++++--- Octokit.Tests.Conventions/TypeExtensions.cs | 7 ++++++- Octokit.Tests/Helpers/AssertEx.cs | 21 +++++++++++++++++++ 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/Octokit.Tests.Conventions/SyncObservableClients.cs b/Octokit.Tests.Conventions/SyncObservableClients.cs index b1f60458..376750ac 100644 --- a/Octokit.Tests.Conventions/SyncObservableClients.cs +++ b/Octokit.Tests.Conventions/SyncObservableClients.cs @@ -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++; } } diff --git a/Octokit.Tests.Conventions/TypeExtensions.cs b/Octokit.Tests.Conventions/TypeExtensions.cs index 6d490caf..34fb4091 100644 --- a/Octokit.Tests.Conventions/TypeExtensions.cs +++ b/Octokit.Tests.Conventions/TypeExtensions.cs @@ -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) diff --git a/Octokit.Tests/Helpers/AssertEx.cs b/Octokit.Tests/Helpers/AssertEx.cs index 24265d17..ae3cc068 100644 --- a/Octokit.Tests/Helpers/AssertEx.cs +++ b/Octokit.Tests/Helpers/AssertEx.cs @@ -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(IEnumerable actual, string message) + { + var empty = Enumerable.Empty(); + 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(MemberInfo memberInfo, bool inherit = false) where TAttribute : Attribute { Assert.True(memberInfo.IsDefined(typeof(TAttribute), inherit), memberInfo.ToString() + Environment.NewLine);