Skip to content

Commit f55d7cd

Browse files
committed
- ignoring assembly loading errors
1 parent 7b9b0ad commit f55d7cd

3 files changed

Lines changed: 95 additions & 64 deletions

File tree

ConventionTests/ConventionTests.NUnit.cs

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,8 @@ protected virtual Assembly[] GetAssembliesToScan(ConventionData data)
144144
var companyName = assembly.FullName.Substring(0, assembly.FullName.IndexOf('.'));
145145
var assemblyNames = assembly.GetReferencedAssemblies();
146146
var applicationAssemblies = Array.FindAll(assemblyNames, n => n.FullName.StartsWith(companyName));
147-
return Array.ConvertAll(applicationAssemblies, Assembly.Load);
147+
var assemblies = Array.ConvertAll(applicationAssemblies, n => n.TryLoadAssembly());
148+
return Array.FindAll(assemblies, a => a != null);
148149
}
149150

150151
/// <summary>
@@ -156,22 +157,10 @@ protected virtual Assembly[] GetAssembliesToScan(ConventionData data)
156157
protected virtual Type[] GetTypesToTest(ConventionData data)
157158
{
158159
return
159-
GetAssembliesToScan(data).SelectMany(GetTypesSafely).Where(data.Types.Invoke).OrderBy(t => t.FullName)
160+
GetAssembliesToScan(data).SelectMany(a => a.SafeGetTypes()).Where(data.Types.Invoke).OrderBy(t => t.FullName)
160161
.ToArray();
161162
}
162-
163-
private static IEnumerable<Type> GetTypesSafely(Assembly assembly)
164-
{
165-
try
166-
{
167-
return assembly.GetTypes();
168-
}
169-
catch (ReflectionTypeLoadException ex)
170-
{
171-
return ex.Types.Where(x => x != null);
172-
}
173-
}
174-
}
163+
}
175164

176165
public abstract class WindsorConventionTest<TDiagnostic> : WindsorConventionTest<TDiagnostic, IHandler>
177166
where TDiagnostic : class, IDiagnostic<IEnumerable<IHandler>>, IDiagnostic<object>
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
2+
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=Conventions/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
Lines changed: 89 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.IO;
23
using System.Linq;
34
using System.Reflection;
45
using ApprovalTests.Reporters;
@@ -8,53 +9,92 @@
89

910
namespace ConventionTests
1011
{
11-
[TestFixture]
12-
public class ConventionTestsRunner
13-
{
14-
[TestFixtureSetUp]
15-
public static void GlobalSetUp()
16-
{
17-
}
18-
19-
public TestCaseData[] Conventions
20-
{
21-
get
22-
{
23-
var types = GetConventionTypes();
24-
var conventionTests = Array.ConvertAll(types, BuildTestData);
25-
return conventionTests;
26-
}
27-
}
28-
29-
private TestCaseData BuildTestData(Type t)
30-
{
31-
var convention = CreateConvention(t);
32-
return new TestCaseData(convention).SetName(convention.Name);
33-
}
34-
35-
private static IConventionTest CreateConvention(Type t)
36-
{
37-
return (IConventionTest) Activator.CreateInstance(t);
38-
}
39-
40-
private static Type[] GetConventionTypes()
41-
{
42-
var types =
43-
Assembly.GetExecutingAssembly().GetExportedTypes().Where(
44-
IsConventionTest).ToArray();
45-
return types;
46-
}
47-
48-
private static bool IsConventionTest(Type type)
49-
{
50-
return type.IsClass && type.IsAbstract == false && typeof (IConventionTest).IsAssignableFrom(type);
51-
}
52-
53-
[Test]
54-
[TestCaseSource("Conventions")]
55-
public void Run(IConventionTest test)
56-
{
57-
test.Execute();
58-
}
59-
}
12+
[TestFixture]
13+
public class ConventionTestsRunner
14+
{
15+
[TestFixtureSetUp]
16+
public static void GlobalSetUp()
17+
{
18+
}
19+
20+
public TestCaseData[] Conventions
21+
{
22+
get
23+
{
24+
var types = GetConventionTypes();
25+
var conventionTests = Array.ConvertAll(types, BuildTestData);
26+
return conventionTests;
27+
}
28+
}
29+
30+
private TestCaseData BuildTestData(Type t)
31+
{
32+
var convention = CreateConvention(t);
33+
return new TestCaseData(convention).SetName(convention.Name);
34+
}
35+
36+
private static IConventionTest CreateConvention(Type t)
37+
{
38+
return (IConventionTest) Activator.CreateInstance(t);
39+
}
40+
41+
private static Type[] GetConventionTypes()
42+
{
43+
var types =
44+
Assembly.GetExecutingAssembly().GetExportedTypes().Where(
45+
IsConventionTest).ToArray();
46+
return types;
47+
}
48+
49+
private static bool IsConventionTest(Type type)
50+
{
51+
return type.IsClass && type.IsAbstract == false && typeof (IConventionTest).IsAssignableFrom(type);
52+
}
53+
54+
[Test]
55+
[TestCaseSource("Conventions")]
56+
public void Run(IConventionTest test)
57+
{
58+
test.Execute();
59+
}
60+
}
61+
62+
public static class ReflectionExtensions
63+
{
64+
public static Assembly TryLoadAssembly(this AssemblyName name)
65+
{
66+
try
67+
{
68+
return Assembly.Load(name);
69+
}
70+
catch (FileNotFoundException)
71+
{
72+
return null;
73+
}
74+
catch (FileLoadException)
75+
{
76+
return null;
77+
}
78+
catch (BadImageFormatException)
79+
{
80+
return null;
81+
}
82+
catch (ReflectionTypeLoadException)
83+
{
84+
return null;
85+
}
86+
}
87+
88+
public static Type[] SafeGetTypes(this Assembly assembly)
89+
{
90+
try
91+
{
92+
return assembly.GetTypes();
93+
}
94+
catch (ReflectionTypeLoadException ex)
95+
{
96+
return Array.FindAll(ex.Types, x => x != null);
97+
}
98+
}
99+
}
60100
}

0 commit comments

Comments
 (0)