Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
Exemplo n.º 5
0
        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());
        }
Exemplo n.º 6
0
        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"));
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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);
        }