[Test] public void TestRemoveAdded() { var test = new Test(); EventHandler handler = (s, a) => Test.Result += "B"; test.Event1 += handler; test.Event1 += handler; test.Event1 += test.Handler; test.Event1 += (s, a) => Test.Result += "C"; Test.Event3 += test.Handler; test.RaiseEvents(); Assert.Equal(4, test.Event1HandlerCount); Assert.Equal(0, test.Event2HandlerCount); Assert.Equal(1, test.Event3HandlerCount); Assert.Equal("BBAC--A", Test.Result); Test.Result = string.Empty; using (EventsSnapshot.Capture(test, EventsSnapshot.Restore.RemoveAdded)) { test.Event1 += (s, a) => Test.Result += "D"; test.Event1 += test.Handler; test.Event1 += handler; test.AttachHandlerToEvent2(); test.AttachHandlerToEvent3(); test.RaiseEvents(); Assert.Equal(7, test.Event1HandlerCount); Assert.Equal(1, test.Event2HandlerCount); Assert.Equal(2, test.Event3HandlerCount); Assert.Equal("BBACDAB-A-AA", Test.Result); Test.Result = string.Empty; test.Event1 -= handler; test.Event1 -= handler; test.AttachHandlerToEvent2(); test.AttachHandlerToEvent3(); test.RaiseEvents(); Assert.Equal(5, test.Event1HandlerCount); Assert.Equal(2, test.Event2HandlerCount); Assert.Equal(3, test.Event3HandlerCount); Assert.Equal("BACDA-AA-AAA", Test.Result); Test.Result = string.Empty; } test.RaiseEvents(); Assert.Equal(3, test.Event1HandlerCount); Assert.Equal(0, test.Event2HandlerCount); Assert.Equal(1, test.Event3HandlerCount); Assert.Equal("BAC--A", Test.Result); Test.Result = string.Empty; }
[Test] public void TestBoth() { var test = new Test(); EventHandler handler = (s, a) => Test.Result += "B"; test.Event1 += handler; test.Event1 += handler; test.Event1 += test.Handler; test.Event1 += (s, a) => Test.Result += "C"; Test.Event3 += test.Handler; test.RaiseEvents(); Assert.Equal(4, test.Event1HandlerCount); Assert.Equal(0, test.Event2HandlerCount); Assert.Equal(1, test.Event3HandlerCount); Assert.Equal("BBAC--A", Test.Result); Test.Result = string.Empty; using (EventsSnapshot.Capture(test, EventsSnapshot.Restore.Both)) { test.Event1 -= handler; test.Event1 += test.Handler; test.Event1 += test.Handler; test.Event1 += (s, a) => Test.Result += "D"; test.RaiseEvents(); Assert.Equal(6, test.Event1HandlerCount); Assert.Equal(0, test.Event2HandlerCount); Assert.Equal(1, test.Event3HandlerCount); Assert.Equal("BACAAD--A", Test.Result); Test.Result = string.Empty; test.Event1 += (s, a) => Test.Result += "E"; test.AttachHandlerToEvent2(); Test.Event3 -= test.Handler; test.RaiseEvents(); Assert.Equal(7, test.Event1HandlerCount); Assert.Equal(1, test.Event2HandlerCount); Assert.Equal(0, test.Event3HandlerCount); Assert.Equal("BACAADE-A-", Test.Result); Test.Result = string.Empty; } test.RaiseEvents(); Assert.Equal(4, test.Event1HandlerCount); Assert.Equal(0, test.Event2HandlerCount); Assert.Equal(1, test.Event3HandlerCount); Assert.Equal("BACB--A", Test.Result); Test.Result = string.Empty; }
[Test] public void TestAddRemoved() { var test = new Test(); EventHandler handler = (s, a) => Test.Result += "B"; test.Event1 += handler; test.Event1 += handler; test.Event1 += test.Handler; test.Event1 += (s, a) => Test.Result += "C"; test.AttachHandlerToEvent2(); Test.Event3 += test.Handler; test.RaiseEvents(); Assert.Equal(4, test.Event1HandlerCount); Assert.Equal(1, test.Event2HandlerCount); Assert.Equal(1, test.Event3HandlerCount); Assert.Equal("BBAC-A-A", Test.Result); Test.Result = string.Empty; using (EventsSnapshot.Capture(test, EventsSnapshot.Restore.AddRemoved)) { test.ResetHandlers(); test.RaiseEvents(); Assert.Equal(0, test.Event1HandlerCount); Assert.Equal(0, test.Event2HandlerCount); Assert.Equal(0, test.Event3HandlerCount); Assert.Equal("--", Test.Result); Test.Result = string.Empty; test.Event1 += handler; test.RaiseEvents(); Assert.Equal(1, test.Event1HandlerCount); Assert.Equal(0, test.Event2HandlerCount); Assert.Equal(0, test.Event3HandlerCount); Assert.Equal("B--", Test.Result); Test.Result = string.Empty; } test.RaiseEvents(); Assert.Equal(4, test.Event1HandlerCount); Assert.Equal(1, test.Event2HandlerCount); Assert.Equal(1, test.Event3HandlerCount); Assert.Equal("BBAC-A-A", Test.Result); Test.Result = string.Empty; }