1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 5 using NUnit.Framework; 6 7 using Mono.Cecil.Rocks; 8 9 namespace N 10 { 11 /// <summary> 12 /// ID string generated is "T:N.X". 13 /// </summary> 14 public class X 15 { 16 /// <summary> 17 /// ID string generated is "M:N.X.#ctor". 18 /// </summary> X()19 public X() { } 20 21 22 /// <summary> 23 /// ID string generated is "M:N.X.#ctor(System.Int32)". 24 /// </summary> 25 /// <param name="i">Describe parameter.</param> X(int i)26 public X(int i) { } 27 28 29 /// <summary> 30 /// ID string generated is "F:N.X.q". 31 /// </summary> 32 public string q; 33 34 35 /// <summary> 36 /// ID string generated is "F:N.X.PI". 37 /// </summary> 38 public const double PI = 3.14; 39 40 41 /// <summary> 42 /// ID string generated is "M:N.X.f". 43 /// </summary> f()44 public int f() { return 1; } 45 46 47 /// <summary> 48 /// ID string generated is "M:N.X.bb(System.String,System.Int32@)". 49 /// </summary> bb(string s, ref int y)50 public int bb(string s, ref int y) { return 1; } 51 52 53 /// <summary> 54 /// ID string generated is "M:N.X.gg(System.Int16[],System.Int32[0:,0:])". 55 /// </summary> gg(short[] array1, int[,] array)56 public int gg(short[] array1, int[,] array) { return 0; } 57 58 59 /// <summary> 60 /// ID string generated is "M:N.X.op_Addition(N.X,N.X)". 61 /// </summary> operator +(X x, X xx)62 public static X operator +(X x, X xx) { return x; } 63 64 65 /// <summary> 66 /// ID string generated is "P:N.X.prop". 67 /// </summary> 68 public int prop { get { return 1; } set { } } 69 70 71 /// <summary> 72 /// ID string generated is "E:N.X.d". 73 /// </summary> 74 #pragma warning disable 67 75 public event D d; 76 #pragma warning restore 67 77 78 79 /// <summary> 80 /// ID string generated is "P:N.X.Item(System.String)". 81 /// </summary> 82 public int this[string s] { get { return 1; } } 83 84 85 /// <summary> 86 /// ID string generated is "T:N.X.Nested". 87 /// </summary> 88 public class Nested { } 89 90 91 /// <summary> 92 /// ID string generated is "T:N.X.D". 93 /// </summary> D(int i)94 public delegate void D(int i); 95 96 97 /// <summary> 98 /// ID string generated is "M:N.X.op_Explicit(N.X)~System.Int32". 99 /// </summary> operator int(X x)100 public static explicit operator int(X x) { return 1; } 101 Linq(IEnumerable<string> enumerable, Func<string> selector)102 public static void Linq (IEnumerable<string> enumerable, Func<string> selector) 103 { 104 } 105 } 106 } 107 108 namespace Mono.Cecil.Tests { 109 110 [TestFixture] 111 public class DocCommentIdTests { 112 113 [Test] TypeDef()114 public void TypeDef () 115 { 116 AssertDocumentID ("T:N.X", GetTestType ()); 117 } 118 119 [Test] ParameterlessCtor()120 public void ParameterlessCtor () 121 { 122 var type = GetTestType (); 123 var ctor = type.GetConstructors ().Single (m => m.Parameters.Count == 0); 124 125 AssertDocumentID ("M:N.X.#ctor", ctor); 126 } 127 128 [Test] CtorWithParameters()129 public void CtorWithParameters () 130 { 131 var type = GetTestType (); 132 var ctor = type.GetConstructors ().Single (m => m.Parameters.Count == 1); 133 134 AssertDocumentID ("M:N.X.#ctor(System.Int32)", ctor); 135 } 136 137 [Test] Field()138 public void Field () 139 { 140 var type = GetTestType (); 141 var field = type.Fields.Single (m => m.Name == "q"); 142 143 AssertDocumentID ("F:N.X.q", field); 144 } 145 146 [Test] ConstField()147 public void ConstField () 148 { 149 var type = GetTestType (); 150 var field = type.Fields.Single (m => m.Name == "PI"); 151 152 AssertDocumentID ("F:N.X.PI", field); 153 } 154 155 [Test] ParameterlessMethod()156 public void ParameterlessMethod () 157 { 158 var type = GetTestType (); 159 var method = type.Methods.Single (m => m.Name == "f"); 160 161 AssertDocumentID ("M:N.X.f", method); 162 } 163 164 [Test] MethodWithByRefParameters()165 public void MethodWithByRefParameters () 166 { 167 var type = GetTestType (); 168 var method = type.Methods.Single (m => m.Name == "bb"); 169 170 AssertDocumentID ("M:N.X.bb(System.String,System.Int32@)", method); 171 } 172 173 [Test] MethodWithArrayParameters()174 public void MethodWithArrayParameters () 175 { 176 var type = GetTestType (); 177 var method = type.Methods.Single (m => m.Name == "gg"); 178 179 AssertDocumentID ("M:N.X.gg(System.Int16[],System.Int32[0:,0:])", method); 180 } 181 182 [Test] OpAddition()183 public void OpAddition () 184 { 185 var type = GetTestType (); 186 var op = type.Methods.Single (m => m.Name == "op_Addition"); 187 188 AssertDocumentID ("M:N.X.op_Addition(N.X,N.X)", op); 189 } 190 191 [Test] OpExplicit()192 public void OpExplicit () 193 { 194 var type = GetTestType (); 195 var op = type.Methods.Single (m => m.Name == "op_Explicit"); 196 197 AssertDocumentID ("M:N.X.op_Explicit(N.X)~System.Int32", op); 198 } 199 200 [Test] Property()201 public void Property () 202 { 203 var type = GetTestType (); 204 var property = type.Properties.Single (p => p.Name == "prop"); 205 206 AssertDocumentID ("P:N.X.prop", property); 207 } 208 209 [Test] Indexer()210 public void Indexer () 211 { 212 var type = GetTestType (); 213 var indexer = type.Properties.Single (p => p.Name == "Item"); 214 215 AssertDocumentID ("P:N.X.Item(System.String)", indexer); 216 } 217 218 [Test] Event()219 public void Event () 220 { 221 var type = GetTestType (); 222 var @event = type.Events.Single (e => e.Name == "d"); 223 224 AssertDocumentID ("E:N.X.d", @event); 225 } 226 227 [Test] Delegate()228 public void Delegate () 229 { 230 var type = GetTestType (); 231 var @delegate = type.NestedTypes.Single (t => t.Name == "D"); 232 233 AssertDocumentID ("T:N.X.D", @delegate); 234 } 235 236 [Test] NestedType()237 public void NestedType () 238 { 239 var type = GetTestType (); 240 var nestedType = type.NestedTypes.Single (t => t.Name == "Nested"); 241 242 AssertDocumentID ("T:N.X.Nested", nestedType); 243 } 244 245 [Test] Linq()246 public void Linq () 247 { 248 var type = GetTestType (); 249 var method = type.GetMethod ("Linq"); 250 251 AssertDocumentID ("M:N.X.Linq(System.Collections.Generic.IEnumerable{System.String},System.Func{System.String})", method); 252 } 253 GetTestType()254 TypeDefinition GetTestType () 255 { 256 return typeof (N.X).ToDefinition (); 257 } 258 AssertDocumentID(string docId, IMemberDefinition member)259 static void AssertDocumentID (string docId, IMemberDefinition member) 260 { 261 Assert.AreEqual (docId, DocCommentId.GetDocCommentId (member)); 262 } 263 } 264 } 265