Exemplo n.º 1
0
        public void MultipleInstancesYieldsSingleActualInvocationPerDistinctInvocation()
        {
            var instance1 = new ForTestingPurposes();
            var instance2 = new ForTestingPurposes();

            var adapter = new PerInstanceAdapter <IForTestingPurposes>(For.Ever());
            var proxy1  = adapter.Adapt(instance1);
            var proxy2  = adapter.Adapt(instance2);

            proxy1.MethodCall(0, "zero");
            proxy1.MethodCall(0, "zero");
            proxy1.MethodCall(1, "zero");
            proxy1.MethodCall(1, "zero");
            proxy1.MethodCall(2, "zero");
            proxy1.MethodCall(2, "zero");

            proxy2.MethodCall(0, "zero");
            proxy2.MethodCall(0, "zero");
            proxy2.MethodCall(1, "zero");
            proxy2.MethodCall(1, "zero");
            proxy2.MethodCall(2, "zero");
            proxy2.MethodCall(2, "zero");

            Assert.Equal <uint>(3, instance1.MethodCallInvocationCount);
            Assert.Equal <uint>(0, instance2.MethodCallInvocationCount);
        }
Exemplo n.º 2
0
        public async Task AsyncActionInvocationsAreNotCached()
        {
            var instance = new ForTestingPurposes();
            var proxy    = new PerInstanceAdapter <IForTestingPurposes>(For.Ever()).Adapt(instance);

            await proxy.AsyncAction(0, 1, "two");

            Assert.Equal <uint>(1, instance.AsyncActionCallInvocationCount);
        }
Exemplo n.º 3
0
        public void MultipleNonCachedInvocationsYieldsMultipleInvocations()
        {
            var instance = new ForTestingPurposes();
            var proxy    = new PerMethodAdapter <IForTestingPurposes>().Adapt(instance);

            proxy.MethodCall(0, "zero");
            proxy.MethodCall(0, "zero");
            proxy.MethodCall(0, "zero");

            Assert.Equal <uint>(3, instance.MethodCallInvocationCount);
        }
Exemplo n.º 4
0
        public void VoidReturnTypeInvocationsAreNotCached()
        {
            var instance = new ForTestingPurposes();
            var proxy    = new PerInstanceAdapter <IForTestingPurposes>(For.Ever()).Adapt(instance);

            proxy.Member = "Test";
            proxy.Member = "Test";
            proxy.Member = "Test";

            Assert.Equal <uint>(3, instance.MemberSetInvocationCount);
        }
Exemplo n.º 5
0
        public void MultipleDistinctCachedMemberInvocationsYieldsSingleActualInvocation()
        {
            var instance = new ForTestingPurposes();
            var proxy    = new PerInstanceAdapter <IForTestingPurposes>(For.Ever()).Adapt(instance);

            _ = proxy.Member;
            _ = proxy.Member;
            _ = proxy.Member;

            Assert.Equal <uint>(1, instance.MemberGetInvocationCount);
        }
Exemplo n.º 6
0
        public void MultipleCachedInvocationsYieldsSingleActualInvocation()
        {
            var instance = new ForTestingPurposes();
            var proxy    = new PerInstanceAdapter <IForTestingPurposes>(For.Ever())
                           .Adapt(instance);

            proxy.MethodCall(0, "zero");
            proxy.MethodCall(0, "zero");
            proxy.MethodCall(0, "zero");

            Assert.Equal <uint>(1, instance.MethodCallInvocationCount);
        }
Exemplo n.º 7
0
        public void ExpiredInvocationsYieldsMultipleInvocations()
        {
            var instance = new ForTestingPurposes();
            var proxy    = new PerMethodAdapter <IForTestingPurposes>()
                           .Cache(x => x.MethodCall(0, "zero"), While.Result.True <string>((result, dt) => false))
                           .Adapt(instance);

            proxy.MethodCall(0, "zero");
            proxy.MethodCall(0, "zero");
            proxy.MethodCall(1, "one");
            proxy.MethodCall(2, "two");

            Assert.Equal <uint>(4, instance.MethodCallInvocationCount);
        }
Exemplo n.º 8
0
        public void MixedInvocationsYieldsMultipleInvocations()
        {
            var instance = new ForTestingPurposes();

            var proxy = new PerMethodAdapter <IForTestingPurposes>()
                        .Cache(x => x.MethodCall(0, "zero"), For.Ever())
                        .Adapt(instance);

            proxy.MethodCall(0, "zero");
            proxy.MethodCall(0, "zero");
            proxy.MethodCall(1, "one");
            proxy.MethodCall(2, "two");

            Assert.Equal <uint>(3, instance.MethodCallInvocationCount);
        }
