.NET Decompiler with support for PDB generation, ReadyToRun, Metadata (&more) - cross-platform!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

96 lines
3.1 KiB

// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under MIT X11 license (for details please see \doc\license.txt)
using System;
using ICSharpCode.NRefactory.TypeSystem;
using NUnit.Framework;
namespace ICSharpCode.NRefactory.CSharp.Resolver
{
[TestFixture, Ignore("DOM for attributes is incomplete")]
public class AttributeTests : ResolverTestBase
{
[Test]
public void NamespaceInAttributeContext()
{
string program = "using System; [$System.Runtime$.CompilerServices.IndexerName(\"bla\")] class Test { }";
NamespaceResolveResult result = Resolve<NamespaceResolveResult>(program);
Assert.AreEqual("System.Runtime", result.NamespaceName);
}
[Test]
public void AttributeWithShortName()
{
string program = "using System; [$Obsolete$] class Test {}";
TypeResolveResult result = Resolve<TypeResolveResult>(program);
Assert.AreEqual("System.ObsoleteAttribute", result.Type.FullName);
}
[Test]
public void QualifiedAttributeWithShortName()
{
string program = "using System; [$System.Obsolete$] class Test {}";
TypeResolveResult result = Resolve<TypeResolveResult>(program);
Assert.AreEqual("System.ObsoleteAttribute", result.Type.FullName);
}
[Test]
public void AttributeConstructor1()
{
string program = "using System; [$LoaderOptimization(3)$] class Test { }";
var mrr = Resolve<MemberResolveResult>(program);
Assert.AreEqual("System.LoaderOptimization.#ctor", mrr.Member.FullName);
Assert.AreEqual("System.Byte", (mrr.Member as IMethod).Parameters[0].Type.Resolve(context).FullName);
}
[Test]
public void AttributeConstructor2()
{
string program = "using System; [$LoaderOptimization(LoaderOptimization.NotSpecified)$] class Test { }";
var mrr = Resolve<MemberResolveResult>(program);
Assert.AreEqual("System.LoaderOptimization.#ctor", mrr.Member.FullName);
Assert.AreEqual("System.LoaderOptimization", (mrr.Member as IMethod).Parameters[0].Type.Resolve(context).FullName);
}
[Test]
public void AttributeArgumentInClassContext1()
{
string program = @"using System;
[AttributeUsage($XXX$)] class MyAttribute : Attribute {
public const AttributeTargets XXX = AttributeTargets.All;
}
";
MemberResolveResult result = Resolve<MemberResolveResult>(program);
Assert.AreEqual("MyAttribute.XXX", result.Member.FullName);
}
[Test]
public void AttributeArgumentInClassContext2()
{
string program = @"using System; namespace MyNamespace {
[SomeAttribute($E.A$)] class Test { }
enum E { A, B }
}
";
MemberResolveResult result = Resolve<MemberResolveResult>(program);
Assert.AreEqual("MyNamespace.E.A", result.Member.FullName);
}
[Test]
public void SD_1384()
{
string program = @"using System;
class Flags {
[Flags]
enum $Test$ { }
}";
TypeResolveResult result = Resolve<TypeResolveResult>(program);
Assert.AreEqual("Flags.Test", result.Type.FullName);
var rt = result.Type.GetDefinition().Attributes[0].AttributeType.Resolve(context);
Assert.AreEqual("System.FlagsAttribute", rt.FullName);
}
}
}