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

github.com/mono/cecil.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/Test
diff options
context:
space:
mode:
authorSven Boemer <sbomer@gmail.com>2022-09-30 00:03:25 +0300
committerGitHub <noreply@github.com>2022-09-30 00:03:25 +0300
commit42b9ef143d3f02403d19f7c3bbe1af0c59fe2031 (patch)
treeb5704eaf024101dae811a1956d4358055af9ba82 /Test
parent49b1c52df5e8d2bf03768dc35ba6575e88277bc7 (diff)
Add support for generic attributes (#871)
* Add support for generic attributes * Compile test assembly against mscorlib To satisfy PEVerify
Diffstat (limited to 'Test')
-rw-r--r--Test/Mono.Cecil.Tests/CustomAttributesTests.cs74
-rw-r--r--Test/Resources/assemblies/GenericAttributes.dllbin0 -> 5120 bytes
2 files changed, 74 insertions, 0 deletions
diff --git a/Test/Mono.Cecil.Tests/CustomAttributesTests.cs b/Test/Mono.Cecil.Tests/CustomAttributesTests.cs
index a406c41..00f00ca 100644
--- a/Test/Mono.Cecil.Tests/CustomAttributesTests.cs
+++ b/Test/Mono.Cecil.Tests/CustomAttributesTests.cs
@@ -465,6 +465,80 @@ namespace Mono.Cecil.Tests {
}
[Test]
+ public void GenericAttributeString ()
+ {
+ TestModule ("GenericAttributes.dll", module => {
+ var type = module.GetType ("WithGenericAttribute_OfString");
+ Assert.IsTrue (type.HasCustomAttributes);
+ var attributes = type.CustomAttributes;
+ Assert.AreEqual (1, attributes.Count);
+ Assert.AreEqual ("GenericAttribute`1<System.String>", attributes [0].AttributeType.FullName);
+ var attribute = attributes [0];
+ // constructor arguments
+ Assert.AreEqual (true, attribute.HasConstructorArguments);
+ var argument = attribute.ConstructorArguments.Single ();
+ Assert.AreEqual ("System.String", argument.Type.FullName);
+ Assert.AreEqual ("t", argument.Value);
+ // named field argument
+ Assert.AreEqual (true, attribute.HasFields);
+ var field = attribute.Fields.Single ();
+ Assert.AreEqual ("F", field.Name);
+ Assert.AreEqual ("System.String", field.Argument.Type.FullName);
+ Assert.AreEqual ("f", field.Argument.Value);
+ // named property argument
+ Assert.AreEqual (true, attribute.HasProperties);
+ var property = attribute.Properties.Single ();
+ Assert.AreEqual ("P", property.Name);
+ Assert.AreEqual ("System.String", property.Argument.Type.FullName);
+ Assert.AreEqual ("p", property.Argument.Value);
+
+ }, verify: !Platform.OnMono);
+ }
+
+ [Test]
+ public void GenericAttributeInt ()
+ {
+ TestModule ("GenericAttributes.dll", module => {
+ var type = module.GetType ("WithGenericAttribute_OfInt");
+ Assert.IsTrue (type.HasCustomAttributes);
+ var attributes = type.CustomAttributes;
+ Assert.AreEqual (1, attributes.Count);
+ Assert.AreEqual ("GenericAttribute`1<System.Int32>", attributes [0].AttributeType.FullName);
+ var attribute = attributes [0];
+ // constructor arguments
+ Assert.AreEqual (true, attribute.HasConstructorArguments);
+ var argument = attribute.ConstructorArguments.Single ();
+ Assert.AreEqual ("System.Int32", argument.Type.FullName);
+ Assert.AreEqual (1, argument.Value);
+ // named field argument
+ Assert.AreEqual (true, attribute.HasFields);
+ var field = attribute.Fields.Single ();
+ Assert.AreEqual ("F", field.Name);
+ Assert.AreEqual ("System.Int32", field.Argument.Type.FullName);
+ Assert.AreEqual (2, field.Argument.Value);
+ // named property argument
+ Assert.AreEqual (true, attribute.HasProperties);
+ var property = attribute.Properties.Single ();
+ Assert.AreEqual ("P", property.Name);
+ Assert.AreEqual ("System.Int32", property.Argument.Type.FullName);
+ Assert.AreEqual (3, property.Argument.Value);
+ }, verify: !Platform.OnMono);
+ }
+
+ [Test]
+ public void ConstrainedGenericAttribute ()
+ {
+ TestModule ("GenericAttributes.dll", module => {
+ var type = module.GetType ("WithConstrainedGenericAttribute");
+ Assert.IsTrue (type.HasCustomAttributes);
+ var attributes = type.CustomAttributes;
+ Assert.AreEqual (1, attributes.Count);
+ var attribute = attributes [0];
+ Assert.AreEqual ("ConstrainedGenericAttribute`1<DerivedFromConstraintType>", attribute.AttributeType.FullName);
+ }, verify: !Platform.OnMono);
+ }
+
+ [Test]
public void NullCharInString ()
{
TestCSharp ("CustomAttributes.cs", module => {
diff --git a/Test/Resources/assemblies/GenericAttributes.dll b/Test/Resources/assemblies/GenericAttributes.dll
new file mode 100644
index 0000000..1c8e8d6
--- /dev/null
+++ b/Test/Resources/assemblies/GenericAttributes.dll
Binary files differ