1
// Copyright (c) 2010-2013 AlphaSierraPapa for the SharpDevelop Team
3
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
4
// software and associated documentation files (the "Software"), to deal in the Software
5
// without restriction, including without limitation the rights to use, copy, modify, merge,
6
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
7
// to whom the Software is furnished to do so, subject to the following conditions:
9
// The above copyright notice and this permission notice shall be included in all copies or
10
// substantial portions of the Software.
12
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
13
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
15
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
16
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
17
// DEALINGS IN THE SOFTWARE.
21
using NUnit.Framework;
23
namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
26
public class IndexerDeclarationTests
29
public void IndexerDeclarationTest()
31
IndexerDeclaration id = ParseUtilCSharp.ParseTypeMember<IndexerDeclaration>("public int this[int a, string b] { get { } protected set { } }");
32
Assert.AreEqual(2, id.Parameters.Count());
33
Assert.IsNotNull(id.Getter, "No get region found!");
34
Assert.IsNotNull(id.Setter, "No set region found!");
35
Assert.AreEqual(Modifiers.Public, id.Modifiers);
36
Assert.AreEqual(Modifiers.None, id.Getter.Modifiers);
37
Assert.AreEqual(Modifiers.Protected, id.Setter.Modifiers);
38
Assert.AreEqual("Item", id.Name);
42
public void ThisTokenPosition()
44
IndexerDeclaration id = ParseUtilCSharp.ParseTypeMember<IndexerDeclaration>("public int this[int a] { get { } protected set { } }");
45
CSharpTokenNode thisKeyword = id.GetChildByRole(IndexerDeclaration.ThisKeywordRole);
46
Assert.AreEqual(12, thisKeyword.StartLocation.Column);
50
public void IndexerImplementingInterfaceTest()
52
IndexerDeclaration id = ParseUtilCSharp.ParseTypeMember<IndexerDeclaration>("int MyInterface.this[int a, string b] { get { } set { } }");
53
Assert.AreEqual(2, id.Parameters.Count());
54
Assert.IsNotNull(id.Getter, "No get region found!");
55
Assert.IsNotNull(id.Setter, "No set region found!");
57
Assert.AreEqual("MyInterface", ((SimpleType)id.PrivateImplementationType).Identifier);
61
public void IndexerImplementingGenericInterfaceTest()
63
ParseUtilCSharp.AssertTypeMember(
64
"int MyInterface<string>.this[int a, string b] { get { } [Attr] set { } }",
65
new IndexerDeclaration {
66
ReturnType = new PrimitiveType("int"),
67
PrivateImplementationType = new SimpleType {
68
Identifier = "MyInterface",
69
TypeArguments = { new PrimitiveType("string") }
72
new ParameterDeclaration(new PrimitiveType("int"), "a"),
73
new ParameterDeclaration(new PrimitiveType("string"), "b")
75
Getter = new Accessor { Body = new BlockStatement() },
76
Setter = new Accessor {
77
Attributes = { new AttributeSection(new Attribute { Type = new SimpleType("Attr") }) },
78
Body = new BlockStatement()