[runtime] Fix Empty generic enumerator equality
[mono.git] / mcs / class / corlib / Test / System / MulticastDelegate.cs
1 // MulticastDelegate.cs - NUnit Test Cases for MulticastDelegates (C# delegates)\r
2 //\r
3 // Daniel Stodden (stodden@in.tum.de)\r
4 //\r
5 // (C) Daniel Stodden\r
6 // \r
7 \r
8 using NUnit.Framework;\r
9 using System;\r
10 \r
11 namespace MonoTests.System\r
12 {\r
13 \r
14 [TestFixture]\r
15 public class MulticastDelegateTest {\r
16         \r
17         public MulticastDelegateTest() {}\r
18 \r
19         private delegate char MyDelegate( ref string s );\r
20 \r
21         private char MethodA( ref string s ) \r
22         {\r
23                 s += "a";\r
24                 return 'a';\r
25         }\r
26 \r
27         private char MethodB( ref string s )\r
28         {\r
29                 s += "b";\r
30                 return 'b';\r
31         }\r
32 \r
33         private char MethodC( ref string s )\r
34         {\r
35                 s += "c";\r
36                 return 'c';\r
37         }\r
38 \r
39         private char MethodD( ref string s )\r
40         {\r
41                 s += "d";\r
42                 return 'd';\r
43         }\r
44 \r
45         [Test]\r
46         public void TestEquals()\r
47         {\r
48                 MyDelegate dela = new MyDelegate( MethodA );\r
49                 MyDelegate delb = new MyDelegate( MethodB );\r
50                 MyDelegate delc = new MyDelegate( MethodC );\r
51 \r
52                 Assert.AreEqual(false, dela == delb , "#A01");\r
53                 \r
54                 MyDelegate del1, del2;\r
55 \r
56                 del1 = dela + delb;\r
57                 del2 = delb + delc;\r
58                 Assert.AreEqual(false, del1 == del2 , "#A02");\r
59                 \r
60                 del1 += delc;\r
61                 del2 = dela + del2;\r
62                 Assert.AreEqual(true, del1 == del2 , "#A03");\r
63                 \r
64                 object o = new object ();\r
65                 \r
66                 Assert.AreEqual (false, dela.Equals (o), "#A04");\r
67                 \r
68         }\r
69 \r
70         [Test]\r
71         public void TestCombineRemove()\r
72         {\r
73                 MyDelegate dela = new MyDelegate( MethodA );\r
74                 MyDelegate delb = new MyDelegate( MethodB );\r
75                 MyDelegate delc = new MyDelegate( MethodC );\r
76                 MyDelegate deld = new MyDelegate( MethodD );\r
77 \r
78                 string val;\r
79                 char res;\r
80 \r
81                 // test combine\r
82                 MyDelegate del1, del2;\r
83                 del1 = dela + delb + delb + delc + delb + delb + deld;\r
84                 val = "";\r
85                 res = del1( ref val );\r
86                 Assert.AreEqual("abbcbbd", val , "#A01");\r
87                 Assert.AreEqual('d', res , "#A02");\r
88 \r
89                 // test remove\r
90                 del2 = del1 - ( delb + delb );\r
91                 val = "";\r
92                 res = del2( ref val );\r
93                 Assert.AreEqual("abbcd", val , "#A03");\r
94                 Assert.AreEqual('d', res , "#A04");\r
95 \r
96                 // we did not affect del1, did we?\r
97                 val = "";\r
98                 res = del1( ref val );\r
99                 Assert.AreEqual("abbcbbd", val , "#A05");\r
100         }\r
101 \r
102         [Test] //Bug #12536\r
103         public void TestCombineBothDirections ()\r
104         {\r
105                 MyDelegate dela = new MyDelegate( MethodA );\r
106                 MyDelegate delb = new MyDelegate( MethodB );\r
107                 MyDelegate delc = new MyDelegate( MethodC );\r
108                 MyDelegate deld = new MyDelegate( MethodD );\r
109 \r
110                 string val;\r
111                 char res;\r
112 \r
113                 MyDelegate a = dela + delb;\r
114                 val = "";\r
115                 res = a (ref val);\r
116                 Assert.AreEqual ("ab", val, "#1");\r
117                 Assert.AreEqual ('b', res, "#2");\r
118 \r
119                 MyDelegate b = delc + deld;\r
120                 val = "";\r
121                 res = b (ref val);\r
122                 Assert.AreEqual ("cd", val, "#3");\r
123                 Assert.AreEqual ('d', res, "#4");\r
124 \r
125                 MyDelegate c = a + b;\r
126                 val = "";\r
127                 res = c (ref val);\r
128                 Assert.AreEqual ("abcd", val, "#5");\r
129                 Assert.AreEqual ('d', res, "#6");\r
130         }\r
131 }\r
132 }\r