Merge pull request #5675 from mono/glib-debug-symbols
[mono.git] / mcs / tests / gtest-optional-22.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Runtime.CompilerServices;
4 using System.Linq;
5
6 interface I
7 {
8         void Explicit ();
9 }
10
11 class CallerMemberTest : I
12 {
13         object field = TraceStatic ("field");
14         
15         CallerMemberTest ()
16                 : this (TraceStatic (".ctor"))
17         {
18         }
19         
20         CallerMemberTest (object arg)
21         {
22         }
23         
24         static IEnumerable<int> Enumerator ()
25         {
26                 TraceStatic ("Enumerator");
27                 yield return 1;
28         }
29         
30         void I.Explicit ()
31         {
32                 Trace ("Explicit");
33         }
34         
35         public void GenericMethod<T> ()
36         {
37                 Trace ("GenericMethod");
38         }
39         
40         public int this [string arg] {
41                 set {
42                         Trace ("Item");
43                 }
44         }
45         
46         public bool Property {
47                 get {
48                         Trace ("Property");
49                         return false;
50                 }
51         }
52         
53         public static implicit operator CallerMemberTest (int i)
54         {
55                 TraceStatic ("op_Implicit");
56                 return new CallerMemberTest ();
57         }
58
59         public void Trace(string expected, [CallerMemberName] string member = ";;")
60         {
61                 Console.WriteLine (member);
62                 if (expected != member)
63                         throw new ApplicationException (member);
64         }
65         
66         public static object TraceStatic(string expected, [CallerMemberName] object member = null)
67         {
68                 Console.WriteLine (member);
69                 
70                 if (expected != member as string)
71                         throw new ApplicationException (string.Format ("`{0}' !=  `{1}'", expected, member as string));
72                 
73                 return member;
74         }
75         
76         public static void Main ()
77         {
78                 var c = new CallerMemberTest ();
79                 c.Trace ("Main");
80                 Action a = () => {
81                         c.Trace ("Main");
82                 };
83                 a ();
84                 
85                 a = () => TraceStatic ("Main");
86                 a ();
87                 
88                 foreach (var e in Enumerator ()) {
89                 }
90                 
91                 var atype = new {
92                         OO = TraceStatic ("Main")
93                 };
94                 
95                 var l = (from x in "ab" select TraceStatic ("Main")).ToList ();
96                 
97                 c.GenericMethod<long> ();
98                 c ["aa"] = 4;
99                 var p = c.Property;
100                 
101                 I i = c;
102                 i.Explicit ();
103                 
104                 CallerMemberTest op = 1;
105         }
106 }