diff options
author | Sven Boemer <sbomer@gmail.com> | 2022-09-30 00:03:25 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-30 00:03:25 +0300 |
commit | 42b9ef143d3f02403d19f7c3bbe1af0c59fe2031 (patch) | |
tree | b5704eaf024101dae811a1956d4358055af9ba82 /Test | |
parent | 49b1c52df5e8d2bf03768dc35ba6575e88277bc7 (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.cs | 74 | ||||
-rw-r--r-- | Test/Resources/assemblies/GenericAttributes.dll | bin | 0 -> 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 Binary files differnew file mode 100644 index 0000000..1c8e8d6 --- /dev/null +++ b/Test/Resources/assemblies/GenericAttributes.dll |