1 //
2 // EventInfoTest
3 //
4 // Ben Maurer (bmaurer@ximian.com)
5 //
6 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
7 //
8 // Permission is hereby granted, free of charge, to any person obtaining
9 // a copy of this software and associated documentation files (the
10 // "Software"), to deal in the Software without restriction, including
11 // without limitation the rights to use, copy, modify, merge, publish,
12 // distribute, sublicense, and/or sell copies of the Software, and to
13 // permit persons to whom the Software is furnished to do so, subject to
14 // the following conditions:
15 //
16 // The above copyright notice and this permission notice shall be
17 // included in all copies or substantial portions of the Software.
18 //
19 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
23 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
24 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
25 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 //
27 
28 using System;
29 using System.Threading;
30 using System.Reflection;
31 using System.Runtime.InteropServices;
32 
33 using NUnit.Framework;
34 
35 namespace MonoTests.System.Reflection
36 {
37 	[TestFixture]
38 	public class EventInfoTest
39 	{
40 		[Test]
IsDefined_AttributeType_Null()41 		public void IsDefined_AttributeType_Null ()
42 		{
43 			EventInfo priv = typeof (PrivateEvent).GetEvents (
44 				BindingFlags.Public | BindingFlags.NonPublic |
45 				BindingFlags.Static) [0];
46 
47 			try {
48 				priv.IsDefined ((Type) null, false);
49 				Assert.Fail ("#1");
50 			} catch (ArgumentNullException ex) {
51 				Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
52 				Assert.IsNull (ex.InnerException, "#3");
53 				Assert.IsNotNull (ex.Message, "#4");
54 				Assert.IsNotNull (ex.ParamName, "#5");
55 				Assert.AreEqual ("attributeType", ex.ParamName, "#6");
56 			}
57 		}
58 
59 		[Test]
TestGetXXXMethod()60 		public void TestGetXXXMethod ()
61 		{
62 			EventInfo priv = typeof (PrivateEvent).GetEvents (BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static) [0];
63 			Assert.IsNull (priv.GetAddMethod (), "#A1");
64 			Assert.IsNull (priv.GetRaiseMethod (), "#A2");
65 			Assert.IsNull (priv.GetRemoveMethod (), "#A3");
66 
67 			EventInfo pub = typeof (PublicEvent).GetEvents (BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static) [0];
68 			Assert.IsNotNull (pub.GetAddMethod (), "#B1");
69 			Assert.IsNull (pub.GetRaiseMethod (), "#B2");
70 			Assert.IsNotNull (pub.GetRemoveMethod (), "#B3");
71 		}
72 
73 		[Test]
AddHandlerToNullInstanceEventRaisesTargetException()74 		public void AddHandlerToNullInstanceEventRaisesTargetException ()
75 		{
76 			EventInfo ev = typeof (TestClass).GetEvent ("pub");
77 			EventHandler dele = (a,b) => {};
78 			try {
79 				ev.AddEventHandler (null, dele);
80 				Assert.Fail ("#1");
81 			} catch (TargetException) {}
82 		}
83 
84 		[Test]
AddHandleToPrivateEventRaisesInvalidOperationException()85 		public void AddHandleToPrivateEventRaisesInvalidOperationException ()
86 		{
87 			EventInfo ev = typeof (TestClass).GetEvent ("priv", BindingFlags.NonPublic| BindingFlags.Instance);
88 			EventHandler dele = (a,b) => {};
89 			try {
90 				ev.AddEventHandler (new PrivateEvent (), dele);
91 				Assert.Fail ("#1");
92 			} catch (InvalidOperationException) {}
93 		}
94 
95 		[Test]
AddHandlerWithIncompatibleTargetShouldRaiseTargetException()96 		public void AddHandlerWithIncompatibleTargetShouldRaiseTargetException ()
97 		{
98 			EventInfo ev = typeof (TestClass).GetEvent ("pub");
99 			EventHandler dele = (a,b) => {};
100 			try {
101 				ev.AddEventHandler (new PublicEvent (), dele);
102 				Assert.Fail ("#1");
103 			} catch (TargetException) {}
104 		}
105 
106 		[Test]
RemoveHandleToPrivateEventRaisesInvalidOperationException()107 		public void RemoveHandleToPrivateEventRaisesInvalidOperationException ()
108 		{
109 			EventInfo ev = typeof (TestClass).GetEvent ("priv", BindingFlags.NonPublic| BindingFlags.Instance);
110 			EventHandler dele = (a,b) => {};
111 			try {
112 				ev.RemoveEventHandler (new PrivateEvent (), dele);
113 				Assert.Fail ("#1");
114 			} catch (InvalidOperationException) {}
115 		}
116 
117 		[Test]
EventInfoModule()118 		public void EventInfoModule ()
119 		{
120 			Type type = typeof (TestClass);
121 			EventInfo ev = type.GetEvent ("pub");
122 
123 			Assert.AreEqual (type.Module, ev.Module);
124 		}
125 
126 #pragma warning disable 67
127 		public class PrivateEvent
128 		{
129 			private static event EventHandler x;
130 		}
131 
132 		public class PublicEvent
133 		{
134 			public static event EventHandler x;
135 		}
136 
137 		public class TestClass
138 		{
139 			public event EventHandler pub;
140 			private event EventHandler priv;
141 		}
142 
143 #pragma warning restore 67
144 	}
145 }
146