// (C) Daniel Stodden\r
// \r
\r
-// these are the standard namespaces you will need. You may need to add more\r
-// depending on your tests.\r
using NUnit.Framework;\r
using System;\r
\r
-// all test namespaces start with "MonoTests." Append the Namespace that\r
-// contains the class you are testing, e.g. MonoTests.System.Collections\r
namespace MonoTests.System\r
{\r
\r
-// the class name should end with "Test" and start with the name of the class\r
-// you are testing, e.g. CollectionBaseTest\r
-public class MulticastDelegateTest : TestCase {\r
+[TestFixture]\r
+public class MulticastDelegateTest {\r
\r
- // there should be two constructors for your class. The first one\r
- // (without parameters) should set the name to something unique.\r
- // Of course the name of the method is the same as the name of the\r
- // class\r
- public MulticastDelegateTest() : base ("System.MulticastDelegate") {}\r
- public MulticastDelegateTest(string name) : base(name) {}\r
-\r
- // this method is run before each Test* method is called. You can put\r
- // variable initialization, etc. here that is common to each test.\r
- // Just leave the method empty if you don't need to use it.\r
- protected override void SetUp() {}\r
-\r
- // this method is run after each Test* method is called. You can put\r
- // clean-up code, etc. here. Whatever needs to be done after each test.\r
- // Just leave the method empty if you don't need to use it.\r
- protected override void TearDown() {}\r
-\r
- // this property is required. You need change the parameter for\r
- // typeof() below to be your class.\r
- public static ITest Suite {\r
- get {\r
- return new TestSuite(typeof(MulticastDelegateTest));\r
- }\r
- }\r
+ public MulticastDelegateTest() {}\r
\r
private delegate char MyDelegate( ref string s );\r
\r
s += "d";\r
return 'd';\r
}\r
- \r
- public void TestCombineRemove()\r
+\r
+ [Test]\r
+ public void TestEquals()\r
{\r
- string val;\r
- char res;\r
+ MyDelegate dela = new MyDelegate( MethodA );\r
+ MyDelegate delb = new MyDelegate( MethodB );\r
+ MyDelegate delc = new MyDelegate( MethodC );\r
+\r
+ Assert.AreEqual(false, dela == delb , "#A01");\r
+ \r
+ MyDelegate del1, del2;\r
\r
+ del1 = dela + delb;\r
+ del2 = delb + delc;\r
+ Assert.AreEqual(false, del1 == del2 , "#A02");\r
+ \r
+ del1 += delc;\r
+ del2 = dela + del2;\r
+ Assert.AreEqual(true, del1 == del2 , "#A03");\r
+ \r
+ object o = new object ();\r
+ \r
+ Assert.AreEqual (false, dela.Equals (o), "#A04");\r
+ \r
+ }\r
+\r
+ [Test]\r
+ public void TestCombineRemove()\r
+ {\r
MyDelegate dela = new MyDelegate( MethodA );\r
MyDelegate delb = new MyDelegate( MethodB );\r
MyDelegate delc = new MyDelegate( MethodC );\r
MyDelegate deld = new MyDelegate( MethodD );\r
\r
+ string val;\r
+ char res;\r
+\r
+ // test combine\r
MyDelegate del1, del2;\r
del1 = dela + delb + delb + delc + delb + delb + deld;\r
val = "";\r
res = del1( ref val );\r
- \r
- AssertEquals( "#A01", "abbcbbd", val );\r
- AssertEquals( "#A02", 'd', res );\r
- \r
+ Assert.AreEqual("abbcbbd", val , "#A01");\r
+ Assert.AreEqual('d', res , "#A02");\r
+\r
+ // test remove\r
del2 = del1 - ( delb + delb );\r
val = "";\r
res = del2( ref val );\r
- \r
- AssertEquals( "#A03", "abbcd", val );\r
- AssertEquals( "#A04", 'd', res );\r
+ Assert.AreEqual("abbcd", val , "#A03");\r
+ Assert.AreEqual('d', res , "#A04");\r
+\r
+ // we did not affect del1, did we?\r
+ val = "";\r
+ res = del1( ref val );\r
+ Assert.AreEqual("abbcbbd", val , "#A05");\r
+ }\r
+\r
+ [Test] //Bug #12536\r
+ public void TestCombineBothDirections ()\r
+ {\r
+ MyDelegate dela = new MyDelegate( MethodA );\r
+ MyDelegate delb = new MyDelegate( MethodB );\r
+ MyDelegate delc = new MyDelegate( MethodC );\r
+ MyDelegate deld = new MyDelegate( MethodD );\r
+\r
+ string val;\r
+ char res;\r
+\r
+ MyDelegate a = dela + delb;\r
+ val = "";\r
+ res = a (ref val);\r
+ Assert.AreEqual ("ab", val, "#1");\r
+ Assert.AreEqual ('b', res, "#2");\r
+\r
+ MyDelegate b = delc + deld;\r
+ val = "";\r
+ res = b (ref val);\r
+ Assert.AreEqual ("cd", val, "#3");\r
+ Assert.AreEqual ('d', res, "#4");\r
+\r
+ MyDelegate c = a + b;\r
+ val = "";\r
+ res = c (ref val);\r
+ Assert.AreEqual ("abcd", val, "#5");\r
+ Assert.AreEqual ('d', res, "#6");\r
}\r
}\r
}\r