1 using System; 2 using System.Collections; 3 using System.Collections.Generic; 4 using System.Linq; 5 6 /// <summary>Namespace Test: [<see cref="N:Mono.DocTest" />]</summary> 7 /// <remarks><c>T:NoNamespace</c></remarks> 8 public class NoNamespace {} 9 10 namespace System { 11 /* 12 * The System namespace gets special treatment, e.g. instead of 13 * System.Environment C# declarations it's just Environment. 14 */ 15 /// <remarks><c>T:System.Action`1</c></remarks> Action(T obj)16 public delegate void Action<T> (T obj); 17 18 /// <remarks><c>T:System.Environment</c></remarks> 19 public static class Environment { 20 /// <remarks><c>T:System.Environment+SpecialFolder</c></remarks> 21 public enum SpecialFolder {} 22 23 /// <param name="folder"> 24 /// A <see cref="T:System.Environment+SpecialFolder" /> instance. 25 /// </param> 26 /// <remarks> 27 /// <c>M:System.Environment.GetFolderPath(System.Environment+SpecialFolder)</c> 28 /// </remarks> GetFolderPath(SpecialFolder folder)29 public static string GetFolderPath (SpecialFolder folder) 30 { 31 throw new NotSupportedException (); 32 } 33 34 // Testing whether this extension method shows up for System.Array 35 public static bool IsAligned<T> (this T[] vect, int index) where T : struct 36 { 37 return false; 38 } 39 } 40 41 // to test ECMA doc importing... 42 public class Array { 43 // the ECMA docs have a different return type than .NET -- skip. AsReadOnly(T[] array)44 public static System.Collections.ObjectModel.ReadOnlyCollection<T> AsReadOnly<T> (T[] array) 45 { 46 throw new NotImplementedException (); 47 } 48 49 // ECMA docs use <T,U> instead of <TInput,TOutput> --> map them. ConvertAll(TInput[] array, Converter<TInput, TOutput> converter)50 public static TOutput[] ConvertAll<TInput, TOutput> (TInput[] array, Converter<TInput, TOutput> converter) 51 { 52 throw new InvalidOperationException (); 53 } 54 55 // ECMA docs *incorrectly* document parameter -- skip Resize(ref T[] array, int newSize)56 public static void Resize<T> (ref T[] array, int newSize) 57 { 58 throw new Exception (); 59 } 60 } 61 62 // to test ECMA doc importing... AsyncCallback(IAsyncResult ar)63 public delegate void AsyncCallback (IAsyncResult ar); 64 } 65 66 namespace Mono.DocTest { 67 internal class Internal { 68 public class ShouldNotBeDocumented { 69 } 70 } 71 72 internal class MonoTODOAttribute : Attribute { 73 } 74 75 /// <remarks> 76 /// <para> 77 /// cref=<c>T:Mono.DocTest.DocAttribute</c>. 78 /// </para> 79 /// <format type="text/html"> 80 /// <table width="100%"> 81 /// <tr> 82 /// <td style="color:red">red</td> 83 /// <td style="color:blue">blue</td> 84 /// <td style="color:green">green</td> 85 /// </tr> 86 /// </table> 87 /// </format> 88 /// <code lang="C#" src="../DocTest.cs#DocAttribute Example" /> 89 /// </remarks> 90 [AttributeUsage (AttributeTargets.All)] 91 public class DocAttribute : Attribute { 92 #region DocAttribute Example 93 [Doc ("documented class")] 94 class Example { 95 [Doc ("documented field")] public string field; 96 } 97 #endregion 98 /// <remarks><c>C:Mono.DocTest.DocAttribute(System.String)</c></remarks> DocAttribute(string docs)99 public DocAttribute (string docs) 100 { 101 if (docs == null) 102 throw new ArgumentNullException ("docs"); 103 } 104 105 /// <remarks><c>P:Mono.DocTest.DocAttribute.Property</c></remarks> 106 public Type Property { get; set; } 107 108 /// <remarks><c>F:Mono.DocTest.DocAttribute.Field</c></remarks> 109 public bool Field; 110 111 /// <remarks><c>F:Mono.DocTest.DocAttribute.FlagsEnum</c></remarks> 112 public ConsoleModifiers FlagsEnum; 113 114 /// <remarks><c>F:Mono.DocTest.DocAttribute.NonFlagsEnum</c></remarks> 115 public Color NonFlagsEnum; 116 } 117 118 /// <summary>Possible colors</summary> 119 /// <remarks> 120 /// <see cref="T:Mono.DocTest.Color"/>. 121 /// Namespace Test: [<see cref="N:Mono.DocTest" />] 122 /// </remarks> 123 [MonoTODO] 124 public enum Color { 125 /// <summary>Insert Red summary here</summary> 126 /// <remarks><c>F:Mono.DocTest.Color.Red</c>.</remarks> 127 Red, 128 /// <summary>Insert Blue summary here</summary> 129 /// <remarks><c>F:Mono.DocTest.Color.Blue</c>.</remarks> 130 Blue, 131 /// <summary>Insert Green summary here</summary> 132 /// <remarks><c>F:Mono.DocTest.Color.Green</c>.</remarks> 133 Green, 134 135 AnotherGreen = Green, 136 } 137 138 /// <summary>Process interface</summary> 139 /// <remarks><c>T:Mono.DocTest.IProcess</c>.</remarks> 140 public interface IProcess {} 141 142 /// <summary>Process interface</summary> 143 /// <remarks><c>T:Mono.DocTest.DocValueType</c>.</remarks> 144 public struct DocValueType : IProcess { 145 /// <remarks><c>F:Mono.DocTest.DocValueType.total</c>.</remarks> 146 public int total; 147 148 /// <param name="i">A <see cref="T:System.Int32" />.</param> 149 /// <remarks><see cref="M:Mono.DocTest.DocValueType.M(System.Int32)"/>.</remarks> MMono.DocTest.DocValueType150 public void M (int i) 151 { 152 if ((new Random().Next() % 2) == 0) 153 throw new SystemException (); 154 throw new ApplicationException (); 155 } 156 } 157 158 /// <remarks><c>T:Mono.DocTest.D</c></remarks> D(Func<string, dynamic, object> value)159 public delegate dynamic D (Func<string, dynamic, object> value); 160 161 /// <remarks><c>T:Mono.DocTest.Widget</c>.</remarks> 162 /// <seealso cref="P:Mono.DocTest.Widget.Item(System.Int32)" /> 163 /// <extra>Some extra tag value</extra> 164 public unsafe class Widget : IProcess { 165 /// <remarks><c>T:Mono.DocTest.Widget.NestedClass</c>.</remarks> 166 public class NestedClass { 167 /// <remarks><c>F:Mono.DocTest.Widget.NestedClass.value</c>.</remarks> 168 public int value; 169 170 /// <param name="i">Some <see cref="T:System.Int32" />.</param> 171 /// <remarks><c>M:Mono.DocTest.Widget.NestedClass.M(System.Int32)</c>.</remarks> M(int i)172 public void M (int i) {} 173 174 /// <remarks><c>T:Mono.DocTest.Widget.NestedClass.Double</c>.</remarks> 175 public class Double { 176 /// <remarks><c>T:Mono.DocTest.Widget.NestedClass.Double.Triple</c>.</remarks> 177 public class Triple { 178 /// <remarks><c>T:Mono.DocTest.Widget.NestedClass.Double.Triple.Quadruple</c>.</remarks> 179 public class Quadruple {} // for good measure 180 } 181 } 182 } 183 184 /// <remarks><c>T:Mono.DocTest.Widget.NestedClass`1</c>.</remarks> 185 public class NestedClass<T> { 186 /// <remarks><c>F:Mono.DocTest.Widget.NestedClass`1.value</c>.</remarks> 187 public int value; 188 189 /// <param name="i">Another <see cref="T:System.Int32" />.</param> 190 /// <remarks><c>M:Mono.DocTest.Widget.NestedClass`1.M(System.Int32)</c>.</remarks> M(int i)191 public void M (int i) {} 192 } 193 194 /// <remarks><c>F:Mono.DocTest.Widget.classCtorError</c>.</remarks> 195 public static readonly string[] classCtorError = CreateArray (); 196 CreateArray()197 private static string[] CreateArray () 198 { 199 throw new NotSupportedException (); 200 } 201 202 /// <remarks><c>F:Mono.DocTest.Widget.message</c>.</remarks> 203 public string message; 204 205 /// <remarks><c>F:Mono.DocTest.Widget.defaultColor</c>.</remarks> 206 protected static Color defaultColor; 207 208 /// <remarks><c>F:Mono.DocTest.Widget.PI</c>.</remarks> 209 protected internal const double PI = 3.14159; 210 211 /// <remarks><c>F:Mono.DocTest.Widget.monthlyAverage</c>.</remarks> 212 internal protected readonly double monthlyAverage; 213 214 /// <remarks><c>F:Mono.DocTest.Widget.array1</c>.</remarks> 215 public long[] array1; 216 217 /// <remarks><c>F:Mono.DocTest.Widget.array2</c>.</remarks> 218 public Widget[,] array2; 219 220 /// <remarks><c>F:Mono.DocTest.Widget.pCount</c>.</remarks> 221 public unsafe int *pCount; 222 223 /// <remarks><c>F:Mono.DocTest.Widget.ppValues</c>.</remarks> 224 public unsafe float **ppValues; 225 226 /// <remarks><c>T:Mono.DocTest.Widget.IMenuItem</c>.</remarks> 227 public interface IMenuItem { 228 /// <remarks><c>M:Mono.DocTest.Widget.IMenuItem.A</c>.</remarks> A()229 void A (); 230 231 /// <remarks><c>P:Mono.DocTest.Widget.IMenuItem.P</c>.</remarks> 232 int B {get; set;} 233 } 234 235 /// <remarks><c>T:Mono.DocTest.Widget.Del</c>.</remarks> Del(int i)236 public delegate void Del (int i); 237 238 /// <remarks><c>T:Mono.DocTest.Widget.Direction</c>.</remarks> 239 [Flags] 240 protected internal enum Direction { 241 /// <remarks><c>T:Mono.DocTest.Widget.Direction.North</c>.</remarks> 242 North, 243 /// <remarks><c>T:Mono.DocTest.Widget.Direction.South</c>.</remarks> 244 South, 245 /// <remarks><c>T:Mono.DocTest.Widget.Direction.East</c>.</remarks> 246 East, 247 /// <remarks><c>T:Mono.DocTest.Widget.Direction.West</c>.</remarks> 248 West, 249 } 250 251 /// <remarks> 252 /// <para><c>C:Mono.DocTest.Widget</c>.</para> 253 /// <para><c>M:Mono.DocTest.Widget.#ctor</c>.</para> 254 /// <para><see cref="C:Mono.DocTest.Widget(System.String)" /></para> 255 /// <para><see cref="C:Mono.DocTest.Widget(System.Converter{System.String,System.String})" /></para> 256 /// </remarks> Widget()257 public Widget () {} 258 259 /// <param name="s">A <see cref="T:System.String" />.</param> 260 /// <remarks> 261 /// <para><c>C:Mono.DocTest.Widget(System.String)</c>.</para> 262 /// <para><c>M:Mono.DocTest.Widget.#ctor(System.String)</c>.</para> 263 /// </remarks> Widget(string s)264 public Widget (string s) {} 265 266 /// <param name="c">A <see cref="T:System.Converter{System.String,System.String}" />.</param> 267 /// <remarks> 268 /// <para><c>C:Mono.DocTest.Widget(System.Converter{System.String,System.String})</c>.</para> 269 /// </remarks> Widget(Converter<string,string> c)270 public Widget (Converter<string,string> c) {} 271 272 /// <remarks><c>M:Mono.DocTest.Widget.M0</c>.</remarks> M0()273 public static void M0 () {} 274 275 /// <param name="c">A <see cref="T:System.Char" />.</param> 276 /// <param name="f">A <see cref="T:System.Single" />.</param> 277 /// <param name="v">A <see cref="T:Mono.DocTest.DocValueType" />.</param> 278 /// <remarks><c>M:Mono.DocTest.Widget.M1(System.Char,System.Signle@,Mono.DocTest.DocValueType@)</c>.</remarks> 279 [return:Doc ("return:DocAttribute", Property=typeof(Widget))] 280 [Doc("normal DocAttribute", Field=true)] M1([Doc (R, FlagsEnum=ConsoleModifiers.Alt | ConsoleModifiers.Control)] char c, [Doc (R, NonFlagsEnum=Color.Red)] out float f, [Doc (R)] ref DocValueType v)281 public void M1 ([Doc ("c", FlagsEnum=ConsoleModifiers.Alt | ConsoleModifiers.Control)] char c, 282 [Doc ("f", NonFlagsEnum=Color.Red)] out float f, 283 [Doc ("v")] ref DocValueType v) {f=0;} 284 285 /// <param name="x1">A <see cref="T:System.Int16" /> array.</param> 286 /// <param name="x2">A <see cref="T:System.Int32" /> array.</param> 287 /// <param name="x3">A <see cref="T:System.Int64" /> array.</param> 288 /// <remarks><c>M:Mono.DocTest.Widget.M2(System.Int16[],System.Int32[0:,0:],System.Int64[][])</c>.</remarks> M2(short[] x1, int[,] x2, long[][] x3)289 public void M2 (short[] x1, int[,] x2, long[][] x3) {} 290 291 /// <param name="x3">Another <see cref="T:System.Int64" /> array.</param> 292 /// <param name="x4">A <see cref="T:Mono.DocTest.Widget" /> array.</param> 293 /// <remarks><c>M:Mono.DocTest.Widget.M3(System.Int64[][],Mono.DocTest.Widget[0:,0:,0:][])</c>.</remarks> M3(long[][] x3, Widget[][,,] x4)294 protected void M3 (long[][] x3, Widget[][,,] x4) {} 295 296 /// <param name="pc">A <see cref="T:System.Char" /> pointer.</param> 297 /// <param name="ppf">A <see cref="T:Mono.DocTest.Color" /> pointer.</param> 298 /// <remarks><c>M:Mono.DocTest.Widget.M4(System.Char*,Mono.DocTest.Color**)</c>.</remarks> M4(char *pc, Color **ppf)299 protected unsafe void M4 (char *pc, Color **ppf) {} 300 301 /// <param name="pv">A <see cref="T:System.Void" /> pointer.</param> 302 /// <param name="pd">A <see cref="T:System.Double" /> array.</param> 303 /// <remarks><c>M:Mono.DocTest.Widget.M5(System.Void*,System.Double*[0:,0:][])</c>.</remarks> M5(void *pv, double *[][,] pd)304 protected unsafe void M5 (void *pv, double *[][,] pd) {} 305 306 /// <param name="i">Yet another <see cref="T:System.Int32" />.</param> 307 /// <param name="args">An <see cref="T:System.Object" /> array.</param> 308 /// <remarks><c>M:Mono.DocTest.Widget.M6(System.Int32,System.Object[])</c>.</remarks> M6(int i, params object[] args)309 protected void M6 (int i, params object[] args) {} 310 311 /// <remarks><c>M:Mono.DocTest.Widget.M7(Mono.DocTest.Widget.NestedClass.Double.Triple.Quadruple)</c>.</remarks> M7(Widget.NestedClass.Double.Triple.Quadruple a)312 public void M7(Widget.NestedClass.Double.Triple.Quadruple a) {} 313 314 /// <value>A <see cref="T:System.Int32" /> value...</value> 315 /// <remarks><c>P:Mono.DocTest.Widget.Width</c>.</remarks> 316 [Doc ("Width property")] 317 public int Width { 318 [Doc ("Width get accessor")] 319 get {return 0;} 320 [Doc ("Width set accessor")] 321 protected set {} 322 } 323 324 /// <value>A <see cref="T:System.Int64" /> value...</value> 325 /// <remarks><c>P:Mono.DocTest.Widget.Height</c>.</remarks> 326 [Doc ("Height property")] 327 protected long Height {get {return 0;}} 328 329 /// <value>A <see cref="T:System.Int16" /> value...</value> 330 /// <remarks><c>P:Mono.DocTest.Widget.X</c>.</remarks> 331 protected internal short X {set {}} 332 333 /// <value>A <see cref="T:System.Double" /> value...</value> 334 /// <remarks><c>P:Mono.DocTest.Widget.Y</c>.</remarks> 335 internal protected double Y {get {return 0;} set {}} 336 337 338 /// <param name="i">TODO</param> 339 /// <remarks><c>P:Mono.DocTest.Widget.Item(System.Int32)</c>.</remarks> 340 /// <value>A <see cref="T:System.Int32" /> instance.</value> 341 [Doc ("Item property")] 342 public int this [int i] { 343 get {return 0;} 344 [Doc ("Item property set accessor")] 345 set {} 346 } 347 348 /// <param name="s">Some <see cref="T:System.String" />.</param> 349 /// <param name="i">I love <see cref="T:System.Int32" />s.</param> 350 /// <remarks><c>P:Mono.DocTest.Widget.Item(System.String,System.Int32)</c>.</remarks> 351 /// <value>A <see cref="T:System.Int32" /> instance.</value> 352 public int this [string s, int i] {get {return 0;} set {}} 353 354 /// <remarks><c>E:Mono.DocTest.Widget.AnEvent</c>.</remarks> 355 [Doc ("Del event")] 356 public event Del AnEvent { 357 [Doc ("Del add accessor")] 358 add {} 359 [Doc ("Del remove accessor")] 360 remove {} 361 } 362 363 /// <remarks><c>E:Mono.DocTest.Widget.AnotherEvent</c>.</remarks> 364 protected event Del AnotherEvent; 365 366 /// <param name="x">Another <see cref="T:Mono.DocTest.Widget" />.</param> 367 /// <remarks><c>M:Mono.DocTest.Widget.op_UnaryPlus(Mono.DocTest.Widget)</c>.</remarks> 368 /// <returns>A <see cref="T:Mono.DocTest.Widget" /> instance.</returns> operator +(Widget x)369 public static Widget operator+ (Widget x) {return null;} 370 371 /// <remarks><c>M:Mono.DocTest.Widget.op_Division</c>.</remarks> 372 /// <returns>A <see cref="T:Mono.DocTest.Widget" /> instance.</returns> 373 public static Widget op_Division = null; 374 375 /// <param name="x1">Yet Another <see cref="T:Mono.DocTest.Widget" />.</param> 376 /// <param name="x2">Yay, <see cref="T:Mono.DocTest.Widget" />s.</param> 377 /// <remarks><c>M:Mono.DocTest.Widget.op_Addition(Mono.DocTest.Widget,Mono.DocTest.Widget)</c>.</remarks> 378 /// <returns>A <see cref="T:Mono.DocTest.Widget" /> instance (2).</returns> operator +(Widget x1, Widget x2)379 public static Widget operator+ (Widget x1, Widget x2) {return null;} 380 381 /// <param name="x"><see cref="T:Mono.DocTest.Widget" />s are fun!.</param> 382 /// <remarks><c>M:Mono.DocTest.Widget.op_Explicit(Mono.DocTest.Widget)~System.Int32</c>.</remarks> 383 /// <returns>A <see cref="T:System.Int32" /> instance.</returns> operator int(Widget x)384 public static explicit operator int (Widget x) {return 0;} 385 386 /// <param name="x"><c>foo</c>; <see cref="T:Mono.DocTest.Widget" />.</param> 387 /// <remarks><c>M:Mono.DocTest.Widget.op_Implicit(Mono.DocTest.Widget)~System.Int64</c>.</remarks> 388 /// <returns>A <see cref="T:System.Int64" /> instance.</returns> operator long(Widget x)389 public static implicit operator long (Widget x) {return 0;} 390 391 /// <remarks><c>M:Mono.DocTest.Widget.Default(System.Int32,System.Int32)</c></remarks> Default(int a = 1, int b = 2)392 public void Default (int a = 1, int b = 2) {} 393 394 /// <remarks><c>M:Mono.DocTest.Widget.Default(System.String,System.Char)</c></remarks> Default(string a = R, char b = B)395 public void Default (string a = "a", char b = 'b') {} 396 397 /// <remarks><c>M:Mono.DocTest.Widget.Dynamic0(System.Object,System.Object)</c></remarks> Dynamic0(dynamic a, dynamic b)398 public dynamic Dynamic0 (dynamic a, dynamic b) {return a + b;} 399 400 /// <remarks><c>M:Mono.DocTest.Widget.Dynamic1(System.Collections.Generic.Dictionary{System.Object,System.Object})</c></remarks> Dynamic1(Dictionary<dynamic, string> value)401 public Dictionary<dynamic, string> Dynamic1 (Dictionary<dynamic, string> value) {return value;} 402 403 /// <remarks><c>M:Mono.DocTest.Widget.Dynamic2(System.Func{System.String,System.Object})</c></remarks> Dynamic2(Func<string, dynamic> value)404 public Func<string, dynamic> Dynamic2 (Func<string, dynamic> value) {return value;} 405 406 /// <remarks><c>M:Mono.DocTest.Widget.Dynamic3(System.Func{System.Func{System.String,System.Object},System.Func{System.Object,System.String}})</c></remarks> Dynamic3( Func<Func<string, dynamic>, Func<dynamic, string>> value)407 public Func<Func<string, dynamic>, Func<dynamic, string>> Dynamic3 ( 408 Func<Func<string, dynamic>, Func<dynamic, string>> value) {return value;} 409 410 /// <remarks><c>P:Mono.DocTest.Widget.DynamicP</c></remarks> 411 public Func<Func<string, dynamic, string>, Func<dynamic, Func<dynamic>, string>> DynamicP { 412 get {return null;} 413 } 414 415 /// <remarks><c>F:Mono.DocTest.Widget.DynamicF</c></remarks> 416 public Func<Func<string, dynamic, string>, Func<dynamic, Func<dynamic>, string>> DynamicF; 417 418 /// <remarks><c>E:Mono.DocTest.Widget.DynamicE1</c></remarks> 419 [Obsolete ("why not")] 420 public event Func<dynamic> DynamicE1; 421 422 /// <remarks><c>E:Mono.DocTest.Widget.DynamicE2</c></remarks> 423 public event Func<dynamic> DynamicE2 { 424 add {} 425 remove {} 426 } 427 } 428 429 /// <remarks><c>T:Mono.DocTest.UseLists</c>.</remarks> 430 public class UseLists 431 { 432 /// <param name="list">A <see cref="T:Mono.DocTest.Generic.MyList{System.Int32}" />.</param> 433 /// <remarks><c>M:Mono.DocTest.UseLists.Process(Mono.DocTest.MyList{System.Int32})</c>.</remarks> Process(Generic.MyList<int> list)434 public void Process (Generic.MyList<int> list) {} 435 436 /// <param name="value">A <c>T</c>.</param> 437 /// <typeparam name="T">Something</typeparam> 438 /// <remarks><c>M:Mono.DocTest.UseLists.GetValues``1(``0)</c>.</remarks> 439 /// <returns>A <see cref="T:Mono.DocTest.Generic.MyList`1" /> instance.</returns> 440 public Generic.MyList<T> GetValues <T> (T value) where T : struct {return null;} 441 442 /// <param name="list">Another <see cref="T:Mono.DocTest.Generic.MyList{System.Int32}" />.</param> 443 /// <remarks> 444 /// <para><c>M:Mono.DocTest.UseLists.Process(System.Collections.Generic.List{System.Int32})</c>.</para> 445 /// <para><see cref="M:System.Collections.Generic.List{System.Int32}.Remove(`0)" /></para> 446 /// </remarks> 447 /// <exception name="Whatever">text!</exception> 448 /// <exception invalid="foo">text!</exception> Process(List<int> list)449 public void Process (List<int> list) 450 { 451 // Bug: only creation is looked for, so this generates an <exception/> 452 // node: 453 new Exception (); 454 455 // Bug? We only look at "static" types, so we can't follow 456 // delegates/interface calls: 457 Func<int, int> a = x => {throw new InvalidOperationException ();}; 458 a (1); 459 460 // Multi-dimensional arrays have "phantom" methods that Cecil can't 461 // resolve, as they're provided by the runtime. These should be 462 // ignored. 463 int[,] array = new int[1,1]; 464 array[0,0] = 42; 465 } 466 467 /// <param name="list">A <see cref="T:Mono.DocTest.Generic.MyList{System.Predicate{System.Int32}}" />.</param> 468 /// <remarks><c>M:Mono.DocTest.UseLists.Process(System.Collections.Generic.List{System.Predicate{System.Int32}})</c>.</remarks> Process(List<Predicate<int>> list)469 public void Process (List<Predicate<int>> list) 470 { 471 if (list == null) 472 throw new ArgumentNullException ("list"); 473 Process<int> (list); 474 } 475 476 /// <param name="list">A <see cref="T:Mono.DocTest.Generic.MyList{System.Predicate{``0}}" />.</param> 477 /// <typeparam name="T">Something Else</typeparam> 478 /// <remarks><c>M:Mono.DocTest.UseLists.Process``1(System.Collections.Generic.List{System.Predicate{``0}})</c>.</remarks> Process(List<Predicate<T>> list)479 public void Process<T> (List<Predicate<T>> list) 480 { 481 if (list.Any (p => p == null)) 482 throw new ArgumentException ("predicate null"); 483 } 484 485 /// <param name="helper">A <see cref="T:Mono.DocTest.Generic.MyList{``0}.Helper{``1,``2}" />.</param> 486 /// <typeparam name="T"><c>T</c></typeparam> 487 /// <typeparam name="U"><c>U</c></typeparam> 488 /// <typeparam name="V"><c>V</c></typeparam> 489 /// <remarks><c>M:Mono.DocTest.UseLists.UseHelper``3(Mono.DocTest.Generic.MyList{``0}.Helper{``1,``2})</c>.</remarks> UseHelper(Generic.MyList<T>.Helper<U,V> helper)490 public void UseHelper<T,U,V> (Generic.MyList<T>.Helper<U,V> helper) {} 491 } 492 } 493 494 namespace Mono.DocTest.Generic { 495 // Need to place this into a separate namespace to work around gmcs bug 496 // where XML docs for type *following* this one aren't extracted. 497 498 /// <typeparam name="TArg">argument type, with attributes!</typeparam> 499 /// <typeparam name="TRet">return type, with attributes!</typeparam> 500 /// <remarks><c>T:Mono.DocTest.Generic.Func`2</c>.</remarks> 501 [Doc ("method")] 502 [return:Doc ("return", Field=false)] 503 public delegate TRet Func<[Doc ("arg!")] in TArg, [Doc ("ret!")] out TRet> ( 504 [Doc ("arg-actual")] TArg a 505 ) where TArg : Exception; 506 } 507 508 namespace Mono.DocTest.Generic { 509 using Mono.DocTest; 510 511 /// <summary>extension methods!</summary> 512 /// <remarks><c>T:Mono.DocTest.Generic.Extensions</c></remarks> 513 public static class Extensions { 514 /// <summary><c>System.Object</c> extension method</summary> 515 /// <remarks><c>M:Mono.DocTest.Generic.Extensions.ToEnumerable``1</c></remarks> ToEnumerable(this T self)516 public static IEnumerable<T> ToEnumerable<T> (this T self) 517 { 518 yield return self; 519 } 520 521 /// <summary><see cref="T:System.Collections.Generic.IEnumerable`1" /> extension method</summary> 522 /// <remarks><c>M:Mono.DocTest.Generic.Extensions.ForEach``1</c></remarks> ForEach(this IEnumerable<T> self, Action<T> a)523 public static void ForEach<T> (this IEnumerable<T> self, Action<T> a) 524 { 525 } 526 527 /// <summary><see cref="T:Mono.DocTest.Generic.IFoo`1" /> extension method</summary> 528 /// <remarks><c>M:Mono.DocTest.Generic.Extensions.Bar``1</c></remarks> Bar(this IFoo<T> self, string s)529 public static void Bar <T> (this IFoo<T> self, string s) 530 { 531 } 532 533 /// <summary> 534 /// <see cref="T:System.Collections.Generic.IEnumerable{System.Int32}" /> 535 /// extension method. 536 /// </summary> 537 /// <remarks><c>M:Mono.DocTest.Generic.Extensions.ToDouble</c></remarks> ToDouble(this IEnumerable<int> list)538 public static IEnumerable<double> ToDouble (this IEnumerable<int> list) 539 { 540 return null; 541 } 542 543 /// <summary> 544 /// <see cref="T:Mono.DocTest.Generic.IFoo`1" /> extension method. 545 /// </summary> 546 /// <remarks><c>M:Mono.DocTest.Generic.Extensions.ToDouble</c></remarks> 547 public static double ToDouble<T> (this T val) where T : IFoo<T> 548 { 549 // the target type is T:...IFoo<T>, NOT T:System.Object. 550 return 0.0; 551 } 552 } 553 554 /// <typeparam name="U">Insert <c>text</c> here.</typeparam> 555 /// <remarks><c>T:Mono.DocTest.Generic.GenericBase`1</c>.</remarks> 556 public class GenericBase<U> { 557 558 /// <param name="genericParameter">Something</param> 559 /// <typeparam name="S">Insert more <c>text</c> here.</typeparam> 560 /// <remarks><c>M:Mono.DocTest.GenericBase`1.BaseMethod``1(``0)</c>.</remarks> 561 /// <returns>The default value.</returns> BaseMethod(S genericParameter)562 public U BaseMethod<[Doc ("S")] S> (S genericParameter) { 563 return default(U); 564 } 565 566 /// <remarks><c>F:Mono.DocTest.GenericBase`1.StaticField1</c></remarks> 567 public static readonly GenericBase<U> StaticField1 = new GenericBase<U> (); 568 569 /// <remarks><c>F:Mono.DocTest.GenericBase`1.ConstField1</c></remarks> 570 public const int ConstField1 = 1; 571 572 /// <param name="list">Insert description here</param> 573 /// <remarks><c>M:Mono.DocTest.GenericBase`1.op_Explicit(Mono.DocTest.GenericBase{`0})~`0</c></remarks> 574 /// <returns>The default value for <typeparamref name="U"/>.</returns> operator U(GenericBase<U> list)575 public static explicit operator U (GenericBase<U> list) {return default(U);} 576 577 /// <remarks>T:Mono.DocTest.Generic.GenericBase`1.FooEventArgs</remarks> 578 public class FooEventArgs : EventArgs { 579 } 580 581 /// <remarks>E:Mono.DocTest.Generic.GenericBase`1.MyEvent</remarks> 582 public event EventHandler<FooEventArgs> MyEvent; 583 584 /// <remarks>E:Mono.DocTest.Generic.GenericBase`1.ItemChanged</remarks> 585 public event Action<MyList<U>, MyList<U>.Helper<U, U>> ItemChanged; 586 587 /// <remarks>T:Mono.DocTest.Generic.GenericBase`1.NestedCollection</remarks> 588 public class NestedCollection { 589 /// <remarks>T:Mono.DocTest.Generic.GenericBase`1.NestedCollection.Enumerator</remarks> 590 protected internal struct Enumerator { 591 } 592 } 593 } 594 595 /// <typeparam name="T">I'm Dying Here!</typeparam> 596 /// <remarks><c>T:Mono.DocTest.Generic.MyList`1</c>.</remarks> 597 public class MyList<[Mono.DocTest.Doc("Type Parameter!")] T> : GenericBase <T>, IEnumerable<int[]> 598 { 599 /// <typeparam name="U">Seriously!</typeparam> 600 /// <typeparam name="V">Too <c>many</c> docs!</typeparam> 601 /// <remarks><c>T:Mono.DocTest.MyList`1.Helper`2</c>.</remarks> 602 public class Helper <U, V> { 603 /// <param name="a">Ako</param> 604 /// <param name="b">bko</param> 605 /// <param name="c">cko</param> 606 /// <remarks><c>M:Mono.DocTest.MyList`1.Helper`2.UseT(`0,`1,`2)</c>.</remarks> UseT(T a, U b, V c)607 public void UseT(T a, U b, V c) { } 608 } 609 610 /// <param name="t">tko</param> 611 /// <remarks><c>M:Mono.DocTest.MyList`1.Test(`0)</c>.</remarks> Test(T t)612 public void Test (T t) {} 613 614 /// <param name="t">Class generic type</param> 615 /// <param name="u">Method generic type</param> 616 /// <typeparam name="U">Method generic parameter</typeparam> 617 /// <remarks><c>M:Mono.DocTest.MyList`1.Method``1(`0,``0)</c>.</remarks> Method(T t, U u)618 public void Method <U> (T t, U u) {} 619 620 // mcs "crashes" (CS1569) on this method; exclude it for now. 621 // <remarks><c>M:Mono.DocTest.MyList`1.RefMethod``1(`0@,``0@)</c>.</remarks> RefMethod(ref T t, ref U u)622 public void RefMethod<U> (ref T t, ref U u) {} 623 624 /// <param name="helper">A <see cref="T:Mono.DocTest.Generic.MyList`1.Helper`2" />.</param> 625 /// <typeparam name="U">Argh!</typeparam> 626 /// <typeparam name="V">Foo Argh!</typeparam> 627 /// <remarks><c>M:Mono.DocTest.Generic.MyList`1.UseHelper``2(Mono.DocTest.Generic.MyList{``0}.Helper{``1,``2})</c>.</remarks> UseHelper(Helper<U,V> helper)628 public void UseHelper<U,V> (Helper<U,V> helper) {} 629 630 /// <remarks><c>M:Mono.DocTest.Generic.MyList`1.GetHelper``2</c>.</remarks> 631 /// <returns><see langword="null" />.</returns> GetHelper()632 public Helper<U,V> GetHelper<U,V> () {return null;} 633 634 /// <remarks><c>M:Mono.DocTest.MyList`1.System#Collections#GetEnumerator</c>.</remarks> IEnumerable.GetEnumerator()635 IEnumerator IEnumerable.GetEnumerator () {return null;} 636 637 /// <remarks><c>M:Mono.DocTest.MyList`1.GetEnumerator</c>.</remarks> GetEnumerator()638 public IEnumerator<int[]> GetEnumerator () {return null;} 639 } 640 641 /// <typeparam name="T">T generic param</typeparam> 642 /// <remarks><c>T:Mono.DocTest.IFoo`1</c>.</remarks> 643 public interface IFoo<T> { 644 /// <typeparam name="U">U generic param</typeparam> 645 /// <remarks><c>T:Mono.DocTest.IFoo`1.Method``1(`0,``0)</c>.</remarks> Method(T t, U u)646 T Method <U> (T t, U u); 647 } 648 649 /// <typeparam name="A">Ako generic param</typeparam> 650 /// <typeparam name="B">Bko generic param</typeparam> 651 /// <remarks><c>T:Mono.DocTest.MyList`2</c>.</remarks> 652 public class MyList<A,B> : GenericBase<Dictionary<A,B>>, IEnumerable<A>, 653 IEnumerator<A>, ICollection<A>, IFoo<A> 654 where A : class, IList<B>, new() 655 where B : class, A 656 { 657 // IEnumerator 658 659 // shown? 660 object IEnumerator.Current {get {return null;}} 661 662 /// <remarks><c>M:Mono.DocTest.MyList`2.MoveNext</c>.</remarks> 663 /// <returns><see cref="T:System.Boolean" /></returns> MoveNext()664 public bool MoveNext () {return false;} 665 666 /// <remarks><c>M:Mono.DocTest.MyList`2.Reset</c>.</remarks> Reset()667 public void Reset () {} 668 669 // IDisposable 670 /// <remarks><c>M:Mono.DocTest.MyList`2.Dispose</c>.</remarks> Dispose()671 public void Dispose () {} 672 673 // IEnumerator<T> 674 /// <remarks><c>P:Mono.DocTest.MyList`2.Current</c>.</remarks> 675 /// <value>The current value.</value> 676 public A Current {get {return default(A);}} 677 /// <remarks><c>P:Mono.DocTest.MyList`2.Current</c>.</remarks> 678 /// <value>The current value.</value> 679 A IEnumerator<A>.Current {get {return default(A);}} 680 681 // IEnumerable 682 /// <remarks><c>M:Mono.DocTest.MyList`2.System#Collections#GetEnumerator</c>.</remarks> IEnumerable.GetEnumerator()683 IEnumerator IEnumerable.GetEnumerator () {return this;} 684 685 // IEnumerable<T> 686 /// <remarks><c>M:Mono.DocTest.MyList`2.System#Collections#Generic#IEnumerable{A}#GetEnumerator</c>.</remarks> 687 /// <returns>A <see cref="T:System.Collections.Generic.IEnumerator{`0}" />.</returns> GetEnumerator()688 IEnumerator<A> IEnumerable<A>.GetEnumerator () {return this;} 689 /// <remarks><c>M:Mono.DocTest.MyList`2.GetEnumerator</c>.</remarks> 690 /// <returns>A <see cref="T:System.Collections.Generic.List{`0}.Enumerator" />.</returns> GetEnumerator()691 public List<A>.Enumerator GetEnumerator () {return new List<A>.Enumerator ();} 692 693 // ICollection<T> 694 /// <remarks><c>P:Mono.DocTest.MyList`2.Count</c>.</remarks> 695 /// <value>A <see cref="T:System.Int32" />.</value> 696 public int Count {get {return 0;}} 697 /// <remarks><c>P:Mono.DocTest.MyList`2.System#Collections#Generic#ICollection{A}#IsReadOnly</c>.</remarks> 698 /// <value>A <see cref="T:System.Boolean" />.</value> 699 bool ICollection<A>.IsReadOnly {get {return false;}} 700 /// <param name="item">The item to add.</param> 701 /// <remarks><c>M:Mono.DocTest.MyList`2.System#Collections#Generic#ICollection{A}#Add(`0)</c>.</remarks> Add(A item)702 void ICollection<A>.Add (A item) {} 703 /// <remarks><c>M:Mono.DocTest.MyList`2.System#Collections#Generic#ICollection{A}#Clear</c>.</remarks> Clear()704 void ICollection<A>.Clear () {} 705 /// <param name="item">The item to check for</param> 706 /// <remarks><c>M:Mono.DocTest.MyList`2.System#Collections#Generic#ICollection{A}.Contains(`0)</c>.</remarks> 707 /// <returns>A <see cref="T:System.Boolean" /> instance (<see langword="false" />).</returns> Contains(A item)708 bool ICollection<A>.Contains (A item) {return false;} 709 /// <param name="array">Where to copy elements to</param> 710 /// <param name="arrayIndex">Where to start copyingto</param> 711 /// <remarks><c>M:Mono.DocTest.MyList`2.CopyTo(`0[],System.Int32)</c>.</remarks> CopyTo(A[] array, int arrayIndex)712 public void CopyTo (A[] array, int arrayIndex) {} 713 /// <param name="item">the item to remove</param> 714 /// <remarks><c>M:Mono.DocTest.MyList`2.System#Collections#Generic#ICollection{A}#Remove(`0)</c>.</remarks> 715 /// <returns>Whether the item was removed.</returns> Remove(A item)716 bool ICollection<A>.Remove (A item) {return false;} 717 718 /// <remarks>M:Mono.DocTest.Generic.MyList`2.Foo</remarks> Foo()719 public KeyValuePair<IEnumerable<A>, IEnumerable<B>> Foo () 720 { 721 return new KeyValuePair<IEnumerable<A>, IEnumerable<B>> (); 722 } 723 724 // IFoo members 725 /// <typeparam name="U">U generic param on MyList`2</typeparam> 726 /// <remarks><c>M:Mono.DocTest.Generic.MyList`2.Mono#DocTest#Generic#IFoo{A}#Method``1(`0,``0)</c>.</remarks> Method(A a, U u)727 A IFoo<A>.Method <U> (A a, U u) 728 { 729 return default (A); 730 } 731 } 732 } 733 734