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:
authorMarek Safar <marek.safar@gmail.com>2021-05-08 09:26:38 +0300
committerGitHub <noreply@github.com>2021-05-08 09:26:38 +0300
commitfafb6cf6a385a8c753faa174b9ab7c3600a9d494 (patch)
tree15df162f348d2c147acc2e7b9afc8ecd525beb78 /test/Mono.Linker.Tests
parenta5f4931bc577ca94d05cd6b64e810c5cc4f035bb (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')
-rw-r--r--test/Mono.Linker.Tests/Extensions/CecilExtensions.cs7
-rw-r--r--test/Mono.Linker.Tests/TestCases/TestDatabase.cs5
-rw-r--r--test/Mono.Linker.Tests/TestCases/TestSuites.cs6
-rw-r--r--test/Mono.Linker.Tests/TestCasesRunner/AssemblyChecker.cs37
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");
+ }
}
}
}