public void Transform_ThrowsArgumentException_IfThereIsNoFieldOrPropertyWithName() { // instance.RemoveNonExistentEvent(handler); Expression instance = Expression.Parameter(typeof(Fixture), "instance"); Expression handler = Expression.Parameter(typeof(EventHandler), "handler"); Expression input = Expression.Call(instance, FixtureRemoveNonExistentEvent, handler); // Validating that EventRemoveAttribute fails on non-existent event EventRemoveAttribute attribute = new EventRemoveAttribute("NonExistentEvent"); Assert.ThrowsException <ArgumentException>(() => attribute.Transform(input)); }
public void Transform_ReplacesMethodCallExpressionWithAddAssignExpression_ForFieldEvents() { // Creating the expression "instance.RemoveEvent(handler)" ParameterExpression instance = Expression.Parameter(typeof(Fixture), "instance"); ParameterExpression handler = Expression.Parameter(typeof(EventHandler), "handler"); Expression input = Expression.Call(instance, FixtureRemoveEvent, handler); // Validating that EventRemoveAttribute creates expression unsubscribing to Event Expression output = new EventRemoveAttribute("Event").Transform(input); Action <Fixture, EventHandler> removeEvent = Expression.Lambda <Action <Fixture, EventHandler> >(output, new[] { instance, handler }).Compile(); bool eventEmitted = false; Fixture fixture = new Fixture(); EventHandler eventHandler = (sender, e) => eventEmitted = true; fixture.Event += eventHandler; removeEvent(fixture, eventHandler); fixture.TriggerEvent(); Assert.IsFalse(eventEmitted); }