diff options
author | Marek Safar <marek.safar@gmail.com> | 2021-05-08 09:26:38 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-08 09:26:38 +0300 |
commit | fafb6cf6a385a8c753faa174b9ab7c3600a9d494 (patch) | |
tree | 15df162f348d2c147acc2e7b9afc8ecd525beb78 /test/Mono.Linker.Tests | |
parent | a5f4931bc577ca94d05cd6b64e810c5cc4f035bb (diff) |
Trim parameter names metadata when they are not needed. (#1988)
Co-authored-by: Vitek Karas <vitek.karas@microsoft.com>
Diffstat (limited to 'test/Mono.Linker.Tests')
4 files changed, 46 insertions, 9 deletions
diff --git a/test/Mono.Linker.Tests/Extensions/CecilExtensions.cs b/test/Mono.Linker.Tests/Extensions/CecilExtensions.cs index f18803377..c6ed39935 100644 --- a/test/Mono.Linker.Tests/Extensions/CecilExtensions.cs +++ b/test/Mono.Linker.Tests/Extensions/CecilExtensions.cs @@ -126,12 +126,7 @@ namespace Mono.Linker.Tests.Extensions var builder = new StringBuilder (); builder.Append (method.Name); if (method.HasGenericParameters) { - builder.Append ('<'); - - for (int i = 0; i < method.GenericParameters.Count - 1; i++) - builder.Append ($"{method.GenericParameters[i]},"); - - builder.Append ($"{method.GenericParameters[method.GenericParameters.Count - 1]}>"); + builder.Append ($"<#{method.GenericParameters.Count}>"); } builder.Append ("("); diff --git a/test/Mono.Linker.Tests/TestCases/TestDatabase.cs b/test/Mono.Linker.Tests/TestCases/TestDatabase.cs index 73e5ed671..fcab71eb7 100644 --- a/test/Mono.Linker.Tests/TestCases/TestDatabase.cs +++ b/test/Mono.Linker.Tests/TestCases/TestDatabase.cs @@ -212,6 +212,11 @@ namespace Mono.Linker.Tests.TestCases return NUnitCasesBySuiteName ("LinkAttributes"); } + public static IEnumerable<TestCaseData> MetadataTests () + { + return NUnitCasesBySuiteName ("Metadata"); + } + public static TestCaseCollector CreateCollector () { GetDirectoryPaths (out string rootSourceDirectory, out string testCaseAssemblyPath); diff --git a/test/Mono.Linker.Tests/TestCases/TestSuites.cs b/test/Mono.Linker.Tests/TestCases/TestSuites.cs index ae2d45090..3860cccbc 100644 --- a/test/Mono.Linker.Tests/TestCases/TestSuites.cs +++ b/test/Mono.Linker.Tests/TestCases/TestSuites.cs @@ -254,6 +254,12 @@ namespace Mono.Linker.Tests.TestCases Run (testCase); } + [TestCaseSource (typeof (TestDatabase), nameof (TestDatabase.MetadataTests))] + public void MetadataTests (TestCase testCase) + { + Run (testCase); + } + protected virtual void Run (TestCase testCase) { var runner = new TestRunner (new ObjectFactory ()); diff --git a/test/Mono.Linker.Tests/TestCasesRunner/AssemblyChecker.cs b/test/Mono.Linker.Tests/TestCasesRunner/AssemblyChecker.cs index 421e4ac1a..a4a4b1f64 100644 --- a/test/Mono.Linker.Tests/TestCasesRunner/AssemblyChecker.cs +++ b/test/Mono.Linker.Tests/TestCasesRunner/AssemblyChecker.cs @@ -18,11 +18,15 @@ namespace Mono.Linker.Tests.TestCasesRunner readonly HashSet<string> verifiedGeneratedFields = new HashSet<string> (); readonly HashSet<string> verifiedEventMethods = new HashSet<string> (); readonly HashSet<string> verifiedGeneratedTypes = new HashSet<string> (); + bool checkNames; public AssemblyChecker (AssemblyDefinition original, AssemblyDefinition linked) { this.originalAssembly = original; this.linkedAssembly = linked; + + checkNames = original.MainModule.GetTypeReferences ().Any (attr => + attr.Name == nameof (RemovedNameValueAttribute)); } public void Verify () @@ -107,8 +111,13 @@ namespace Mono.Linker.Tests.TestCasesRunner return; } + bool prev = checkNames; + checkNames |= original.HasAttribute (nameof (VerifyMetadataNamesAttribute)); + VerifyTypeDefinitionKept (original, linked); + checkNames = prev; + if (original.HasAttribute (nameof (CreatedMemberAttribute))) { foreach (var attr in original.CustomAttributes.Where (l => l.AttributeType.Name == nameof (CreatedMemberAttribute))) { var newName = original.FullName + "::" + attr.ConstructorArguments[0].Value.ToString (); @@ -163,7 +172,8 @@ namespace Mono.Linker.Tests.TestCasesRunner foreach (var m in original.Methods) { if (verifiedEventMethods.Contains (m.FullName)) continue; - VerifyMethod (m, linked?.Methods.FirstOrDefault (l => m.GetSignature () == l.GetSignature ())); + var msign = m.GetSignature (); + VerifyMethod (m, linked?.Methods.FirstOrDefault (l => msign == l.GetSignature ())); linkedMembers.Remove (m.FullName); } } @@ -765,7 +775,18 @@ namespace Mono.Linker.Tests.TestCasesRunner if (src.HasGenericParameters) { for (int i = 0; i < src.GenericParameters.Count; ++i) { // TODO: Verify constraints - VerifyCustomAttributes (src.GenericParameters[i], linked.GenericParameters[i]); + var srcp = src.GenericParameters[i]; + var lnkp = linked.GenericParameters[i]; + VerifyCustomAttributes (srcp, lnkp); + + if (checkNames) { + if (srcp.CustomAttributes.Any (attr => attr.AttributeType.Name == nameof (RemovedNameValueAttribute))) { + string name = (src.GenericParameterType == GenericParameterType.Method ? "!!" : "!") + srcp.Position; + Assert.AreEqual (name, lnkp.Name, "Expected empty generic parameter name"); + } else { + Assert.AreEqual (srcp.Name, lnkp.Name, "Mismatch in generic parameter name"); + } + } } } } @@ -775,7 +796,17 @@ namespace Mono.Linker.Tests.TestCasesRunner Assert.AreEqual (src.HasParameters, linked.HasParameters); if (src.HasParameters) { for (int i = 0; i < src.Parameters.Count; ++i) { - VerifyCustomAttributes (src.Parameters[i], linked.Parameters[i]); + var srcp = src.Parameters[i]; + var lnkp = linked.Parameters[i]; + + VerifyCustomAttributes (srcp, lnkp); + + if (checkNames) { + if (srcp.CustomAttributes.Any (attr => attr.AttributeType.Name == nameof (RemovedNameValueAttribute))) + Assert.IsEmpty (lnkp.Name, "Expected empty parameter name"); + else + Assert.AreEqual (srcp.Name, lnkp.Name, "Mismatch in parameter name"); + } } } } |