1 // MulticastDelegate.cs - NUnit Test Cases for MulticastDelegates (C# delegates)
\r
3 // Daniel Stodden (stodden@in.tum.de)
\r
5 // (C) Daniel Stodden
\r
8 using NUnit.Framework;
\r
11 namespace MonoTests.System
\r
15 public class MulticastDelegateTest {
\r
17 public MulticastDelegateTest() {}
\r
19 private delegate char MyDelegate( ref string s );
\r
21 private char MethodA( ref string s )
\r
27 private char MethodB( ref string s )
\r
33 private char MethodC( ref string s )
\r
39 private char MethodD( ref string s )
\r
46 public void TestEquals()
\r
48 MyDelegate dela = new MyDelegate( MethodA );
\r
49 MyDelegate delb = new MyDelegate( MethodB );
\r
50 MyDelegate delc = new MyDelegate( MethodC );
\r
52 Assert.AreEqual(false, dela == delb , "#A01");
\r
54 MyDelegate del1, del2;
\r
58 Assert.AreEqual(false, del1 == del2 , "#A02");
\r
62 Assert.AreEqual(true, del1 == del2 , "#A03");
\r
64 object o = new object ();
\r
66 Assert.AreEqual (false, dela.Equals (o), "#A04");
\r
71 public void TestCombineRemove()
\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
82 MyDelegate del1, del2;
\r
83 del1 = dela + delb + delb + delc + delb + delb + deld;
\r
85 res = del1( ref val );
\r
86 Assert.AreEqual("abbcbbd", val , "#A01");
\r
87 Assert.AreEqual('d', res , "#A02");
\r
90 del2 = del1 - ( delb + delb );
\r
92 res = del2( ref val );
\r
93 Assert.AreEqual("abbcd", val , "#A03");
\r
94 Assert.AreEqual('d', res , "#A04");
\r
96 // we did not affect del1, did we?
\r
98 res = del1( ref val );
\r
99 Assert.AreEqual("abbcbbd", val , "#A05");
\r
102 [Test] //Bug #12536
\r
103 public void TestCombineBothDirections ()
\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
113 MyDelegate a = dela + delb;
\r
116 Assert.AreEqual ("ab", val, "#1");
\r
117 Assert.AreEqual ('b', res, "#2");
\r
119 MyDelegate b = delc + deld;
\r
122 Assert.AreEqual ("cd", val, "#3");
\r
123 Assert.AreEqual ('d', res, "#4");
\r
125 MyDelegate c = a + b;
\r
128 Assert.AreEqual ("abcd", val, "#5");
\r
129 Assert.AreEqual ('d', res, "#6");
\r