[runtime] Don't insta-fail when a faulty COM type is encountered. (#5616)
[mono.git] / mcs / tests / test-null-operator-02.cs
1 using System;
2
3 class CI
4 {
5         public long Field;
6         public sbyte? FieldNullable;
7         public object FieldReference;
8
9         public int Prop { get; set; }
10         public byte? PropNullable { get; set; }
11         public object PropReference { get; set; }
12
13         public event Action ev1;
14 }
15
16 class C
17 {
18         static int TestProperty ()
19         {
20                 CI ci = null;
21
22                 var m1 = ci?.Prop;
23                 var m2 = ci?.PropNullable;
24                 var m3 = ci?.PropReference;
25
26                 var m4 = ci?.Prop.ToString () ?? "N";
27                 if (m4 != "N")
28                         return 1;
29
30                 var m5 = ci?.PropNullable.ToString () ?? "N";
31                 if (m5 != "N")
32                         return 2;
33
34                 var m6 = ci?.PropReference.ToString () ?? "N";
35                 if (m6 != "N")
36                         return 3; 
37
38 //        ci?.Prop = 6;
39
40                 ci = new CI ();
41                 m1 = ci?.Prop;
42                 m2 = ci?.PropNullable;
43                 m3 = ci?.PropReference;
44
45 //        ci?.Prop = 5;
46 //        if (ci.Prop != 5)
47 //            return 1;
48
49 // TODO: It's not allowed for now
50 //      ci?.Prop += 4;
51 //      var pp1 = ci?.Prop = 4;
52 //      var pp2 = ci?.Prop += 4;
53
54                 return 0;
55         }
56
57         static int TestField ()
58         {
59                 CI ci = null;
60                 var m1 = ci?.Field;
61                 var m2 = ci?.FieldNullable;
62                 var m3 = ci?.FieldReference;
63                 var m4 = ci?.Field.ToString () ?? "N";
64                 if (m4 != "N")
65                         return 1;
66
67                 var m5 = ci?.FieldNullable.ToString () ?? "N";
68                 if (m5 != "N")
69                         return 2;
70
71                 var m6 = ci?.FieldReference.ToString () ?? "N";
72                 if (m6 != "N")
73                         return 3; 
74
75 //        ci?.Field = 6;
76
77                 ci = new CI ();
78                 m1 = ci?.Field;
79                 m2 = ci?.FieldNullable;
80                 m3 = ci?.FieldReference;
81
82 //        ci?.Field = 5;
83 //        if (ci.Field != 5)
84 //            return 1;
85
86 // TODO: It's not allowed for now
87 //      ci?.Field += 4;
88 //      var pp1 = ci?.Field = 4;
89 //      var pp2 = ci?.Field += 4;
90
91                 return 0;
92         }
93 /*
94         static int TestEvent ()
95         {
96                 CI ci = null;
97                 ci?.ev1 += null;
98
99                 ci = new CI ();
100                 ci?.ev1 += null;
101
102                 return 0;
103         }
104 */
105         static int Main ()
106         {
107                 int res;
108
109                 res = TestProperty ();
110                 if (res != 0)
111                         return 10 + res;
112
113                 res = TestField ();
114                 if (res != 0)
115                         return 20 + res;
116
117 //              res = TestEvent ();
118 //              if (res != 0)
119 //                      return 30 + res;            
120
121                 Console.WriteLine ("ok");
122                 return 0;
123         }
124 }