public void Transform_ThrowsArgumentException_IfThereIsNoFieldOrPropertyWithName() { // Creating the expression "instance.AddNonExistentEvent(handler)" Expression instance = Expression.Parameter(typeof(Fixture), "instance"); Expression handler = Expression.Parameter(typeof(EventHandler), "handler"); Expression input = Expression.Call(instance, FixtureAddNonExistentEvent, handler); // Validating that EventAddAttribute fails on non-existent event EventAddAttribute attribute = new EventAddAttribute("NonExistentEvent"); Assert.ThrowsException <ArgumentException>(() => attribute.Transform(input)); }
public void Transform_ReplacesMethodCallExpressionWithAddAssignExpression_ForFieldEvents() { // Creating the expression "instance.AddEvent(handler)" ParameterExpression instance = Expression.Parameter(typeof(Fixture), "instance"); ParameterExpression handler = Expression.Parameter(typeof(EventHandler), "handler"); Expression input = Expression.Call(instance, FixtureAddEvent, handler); // Validating that EventAddAttribute creates expression subscribing to Event Expression output = new EventAddAttribute("Event").Transform(input); Action <Fixture, EventHandler> addEvent = Expression.Lambda <Action <Fixture, EventHandler> >(output, new[] { instance, handler }).Compile(); bool eventEmitted = false; Fixture fixture = new Fixture(); EventHandler eventHandler = (sender, e) => eventEmitted = true; addEvent(fixture, eventHandler); fixture.TriggerEvent(); Assert.IsTrue(eventEmitted); }