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