-
Notifications
You must be signed in to change notification settings - Fork 172
/
LoadAnalyzersAndFixersTests.cs
141 lines (123 loc) · 6.26 KB
/
LoadAnalyzersAndFixersTests.cs
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.CodeFixes;
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.Tools.Analyzers;
using Xunit;
namespace Microsoft.CodeAnalysis.Tools.Tests.Analyzers
{
using static AnalyzerAssemblyGenerator;
public class LoadAnalyzersAndFixersTests
{
[Fact]
public static async Task TestSingleAnalyzerAndFixerAsync()
{
var assemblies = new[]
{
await GenerateAssemblyAsync(
GenerateAnalyzerCode("DiagnosticAnalyzer1", "DiagnosticAnalyzerId"),
GenerateCodeFix("CodeFixProvider1", "DiagnosticAnalyzerId"))
};
var analyzersAndFixers = AnalyzerFinderHelpers.LoadAnalyzersAndFixers(assemblies);
var (analyzer, fixer) = Assert.Single(analyzersAndFixers);
var analyzerDiagnosticDescriptor = Assert.Single(analyzer.SupportedDiagnostics);
var fixerDiagnosticId = Assert.Single(fixer.FixableDiagnosticIds);
Assert.Equal(analyzerDiagnosticDescriptor.Id, fixerDiagnosticId);
}
[Fact]
public static async Task TestMultipleAnalyzersAndFixersAsync()
{
var assemblies = new[]
{
await GenerateAssemblyAsync(
GenerateAnalyzerCode("DiagnosticAnalyzer1", "DiagnosticAnalyzerId1"),
GenerateAnalyzerCode("DiagnosticAnalyzer2", "DiagnosticAnalyzerId2"),
GenerateCodeFix("CodeFixProvider1", "DiagnosticAnalyzerId1"),
GenerateCodeFix("CodeFixProvider2", "DiagnosticAnalyzerId2"))
};
var analyzersAndFixers = AnalyzerFinderHelpers.LoadAnalyzersAndFixers(assemblies);
Assert.Equal(2, analyzersAndFixers.Length);
Assert.Collection(analyzersAndFixers, VerifyAnalyzerCodeFixTuple, VerifyAnalyzerCodeFixTuple);
}
[Fact]
public static async Task TestMultipleAnalyzersAndFixersFromTwoAssembliesAsync()
{
var assemblies = new[]
{
await GenerateAssemblyAsync(
GenerateAnalyzerCode("DiagnosticAnalyzer1", "DiagnosticAnalyzerId1"),
GenerateCodeFix("CodeFixProvider1", "DiagnosticAnalyzerId1")),
await GenerateAssemblyAsync(
GenerateAnalyzerCode("DiagnosticAnalyzer2", "DiagnosticAnalyzerId2"),
GenerateCodeFix("CodeFixProvider2", "DiagnosticAnalyzerId2")),
};
var analyzersAndFixers = AnalyzerFinderHelpers.LoadAnalyzersAndFixers(assemblies);
Assert.Equal(2, analyzersAndFixers.Length);
Assert.Collection(analyzersAndFixers, VerifyAnalyzerCodeFixTuple, VerifyAnalyzerCodeFixTuple);
}
[Fact]
public static async Task NonMatchingIdsAsync()
{
var assemblies = new[]
{
await GenerateAssemblyAsync(
GenerateAnalyzerCode("DiagnosticAnalyzer1", "DiagnosticAnalyzerId"),
GenerateCodeFix("CodeFixProvider1", "CodeFixProviderId"))
};
var analyzersAndFixers = AnalyzerFinderHelpers.LoadAnalyzersAndFixers(assemblies);
Assert.Empty(analyzersAndFixers);
}
[Fact]
public static async Task SomeMatchingIdsAsync()
{
var assemblies = new[]
{
await GenerateAssemblyAsync(
GenerateAnalyzerCode("DiagnosticAnalyzer1", "DiagnosticAnalyzerId1"),
GenerateAnalyzerCode("DiagnosticAnalyzer2", "DiagnosticAnalyzerId2"),
GenerateCodeFix("CodeFixProvider1", "DiagnosticAnalyzerId1"),
GenerateCodeFix("CodeFixProvider2", "CodeFixProviderId"))
};
var analyzersAndFixers = AnalyzerFinderHelpers.LoadAnalyzersAndFixers(assemblies);
var (analyzer, fixer) = Assert.Single(analyzersAndFixers);
var analyzerDiagnosticDescriptor = Assert.Single(analyzer.SupportedDiagnostics);
var fixerDiagnosticId = Assert.Single(fixer.FixableDiagnosticIds);
Assert.Equal(analyzerDiagnosticDescriptor.Id, fixerDiagnosticId);
}
[Fact]
public static async Task SingleIdMapstoMultipleFixersAsync()
{
var assemblies = new[]
{
await GenerateAssemblyAsync(
GenerateAnalyzerCode("DiagnosticAnalyzer1", "DiagnosticAnalyzerId1"),
GenerateAnalyzerCode("DiagnosticAnalyzer2", "DiagnosticAnalyzerId1"),
GenerateCodeFix("CodeFixProvider1", "DiagnosticAnalyzerId1"),
GenerateCodeFix("CodeFixProvider2", "CodeFixProviderId"))
};
var analyzersAndFixers = AnalyzerFinderHelpers.LoadAnalyzersAndFixers(assemblies);
Assert.Equal(2, analyzersAndFixers.Length);
Assert.Collection(analyzersAndFixers, VerifyAnalyzerCodeFixTuple, VerifyAnalyzerCodeFixTuple);
}
[Fact]
public static async Task MultipleIdsMaptoSingleFixerAsync()
{
var assemblies = new[]
{
await GenerateAssemblyAsync(
GenerateAnalyzerCode("DiagnosticAnalyzer1", "DiagnosticAnalyzerId1"),
GenerateAnalyzerCode("DiagnosticAnalyzer2", "DiagnosticAnalyzerId1"),
GenerateCodeFix("CodeFixProvider1", "DiagnosticAnalyzerId1"))
};
var analyzersAndFixers = AnalyzerFinderHelpers.LoadAnalyzersAndFixers(assemblies);
Assert.Equal(2, analyzersAndFixers.Length);
Assert.Collection(analyzersAndFixers, VerifyAnalyzerCodeFixTuple, VerifyAnalyzerCodeFixTuple);
}
private static void VerifyAnalyzerCodeFixTuple((DiagnosticAnalyzer Analyzer, CodeFixProvider Fixer) tuple)
{
var analyzerDiagnosticDescriptor = Assert.Single(tuple.Analyzer.SupportedDiagnostics);
var fixerDiagnosticId = Assert.Single(tuple.Fixer.FixableDiagnosticIds);
Assert.Equal(analyzerDiagnosticDescriptor.Id, fixerDiagnosticId);
}
}
}