public void DebuggerDisplay() { var calc = Avatar.Of <ICalculator>(); var recorder = new RecordingBehavior(); calc.AddBehavior(recorder); calc.AddBehavior(new DefaultEqualityBehavior()); calc.AddBehavior( (invocation, next) => invocation.CreateValueReturn(invocation.Arguments.Get <int>(0) + invocation.Arguments.Get <int>(1)), invocation => invocation.MethodBase.Name == nameof(ICalculator.Add), "Add"); calc.AddBehavior(new DefaultValueBehavior()); calc.GetHashCode(); Assert.False(calc.Equals(new object())); Assert.Equal(5, calc.Add(3, 2)); Assert.Equal(10, calc.Add(5, 5)); calc.Store("Mem1", 50); calc.Recall("Mem1"); var calls = recorder.Invocations; }
public void TestFactory() { var factory = new DynamicAvatarFactory(); var calculator = (ICalculator)factory.CreateAvatar(Assembly.GetExecutingAssembly(), typeof(ICalculator), Array.Empty <Type>(), Array.Empty <object>()); var recorder = new RecordingBehavior(); calculator.AddBehavior(recorder); calculator.AddBehavior( (m, n) => new MethodReturn(m, "foo", m.Arguments), m => m.MethodBase.Name == "ToString", "ToString"); calculator.AddBehavior( (m, n) => new MethodReturn(m, 42, m.Arguments), m => m.MethodBase.Name == "GetHashCode", "GetHashCode"); calculator.AddBehavior( (m, n) => new MethodReturn(m, true, m.Arguments), m => m.MethodBase.Name == "Equals", "Equals"); Assert.Equal("foo", calculator.ToString()); Assert.Equal(42, calculator.GetHashCode()); Assert.True(calculator.Equals("foo")); Assert.Throws <NotImplementedException>(() => calculator.Add(2, 3)); Assert.Equal(4, recorder.Invocations.Count); }
public void CanVerifyLooseMockDelegateWithNoReturnValue() { var recorder = new RecordingBehavior(); var stunt = Stunt.Of <Action <int> >(); stunt.AddBehavior(recorder); stunt.AddBehavior((invocation, next) => invocation.CreateValueReturn(null, invocation.Arguments)); stunt(3); Assert.Single(recorder.Invocations); }
public void CanUseManualAvatar() { var avatar = new CalculatorAvatar(); var recorder = new RecordingBehavior(); avatar.AddBehavior(recorder); var isOn = false; avatar.TurnedOn += (_, __) => isOn = true; avatar.TurnOn(); Assert.True(isOn); Assert.Equal(3, avatar.Add(1, 2)); Assert.Equal(default, avatar.Mode);
public void CanConfigureDefaultValues() { var calculator = Avatar.Of <ICalculator, IDisposable>(); var recorder = new RecordingBehavior(); calculator.AddBehavior(recorder); calculator.AddBehavior(new DefaultValueBehavior()); Assert.IsAssignableFrom <IDisposable>(calculator); Assert.Equal(0, calculator.Add(5, 10)); Assert.Single(recorder.Invocations); Console.WriteLine(recorder.ToString()); }
public void InvokeVoidTarget() { var target = new Calculator(); var avatar = Avatar.Of <ICalculator>(); var avatarRecorder = new RecordingBehavior(); // By adding the recorder *after* the dynamic target, // we can check if any calls where made to the avatar // instead of the target. avatar.AddBehavior(new DynamicTargetBehavior(target)) .AddBehavior(avatarRecorder); avatar.Store("m1", 42); Assert.Equal(42, avatar.Recall("m1")); avatar.Clear("m1"); Assert.Null(avatar.Recall("m1")); }
public void Run() { var avatar = Avatar.Of<BaseType>(); var recorder = new RecordingBehavior(); avatar.AddBehavior(recorder); avatar.GetHashCode(); Assert.Single(recorder.Invocations); Assert.Equal(nameof(GetHashCode), recorder.Invocations[0].Invocation.MethodBase.Name); avatar.ToString(); Assert.Equal(2, recorder.Invocations.Count); Assert.Equal(nameof(ToString), recorder.Invocations[1].Invocation.MethodBase.Name); avatar.Equals(new object()); Assert.Equal(3, recorder.Invocations.Count); Assert.Equal(nameof(Equals), recorder.Invocations[2].Invocation.MethodBase.Name); }
public void InvokeReturningTarget() { var target = new Calculator(); ICalculator calc = Avatar.Of <ICalculator>(); var recorder = new RecordingBehavior(); // By adding the recorder *after* the dynamic target, // we can check if any calls where made to the avatar // instead of the target. calc.AddBehavior(new DynamicTargetBehavior(target)) .AddBehavior(recorder); var result = calc.Add(2, 3); // We recorded the call to the avatar, but the // dynamic target behavior passed the call through // to the real calculator which did the math. Assert.Empty(recorder.Invocations); Assert.Equal(5, result); }