Exemplo n.º 9
0
        public async Task MultipleCachedAsyncInvocationsYieldsSingleInstanceInvocation()
        {
            var instance = new ForTestingPurposes();
            var proxy    = new PerInstanceAdapter <IForTestingPurposes>(For.Ever())
                           .Adapt(instance);

            // ReSharper disable once NotAccessedVariable
            var result = await proxy.AsyncMethodCall(0, "zero");

            Thread.Sleep(2000);

            // ReSharper disable once RedundantAssignment
            result = await proxy.AsyncMethodCall(0, "zero");

            Assert.Equal <uint>(1, instance.AsyncMethodCallInvocationCount);
        }
Exemplo n.º 10
0
        public void MultipleCacheExpectationsYieldExpectedResult()
        {
            var instance = new ForTestingPurposes();
            var proxy    = new PerMethodAdapter <IForTestingPurposes>()
                           .Cache(x => x.MethodCall(It.IsAny <int>(), "zero"), For.Ever())
                           .Adapt(instance);

            proxy.MethodCall(0, "zero");
            var result0 = proxy.MethodCall(0, "zero");

            proxy.MethodCall(1, "zero");
            var result1 = proxy.MethodCall(1, "zero");

            Assert.Equal <uint>(2, instance.MethodCallInvocationCount);
            Assert.Equal("0zero", result0);
            Assert.Equal("1zero", result1);
        }
Exemplo n.º 11
0
        public void MultipleMemberInvocationsYieldsSingleInvocation()
        {
            var instance = new ForTestingPurposes();
            var proxy    = new PerMethodAdapter <IForTestingPurposes>()
                           .Cache(x => x.Member, For.Ever())
                           .Adapt(instance);

            proxy.Member = "test";
            // ReSharper disable once RedundantAssignment
            var result = proxy.Member;

            instance.Member = "not equal to test";

            result = proxy.Member;

            Assert.Equal <uint>(1, instance.MemberGetInvocationCount);
            Assert.Equal("test", result);
        }
Exemplo n.º 12
0
        public void ClassProxyTargetOnlyVirtualMethodsAreCached()
        {
            var instance = new ForTestingPurposes();

            var proxy = new PerMethodAdapter <ForTestingPurposes>()
                        .Cache(x => x.MethodCall(It.IsAny <int>(), "zero"), For.Ever())
                        .Cache(x => x.VirtualMethodCall(It.IsAny <int>(), "zero"), For.Ever())
                        .Adapt(instance);

            proxy.MethodCall(0, "zero");
            proxy.MethodCall(0, "zero");
            proxy.VirtualMethodCall(0, "zero");
            proxy.VirtualMethodCall(0, "zero");

            Assert.Equal <uint>(2, proxy.MethodCallInvocationCount);
            Assert.Equal <uint>(1, instance.VirtualMethodCallInvocationCount);
            Assert.Equal <uint>(0, instance.MethodCallInvocationCount);
        }
Exemplo n.º 13
0
        public async Task ExpiredResultYieldsMultipleActualInvocations()
        {
            var instance = new ForTestingPurposes();
            var proxy    = new PerInstanceAdapter <IForTestingPurposes>(For.Milliseconds(0))
                           .Adapt(instance);

            // ReSharper disable once NotAccessedVariable
            // ReSharper disable once RedundantAssignment
            await proxy.AsyncMethodCall(0, "zero");

            // I hate to have to do this, but otherwise the second
            // invocation may complete before the first invocation
            // is added to cache.
            Thread.Sleep(2000);

            await proxy.AsyncMethodCall(0, "zero");

            Assert.Equal <uint>(2, instance.AsyncMethodCallInvocationCount);
        }
Exemplo n.º 14
0
        public async Task MultipleCachedAsyncInvocationsYieldsSingleInstanceInvocation()
        {
            var instance = new ForTestingPurposes();
            var proxy    = new PerMethodAdapter <IForTestingPurposes>()
                           .Cache(x => x.AsyncMethodCall(It.IsAny <int>(), "zero"), For.Ever())
                           .Adapt(instance);

            // ReSharper disable once NotAccessedVariable
            // ReSharper disable once RedundantAssignment
            var result = await proxy.AsyncMethodCall(0, "zero");

            // I hate to have to do this, but otherwise the second
            // invocation may complete before the first invocation
            // is added to cache.
            Thread.Sleep(2000);

            result = await proxy.AsyncMethodCall(0, "zero");

            Assert.Equal <uint>(1, instance.AsyncMethodCallInvocationCount);
            Assert.Equal("0zero", result);
        }