From 244bd36293ca21c50de853d54107fc3ecfef503a Mon Sep 17 00:00:00 2001
From: Niko Schuessler <54370830+nschuessler@users.noreply.github.com>
Date: Mon, 10 Aug 2020 12:50:08 -0700
Subject: [PATCH 1/4] Add diagnostic verification extensibility.
---
.../AnalyzerTest`1.cs | 16 ++++++++++++++++
.../PublicAPI.Unshipped.txt | 1 +
2 files changed, 17 insertions(+)
diff --git a/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/AnalyzerTest`1.cs b/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/AnalyzerTest`1.cs
index 90c321006..ab68c1763 100644
--- a/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/AnalyzerTest`1.cs
+++ b/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/AnalyzerTest`1.cs
@@ -239,6 +239,20 @@ protected async Task VerifyDiagnosticsAsync((string filename, SourceText content
await VerifySuppressionDiagnosticsAsync(analyzers, sources, additionalFiles, additionalProjects, additionalMetadataReferences, expected, verifier, cancellationToken).ConfigureAwait(false);
}
+ ///
+ /// Checks each of the actual s found and compares them with the corresponding
+ /// based on custom test requirements not yet supported by the test framework.
+ ///
+ /// The analyzers that have been run on the sources.
+ /// The s found by the compiler after running the analyzer
+ /// on the source code.
+ /// The s describing the expected
+ /// diagnostics for the sources.
+ /// The verifier to use for test assertions.
+ protected virtual void VerifyDiagnosticCustom(ImmutableArray analyzers, Diagnostic actual, DiagnosticResult expected, IVerifier verifier)
+ {
+ }
+
private async Task VerifyGeneratedCodeDiagnosticsAsync(ImmutableArray analyzers, (string filename, SourceText content)[] sources, (string filename, SourceText content)[] additionalFiles, ProjectState[] additionalProjects, MetadataReference[] additionalMetadataReferences, DiagnosticResult[] expected, IVerifier verifier, CancellationToken cancellationToken)
{
if (TestBehaviors.HasFlag(TestBehaviors.SkipGeneratedCodeCheck)
@@ -371,6 +385,8 @@ private void VerifyDiagnosticResults(IEnumerable actualResults, Immu
StringComparer.Ordinal,
message);
}
+
+ VerifyDiagnosticCustom(analyzers, actual, expected, verifier);
}
}
diff --git a/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/PublicAPI.Unshipped.txt b/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/PublicAPI.Unshipped.txt
index a02895c9a..ebc621a47 100644
--- a/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/PublicAPI.Unshipped.txt
+++ b/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/PublicAPI.Unshipped.txt
@@ -294,6 +294,7 @@ virtual Microsoft.CodeAnalysis.Testing.AnalyzerTest.IsCompilerDiagnos
virtual Microsoft.CodeAnalysis.Testing.AnalyzerTest.GetAnalyzerOptions(Microsoft.CodeAnalysis.Project project) -> Microsoft.CodeAnalysis.Diagnostics.AnalyzerOptions
virtual Microsoft.CodeAnalysis.Testing.AnalyzerTest.GetDefaultDiagnostic(Microsoft.CodeAnalysis.Diagnostics.DiagnosticAnalyzer[] analyzers) -> Microsoft.CodeAnalysis.DiagnosticDescriptor
virtual Microsoft.CodeAnalysis.Testing.AnalyzerTest.RunAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task
+virtual Microsoft.CodeAnalysis.Testing.AnalyzerTest.VerifyDiagnosticCustom(System.Collections.Immutable.ImmutableArray analyzers, Microsoft.CodeAnalysis.Diagnostic actual, Microsoft.CodeAnalysis.Testing.DiagnosticResult expected, Microsoft.CodeAnalysis.Testing.IVerifier verifier) -> void
virtual Microsoft.CodeAnalysis.Testing.CodeActionTest.FilterCodeActions(System.Collections.Immutable.ImmutableArray actions) -> System.Collections.Immutable.ImmutableArray
virtual Microsoft.CodeAnalysis.Testing.DefaultVerifier.CreateMessage(string message) -> string
virtual Microsoft.CodeAnalysis.Testing.DefaultVerifier.Empty(string collectionName, System.Collections.Generic.IEnumerable collection) -> void
From 67f31e031378be09d778c802cd6d73f322540ad9 Mon Sep 17 00:00:00 2001
From: Niko Schuessler <54370830+nschuessler@users.noreply.github.com>
Date: Mon, 10 Aug 2020 15:09:24 -0700
Subject: [PATCH 2/4] Update API based on review feedback.
---
.../AnalyzerTest`1.cs | 26 ++++++++-----------
.../PublicAPI.Unshipped.txt | 3 ++-
2 files changed, 13 insertions(+), 16 deletions(-)
diff --git a/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/AnalyzerTest`1.cs b/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/AnalyzerTest`1.cs
index ab68c1763..b0ad1d8de 100644
--- a/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/AnalyzerTest`1.cs
+++ b/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/AnalyzerTest`1.cs
@@ -133,8 +133,18 @@ public string TestCode
///
public List DisabledDiagnostics { get; } = new List();
+ ///
+ /// Gets or sets the reference assemblies to use.
+ ///
public ReferenceAssemblies ReferenceAssemblies { get; set; } = ReferenceAssemblies.Default;
+ ///
+ /// Gets or sets an additional verifier for a diagnostic.
+ /// The action compares actual and the expected
+ /// based on custom test requirements not yet supported by the test framework.
+ ///
+ public Action, Diagnostic, DiagnosticResult, IVerifier>? DiagnosticVerifier { get; set; }
+
///
/// Gets a collection of transformation functions to apply to during diagnostic
/// or code fix test setup.
@@ -239,20 +249,6 @@ protected async Task VerifyDiagnosticsAsync((string filename, SourceText content
await VerifySuppressionDiagnosticsAsync(analyzers, sources, additionalFiles, additionalProjects, additionalMetadataReferences, expected, verifier, cancellationToken).ConfigureAwait(false);
}
- ///
- /// Checks each of the actual s found and compares them with the corresponding
- /// based on custom test requirements not yet supported by the test framework.
- ///
- /// The analyzers that have been run on the sources.
- /// The s found by the compiler after running the analyzer
- /// on the source code.
- /// The s describing the expected
- /// diagnostics for the sources.
- /// The verifier to use for test assertions.
- protected virtual void VerifyDiagnosticCustom(ImmutableArray analyzers, Diagnostic actual, DiagnosticResult expected, IVerifier verifier)
- {
- }
-
private async Task VerifyGeneratedCodeDiagnosticsAsync(ImmutableArray analyzers, (string filename, SourceText content)[] sources, (string filename, SourceText content)[] additionalFiles, ProjectState[] additionalProjects, MetadataReference[] additionalMetadataReferences, DiagnosticResult[] expected, IVerifier verifier, CancellationToken cancellationToken)
{
if (TestBehaviors.HasFlag(TestBehaviors.SkipGeneratedCodeCheck)
@@ -386,7 +382,7 @@ private void VerifyDiagnosticResults(IEnumerable actualResults, Immu
message);
}
- VerifyDiagnosticCustom(analyzers, actual, expected, verifier);
+ DiagnosticVerifier?.Invoke(analyzers, actual, expected, verifier);
}
}
diff --git a/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/PublicAPI.Unshipped.txt b/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/PublicAPI.Unshipped.txt
index ebc621a47..adb1b4822 100644
--- a/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/PublicAPI.Unshipped.txt
+++ b/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/PublicAPI.Unshipped.txt
@@ -3,6 +3,8 @@ Microsoft.CodeAnalysis.Testing.AnalyzerTest.AnalyzerTest() -> void
Microsoft.CodeAnalysis.Testing.AnalyzerTest.CompilerDiagnostics.get -> Microsoft.CodeAnalysis.Testing.CompilerDiagnostics
Microsoft.CodeAnalysis.Testing.AnalyzerTest.CompilerDiagnostics.set -> void
Microsoft.CodeAnalysis.Testing.AnalyzerTest.CreateProjectAsync((string filename, Microsoft.CodeAnalysis.Text.SourceText content)[] sources, (string filename, Microsoft.CodeAnalysis.Text.SourceText content)[] additionalFiles, Microsoft.CodeAnalysis.Testing.ProjectState[] additionalProjects, Microsoft.CodeAnalysis.MetadataReference[] additionalMetadataReferences, string language, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task
+Microsoft.CodeAnalysis.Testing.AnalyzerTest.DiagnosticVerifier.get -> System.Action, Microsoft.CodeAnalysis.Diagnostic, Microsoft.CodeAnalysis.Testing.DiagnosticResult, Microsoft.CodeAnalysis.Testing.IVerifier>
+Microsoft.CodeAnalysis.Testing.AnalyzerTest.DiagnosticVerifier.set -> void
Microsoft.CodeAnalysis.Testing.AnalyzerTest.DisabledDiagnostics.get -> System.Collections.Generic.List
Microsoft.CodeAnalysis.Testing.AnalyzerTest.ExpectedDiagnostics.get -> System.Collections.Generic.List
Microsoft.CodeAnalysis.Testing.AnalyzerTest.FormatVerifierMessage(System.Collections.Immutable.ImmutableArray analyzers, Microsoft.CodeAnalysis.Diagnostic actual, Microsoft.CodeAnalysis.Testing.DiagnosticResult expected, string message) -> string
@@ -294,7 +296,6 @@ virtual Microsoft.CodeAnalysis.Testing.AnalyzerTest.IsCompilerDiagnos
virtual Microsoft.CodeAnalysis.Testing.AnalyzerTest.GetAnalyzerOptions(Microsoft.CodeAnalysis.Project project) -> Microsoft.CodeAnalysis.Diagnostics.AnalyzerOptions
virtual Microsoft.CodeAnalysis.Testing.AnalyzerTest.GetDefaultDiagnostic(Microsoft.CodeAnalysis.Diagnostics.DiagnosticAnalyzer[] analyzers) -> Microsoft.CodeAnalysis.DiagnosticDescriptor
virtual Microsoft.CodeAnalysis.Testing.AnalyzerTest.RunAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task
-virtual Microsoft.CodeAnalysis.Testing.AnalyzerTest.VerifyDiagnosticCustom(System.Collections.Immutable.ImmutableArray analyzers, Microsoft.CodeAnalysis.Diagnostic actual, Microsoft.CodeAnalysis.Testing.DiagnosticResult expected, Microsoft.CodeAnalysis.Testing.IVerifier verifier) -> void
virtual Microsoft.CodeAnalysis.Testing.CodeActionTest.FilterCodeActions(System.Collections.Immutable.ImmutableArray actions) -> System.Collections.Immutable.ImmutableArray
virtual Microsoft.CodeAnalysis.Testing.DefaultVerifier.CreateMessage(string message) -> string
virtual Microsoft.CodeAnalysis.Testing.DefaultVerifier.Empty(string collectionName, System.Collections.Generic.IEnumerable collection) -> void
From 0a98b506c2237e8d6ce4045a554cd57992f12915 Mon Sep 17 00:00:00 2001
From: Niko Schuessler <54370830+nschuessler@users.noreply.github.com>
Date: Mon, 10 Aug 2020 18:07:45 -0700
Subject: [PATCH 3/4] Remove analyzers argument.
---
.../Microsoft.CodeAnalysis.Analyzer.Testing/AnalyzerTest`1.cs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/AnalyzerTest`1.cs b/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/AnalyzerTest`1.cs
index b0ad1d8de..d1eac023a 100644
--- a/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/AnalyzerTest`1.cs
+++ b/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/AnalyzerTest`1.cs
@@ -143,7 +143,7 @@ public string TestCode
/// The action compares actual and the expected
/// based on custom test requirements not yet supported by the test framework.
///
- public Action, Diagnostic, DiagnosticResult, IVerifier>? DiagnosticVerifier { get; set; }
+ public Action? DiagnosticVerifier { get; set; }
///
/// Gets a collection of transformation functions to apply to during diagnostic
@@ -382,7 +382,7 @@ private void VerifyDiagnosticResults(IEnumerable actualResults, Immu
message);
}
- DiagnosticVerifier?.Invoke(analyzers, actual, expected, verifier);
+ DiagnosticVerifier?.Invoke(actual, expected, verifier);
}
}
From 1fe7f624441e91bae6f133795cef6cca93123af1 Mon Sep 17 00:00:00 2001
From: Niko Schuessler <54370830+nschuessler@users.noreply.github.com>
Date: Mon, 10 Aug 2020 18:29:09 -0700
Subject: [PATCH 4/4] Update public api signatures.
---
.../PublicAPI.Unshipped.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/PublicAPI.Unshipped.txt b/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/PublicAPI.Unshipped.txt
index adb1b4822..38d425db6 100644
--- a/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/PublicAPI.Unshipped.txt
+++ b/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/PublicAPI.Unshipped.txt
@@ -3,7 +3,7 @@ Microsoft.CodeAnalysis.Testing.AnalyzerTest.AnalyzerTest() -> void
Microsoft.CodeAnalysis.Testing.AnalyzerTest.CompilerDiagnostics.get -> Microsoft.CodeAnalysis.Testing.CompilerDiagnostics
Microsoft.CodeAnalysis.Testing.AnalyzerTest.CompilerDiagnostics.set -> void
Microsoft.CodeAnalysis.Testing.AnalyzerTest.CreateProjectAsync((string filename, Microsoft.CodeAnalysis.Text.SourceText content)[] sources, (string filename, Microsoft.CodeAnalysis.Text.SourceText content)[] additionalFiles, Microsoft.CodeAnalysis.Testing.ProjectState[] additionalProjects, Microsoft.CodeAnalysis.MetadataReference[] additionalMetadataReferences, string language, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task
-Microsoft.CodeAnalysis.Testing.AnalyzerTest.DiagnosticVerifier.get -> System.Action, Microsoft.CodeAnalysis.Diagnostic, Microsoft.CodeAnalysis.Testing.DiagnosticResult, Microsoft.CodeAnalysis.Testing.IVerifier>
+Microsoft.CodeAnalysis.Testing.AnalyzerTest.DiagnosticVerifier.get -> System.Action
Microsoft.CodeAnalysis.Testing.AnalyzerTest.DiagnosticVerifier.set -> void
Microsoft.CodeAnalysis.Testing.AnalyzerTest.DisabledDiagnostics.get -> System.Collections.Generic.List
Microsoft.CodeAnalysis.Testing.AnalyzerTest.ExpectedDiagnostics.get -> System.Collections.Generic.List