Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/linker.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMateo Torres-Ruiz <mateoatr@users.noreply.github.com>2021-01-20 14:12:30 +0300
committerGitHub <noreply@github.com>2021-01-20 14:12:30 +0300
commitbb0c4c6a2f533c437fcc35b53417a6f0250078ec (patch)
tree752348d5bf06866d3069f0b1b36088d35168087f /test/ILLink.RoslynAnalyzer.Tests
parentd948ae4bac935b45aa432b6550d8987678c29aa3 (diff)
Add analyzer for RequiresAssemblyFilesAttribute (#1722)
Diffstat (limited to 'test/ILLink.RoslynAnalyzer.Tests')
-rw-r--r--test/ILLink.RoslynAnalyzer.Tests/RequiresAssemblyFilesAnalyzerTests.cs152
-rw-r--r--test/ILLink.RoslynAnalyzer.Tests/RequiresUnreferencedCodeAnalyzerTests.cs4
-rw-r--r--test/ILLink.RoslynAnalyzer.Tests/TestCaseUtils.cs1
3 files changed, 152 insertions, 5 deletions
diff --git a/test/ILLink.RoslynAnalyzer.Tests/RequiresAssemblyFilesAnalyzerTests.cs b/test/ILLink.RoslynAnalyzer.Tests/RequiresAssemblyFilesAnalyzerTests.cs
new file mode 100644
index 000000000..466f81db8
--- /dev/null
+++ b/test/ILLink.RoslynAnalyzer.Tests/RequiresAssemblyFilesAnalyzerTests.cs
@@ -0,0 +1,152 @@
+using System;
+using System.Threading.Tasks;
+using Microsoft.CodeAnalysis.Testing;
+using Xunit;
+using VerifyCS = ILLink.RoslynAnalyzer.Tests.CSharpAnalyzerVerifier<
+ ILLink.RoslynAnalyzer.RequiresAssemblyFilesAnalyzer>;
+
+namespace ILLink.RoslynAnalyzer.Tests
+{
+ public class RequiresAssemblyFilesAnalyzerTests
+ {
+ static Task VerifyRequiresAssemblyFilesAnalyzer (string source, params DiagnosticResult[] expected)
+ {
+ // TODO: Remove this once we have the new attribute in the runtime.
+ source = @"namespace System.Diagnostics.CodeAnalysis
+{
+#nullable enable
+ [AttributeUsage(AttributeTargets.Constructor |
+ AttributeTargets.Event |
+ AttributeTargets.Method |
+ AttributeTargets.Property,
+ Inherited = false,
+ AllowMultiple = false)]
+ public sealed class RequiresAssemblyFilesAttribute : Attribute
+ {
+ public RequiresAssemblyFilesAttribute() { }
+ public string? Message { get; set; }
+ public string? Url { get; set; }
+ }
+}" + Environment.NewLine + source;
+ return VerifyCS.VerifyAnalyzerAsync (source,
+ TestCaseUtils.UseMSBuildProperties (MSBuildPropertyOptionNames.PublishSingleFile),
+ expected);
+ }
+
+ [Fact]
+ public Task SimpleDiagnosticOnEvent ()
+ {
+ var TestRequiresAssemblyFieldsOnEvent = @"
+class C
+{
+ [System.Diagnostics.CodeAnalysis.RequiresAssemblyFiles]
+ event System.EventHandler? E;
+
+ void M()
+ {
+ var handler = E;
+ }
+}";
+ return VerifyRequiresAssemblyFilesAnalyzer (TestRequiresAssemblyFieldsOnEvent,
+ VerifyCS.Diagnostic ().WithSpan (25, 17, 25, 18).WithArguments ("C.E"));
+ }
+
+ [Fact]
+ public Task SimpleDiagnosticOnMethod ()
+ {
+ var TestRequiresAssemblyFilesOnMethod = @"
+class C
+{
+ [System.Diagnostics.CodeAnalysis.RequiresAssemblyFiles]
+ void M1()
+ {
+ }
+
+ void M2()
+ {
+ M1();
+ }
+}";
+ return VerifyRequiresAssemblyFilesAnalyzer (TestRequiresAssemblyFilesOnMethod,
+ VerifyCS.Diagnostic ().WithSpan (27, 3, 27, 7).WithArguments ("C.M2()"));
+ }
+
+ [Fact]
+ public Task SimpleDiagnosticOnProperty ()
+ {
+ var TestRequiresAssemblyFilesOnProperty = @"
+class C
+{
+ [System.Diagnostics.CodeAnalysis.RequiresAssemblyFiles]
+ bool P { get; set; }
+
+ void M()
+ {
+ P = false;
+ bool b = P;
+ }
+}";
+ return VerifyRequiresAssemblyFilesAnalyzer (TestRequiresAssemblyFilesOnProperty,
+ VerifyCS.Diagnostic ().WithSpan (25, 3, 25, 4).WithArguments ("C.P"),
+ VerifyCS.Diagnostic ().WithSpan (26, 12, 26, 13).WithArguments ("C.P"));
+ }
+
+ [Fact]
+ public Task RequiresAssemblyFilesWithMessageAndUrl ()
+ {
+ var TestRequiresAssemblyFilesWithMessageAndUrl = @"
+class C
+{
+ [System.Diagnostics.CodeAnalysis.RequiresAssemblyFiles (Message = ""Message from attribute"", Url = ""https://helpurl"")]
+ void M1()
+ {
+ }
+
+ void M2()
+ {
+ M1();
+ }
+}";
+ return VerifyRequiresAssemblyFilesAnalyzer (TestRequiresAssemblyFilesWithMessageAndUrl,
+ VerifyCS.Diagnostic ().WithSpan (27, 3, 27, 7).WithArguments ("C.M2()", "Message from attribute", "https://helpurl"));
+ }
+
+ [Fact]
+ public Task NoDiagnosticIfMethodNotCalled ()
+ {
+ var TestNoDiagnosticIfMethodNotCalled = @"
+class C
+{
+ [System.Diagnostics.CodeAnalysis.RequiresAssemblyFiles]
+ void M() { }
+}";
+ return VerifyRequiresAssemblyFilesAnalyzer (TestNoDiagnosticIfMethodNotCalled);
+ }
+
+ [Fact]
+ public Task NoDiagnosticIsProducedIfCallerIsAnnotated ()
+ {
+ var TestNoDiagnosticIsProducedIfCallerIsAnnotated = @"
+class C
+{
+ void M1()
+ {
+ M2();
+ }
+
+ [System.Diagnostics.CodeAnalysis.RequiresAssemblyFiles (Message = ""Warn from M2"")]
+ void M2()
+ {
+ M3();
+ }
+
+ [System.Diagnostics.CodeAnalysis.RequiresAssemblyFiles (Message = ""Warn from M3"")]
+ void M3()
+ {
+ }
+}";
+ return VerifyRequiresAssemblyFilesAnalyzer (TestNoDiagnosticIsProducedIfCallerIsAnnotated,
+ VerifyCS.Diagnostic ().WithSpan (22, 3, 22, 7).WithArguments ("C.M2()", "Warn from M2"));
+ }
+ }
+}
diff --git a/test/ILLink.RoslynAnalyzer.Tests/RequiresUnreferencedCodeAnalyzerTests.cs b/test/ILLink.RoslynAnalyzer.Tests/RequiresUnreferencedCodeAnalyzerTests.cs
index 81899e890..25050d507 100644
--- a/test/ILLink.RoslynAnalyzer.Tests/RequiresUnreferencedCodeAnalyzerTests.cs
+++ b/test/ILLink.RoslynAnalyzer.Tests/RequiresUnreferencedCodeAnalyzerTests.cs
@@ -32,7 +32,6 @@ class C
int M2() => M1();
}";
return VerifyRequiresUnreferencedCodeAnalyzer (TestRequiresWithMessageOnlyOnMethod,
- // (8,17): warning IL2026: Calling 'System.Int32 C::M1()' which has `RequiresUnreferencedCodeAttribute` can break functionality when trimming application code. message.
VerifyCS.Diagnostic ().WithSpan (8, 17, 8, 21).WithArguments ("C.M1()", "message", ""));
}
@@ -54,7 +53,6 @@ class C
}
}";
return VerifyRequiresUnreferencedCodeAnalyzer (MessageAndUrlOnMethod,
- // (8,3): warning IL2026: Calling 'C.RequiresWithMessageAndUrl()' which has `RequiresUnreferencedCodeAttribute` can break functionality when trimming application code. Message for --RequiresWithMessageAndUrl--.
VerifyCS.Diagnostic ().WithSpan (8, 3, 8, 31).WithArguments ("C.RequiresWithMessageAndUrl()", "Message for --RequiresWithMessageAndUrl--", "https://helpurl")
);
}
@@ -78,7 +76,6 @@ class C
}
}";
return VerifyRequiresUnreferencedCodeAnalyzer (PropertyRequires,
- // (8,7): warning IL2026: Calling 'C.PropertyRequires.get' which has `RequiresUnreferencedCodeAttribute` can break functionality when trimming application code. Message for --getter PropertyRequires--.
VerifyCS.Diagnostic ().WithSpan (8, 7, 8, 23).WithArguments ("C.PropertyRequires.get", "Message for --getter PropertyRequires--", "")
);
}
@@ -102,7 +99,6 @@ class C
}
}";
return VerifyRequiresUnreferencedCodeAnalyzer (PropertyRequires,
- // (8,3): warning IL2026: Calling 'C.PropertyRequires.set' which has `RequiresUnreferencedCodeAttribute` can break functionality when trimming application code. Message for --setter PropertyRequires--.
VerifyCS.Diagnostic ().WithSpan (8, 3, 8, 19).WithArguments ("C.PropertyRequires.set", "Message for --setter PropertyRequires--", "")
);
}
diff --git a/test/ILLink.RoslynAnalyzer.Tests/TestCaseUtils.cs b/test/ILLink.RoslynAnalyzer.Tests/TestCaseUtils.cs
index d334559bf..749f9097f 100644
--- a/test/ILLink.RoslynAnalyzer.Tests/TestCaseUtils.cs
+++ b/test/ILLink.RoslynAnalyzer.Tests/TestCaseUtils.cs
@@ -11,7 +11,6 @@ using System.Runtime.CompilerServices;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
-using Mono.Linker.Tests.Cases.Expectations.Assertions;
using Xunit;
namespace ILLink.RoslynAnalyzer.Tests