forked from akimboyko/MetaProgramming
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Reflection-TestReferencesIntersection.linq
55 lines (49 loc) · 2.78 KB
/
Reflection-TestReferencesIntersection.linq
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<Query Kind="Program">
<Reference Relative="..\MetaProgramming\MetaProgramming.RoslynCTP.Tests\CodeSmells.Samples\CodeSmells.FakeBusinessLogic\bin\Debug\CodeSmells.FakeBusinessLogic.dll">D:\work\Courses\MetaProgramming\MetaProgramming\MetaProgramming.RoslynCTP.Tests\CodeSmells.Samples\CodeSmells.FakeBusinessLogic\bin\Debug\CodeSmells.FakeBusinessLogic.dll</Reference>
<Reference Relative="..\MetaProgramming\MetaProgramming.RoslynCTP.Tests\CodeSmells.Samples\CodeSmells.FakeDataAccessLibrary\bin\Debug\CodeSmells.FakeDataAccessLibrary.dll">D:\work\Courses\MetaProgramming\MetaProgramming\MetaProgramming.RoslynCTP.Tests\CodeSmells.Samples\CodeSmells.FakeDataAccessLibrary\bin\Debug\CodeSmells.FakeDataAccessLibrary.dll</Reference>
<Reference Relative="..\MetaProgramming\MetaProgramming.RoslynCTP.Tests\CodeSmells.Samples\CodeSmells.FakeWebApplication\bin\CodeSmells.FakeWebApplication.dll">D:\work\Courses\MetaProgramming\MetaProgramming\MetaProgramming.RoslynCTP.Tests\CodeSmells.Samples\CodeSmells.FakeWebApplication\bin\CodeSmells.FakeWebApplication.dll</Reference>
<Reference>C:\Chocolatey\lib\NUnit.Runners.2.6.2\tools\nunit.framework.dll</Reference>
<Reference>C:\Chocolatey\lib\NUnit.Runners.2.6.2\tools\lib\nunit-console-runner.dll</Reference>
<Reference><RuntimeDirectory>\System.Web.dll</Reference>
<Namespace>NUnit.Framework</Namespace>
</Query>
void Main()
{
// nunit runner
NUnit.ConsoleRunner.Runner.Main(new string[]
{
Assembly.GetExecutingAssembly().Location,
});
}
public IEnumerable Assemblies
{
get
{
yield return typeof(CodeSmells.FakeDataAccessLibrary.Repository).Assembly;
yield return typeof(CodeSmells.FakeBusinessLogic.BusinessRule).Assembly;
yield return typeof(CodeSmells.FakeWebApplication.MvcApplication).Assembly;
}
}
[Test, Combinatorial]
public void TestReferencesIntersection(
[ValueSource("Assemblies")] Assembly leftAssembly,
[ValueSource("Assemblies")] Assembly rightAssembly)
{
if (leftAssembly == rightAssembly) return;
var rightReferences = FilterOutAssemblies(rightAssembly);
var leftReferences = FilterOutAssemblies(leftAssembly);
Assert.That(leftReferences.Intersect(rightReferences),
Is.Not.Null.And.Empty);
}
private static IEnumerable<string> FilterOutAssemblies(Assembly source)
{
return new HashSet<string>(source
.GetReferencedAssemblies()
.Where(assembly => assembly.Name != @"mscorlib"
&& assembly.Name != @"Microsoft.CSharp"
&& !assembly.Name.StartsWith(@"System")
&& !assembly.Name.StartsWith(@"AutoMapper")
&& !assembly.Name.StartsWith(@"nCrunch.TestRuntime")
&& !assembly.Name.StartsWith(@"PostSharp"))
.Select(assembly => assembly.Name));
}