public void GenericMethod_WithConstraints() { const string code = @" public class Class1 { public void Method1<T>(T param) where T : struct { } } "; CSharpParser parser = new CSharpParser(); parser.ParseCode(code); if (parser.ErrorOccurred) Assert.Fail(parser.GetFormattedErrors()); ICodeRoot codeRoot = parser.CreatedCodeRoot; Class clazz = (Class)codeRoot.WalkChildren()[0]; Function function = (Function)clazz.WalkChildren()[0]; Assert.That(function.Name, Is.EqualTo("Method1")); Assert.That(function.GenericParameters.Count, Is.EqualTo(1)); Assert.That(function.GenericParameters[0], Is.EqualTo("T")); Assert.That(function.GenericConstraintClause, Is.EqualTo("where T : struct")); Assert.That(function.ReturnType.ToString(), Is.EqualTo("void")); Assert.That(function.Parameters, Has.Count(1)); Assert.That(function.Parameters[0].Name, Is.EqualTo("param")); Assert.That(function.Parameters[0].DataType, Is.EqualTo("T")); }
public void GenericInterfaceMethod_WithConstraints() { const string code = @" public interface Interface1 { string Method1<T>(int param, T i) where T : class; } "; CSharpParser parser = new CSharpParser(); parser.ParseCode(code); if(parser.ErrorOccurred) Assert.Fail(parser.GetFormattedErrors()); ICodeRoot codeRoot = parser.CreatedCodeRoot; Interface clazz = (Interface)codeRoot.WalkChildren()[0]; InterfaceMethod inter = (InterfaceMethod)clazz.WalkChildren()[0]; Assert.That(inter.Name, Is.EqualTo("Method1")); Assert.That(inter.GenericParameters.Count, Is.EqualTo(1)); Assert.That(inter.GenericParameters[0], Is.EqualTo("T")); Assert.That(inter.GenericConstraintClause, Is.EqualTo("where T : class")); Assert.That(inter.ReturnType.ToString(), Is.EqualTo("string")); Assert.That(inter.Parameters, Has.Count(2)); Assert.That(inter.Parameters[0].Name, Is.EqualTo("param")); Assert.That(inter.Parameters[0].DataType, Is.EqualTo("int")); Assert.That(inter.Parameters[1].Name, Is.EqualTo("i")); Assert.That(inter.Parameters[1].DataType, Is.EqualTo("T")); }