示例#1
0
        public void CreateOnMultipleThreadsConcurrentlyWorks()
        {
            // Fixture setup
            var dummyBuilder = new DelegatingSpecimenBuilder
            {
                OnCreate = (r, ctx) => ctx.Resolve(r)
            };
            var dummyHandler = new DelegatingRecursionHandler();
            var sut          = new RecursionGuard(dummyBuilder, dummyHandler);
            var dummyContext = new DelegatingSpecimenContext()
            {
                OnResolve = (r) => 99
            };

            // Exercise system
            int[] specimens = Enumerable.Range(0, 1000)
                              .AsParallel()
                              .WithDegreeOfParallelism(8)
                              .WithExecutionMode(ParallelExecutionMode.ForceParallelism)
                              .Select(x => (int)sut.Create(typeof(int), dummyContext))
                              .ToArray();
            // Verify outcome
            Assert.Equal(1000, specimens.Length);
            Assert.True(specimens.All(s => s == 99));
            // Teardown
        }
示例#2
0
        public void ConstructWithNullBuilderAndRecursionHandlerThrows()
        {
            // Arrange
            var dummyHandler = new DelegatingRecursionHandler();

            // Act & assert
            Assert.Throws <ArgumentNullException>(
                () => new RecursionGuard(null, dummyHandler));
        }
示例#3
0
        public void ConstructWithNullBuilderAndRecursionHandlerThrows()
        {
            // Fixture setup
            var dummyHandler = new DelegatingRecursionHandler();

            // Exercise system and verify outcome
            Assert.Throws <ArgumentNullException>(
                () => new RecursionGuard(null, dummyHandler));
            // Teardown
        }
示例#4
0
        public void ConstructWithBuilderAndHandlerSetsRecursionDepthCorrectly()
        {
            // Arrange
            var dummyBuilder = new DelegatingSpecimenBuilder();
            var dummyHandler = new DelegatingRecursionHandler();
            // Act
            var sut = new RecursionGuard(dummyBuilder, dummyHandler);

            // Assert
            Assert.Equal(1, sut.RecursionDepth);
        }
示例#5
0
        public void ConstructWithBuilderAndHandlerSetsRecursionDepthCorrectly()
        {
            // Fixture setup
            var dummyBuilder = new DelegatingSpecimenBuilder();
            var dummyHandler = new DelegatingRecursionHandler();
            // Exercise system
            var sut = new RecursionGuard(dummyBuilder, dummyHandler);

            // Verify outcome
            Assert.Equal(1, sut.RecursionDepth);
        }
示例#6
0
        public void ConstructWithBuilderAndHandlerAndNullComparerAndRecursionDepthThrows()
        {
            // Arrange
            var dummyBuilder        = new DelegatingSpecimenBuilder();
            var dummyHandler        = new DelegatingRecursionHandler();
            var dummyRecursionDepth = 2;

            // Act & assert
            Assert.Throws <ArgumentNullException>(
                () => new RecursionGuard(dummyBuilder, dummyHandler, null, dummyRecursionDepth));
        }
示例#7
0
        public void ConstructorWithRecursionDepthLowerThanOneThrows(int recursionDepth)
        {
            // Arrange
            var dummyBuilder  = new DelegatingSpecimenBuilder();
            var dummyHandler  = new DelegatingRecursionHandler();
            var dummyComparer = new DelegatingEqualityComparer();

            // Act & assert
            Assert.Throws <ArgumentOutOfRangeException>(() =>
                                                        new RecursionGuard(dummyBuilder, dummyHandler, dummyComparer, recursionDepth));
        }
示例#8
0
        public void ConstructorWithRecursionDepthLowerThanOneThrows(int recursionDepth)
        {
            // Fixture setup
            var dummyBuilder  = new DelegatingSpecimenBuilder();
            var dummyHandler  = new DelegatingRecursionHandler();
            var dummyComparer = new DelegatingEqualityComparer();

            // Exercise system and verify outcome
            Assert.Throws <ArgumentOutOfRangeException>(() =>
                                                        new RecursionGuard(dummyBuilder, dummyHandler, dummyComparer, recursionDepth));
            // Teardown
        }
示例#9
0
        public void ConstructWithBuilderAndRecursionHandlerHasCorrectBuilder()
        {
            // Arrange
            var expected     = new DelegatingSpecimenBuilder();
            var dummyHandler = new DelegatingRecursionHandler();
            var sut          = new RecursionGuard(expected, dummyHandler);
            // Act
            var actual = sut.Builder;

            // Assert
            Assert.Equal(expected, actual);
        }
示例#10
0
        public void ConstructWithBuilderAndHandlerAndNullComparerAndRecursionDepthThrows()
        {
            // Fixture setup
            var dummyBuilder        = new DelegatingSpecimenBuilder();
            var dummyHandler        = new DelegatingRecursionHandler();
            var dummyRecursionDepth = 2;

            // Exercise system and verify outcome
            Assert.Throws <ArgumentNullException>(
                () => new RecursionGuard(dummyBuilder, dummyHandler, null, dummyRecursionDepth));
            // Teardown
        }
示例#11
0
        public void ConstructWithBuilderAndRecursionHandlerHasCorrectComparer()
        {
            // Arrange
            var dummyBuilder = new DelegatingSpecimenBuilder();
            var dummyHandler = new DelegatingRecursionHandler();
            var sut          = new RecursionGuard(dummyBuilder, dummyHandler);
            // Act
            var actual = sut.Comparer;

            // Assert
            Assert.Equal(EqualityComparer <object> .Default, actual);
        }
示例#12
0
        public void ConstructWithBuilderAndRecursionHandlerHasCorrectBuilder()
        {
            // Fixture setup
            var expected     = new DelegatingSpecimenBuilder();
            var dummyHandler = new DelegatingRecursionHandler();
            var sut          = new RecursionGuard(expected, dummyHandler);
            // Exercise system
            var actual = sut.Builder;

            // Verify outcome
            Assert.Equal(expected, actual);
            // Teardown
        }
示例#13
0
        public void ConstructWithBuilderSetsRecursionDepthCorrectly()
        {
            // Arrange
            var dummyBuilder = new DelegatingSpecimenBuilder();
            var dummyHandler = new DelegatingRecursionHandler();

            // Act
#pragma warning disable 618
            var sut = new RecursionGuard(dummyBuilder);
#pragma warning restore 618
            // Assert
            Assert.Equal(1, sut.RecursionDepth);
        }
示例#14
0
        public void ConstructWithBuilderAndRecursionHandlerHasCorrectComparer()
        {
            // Fixture setup
            var dummyBuilder = new DelegatingSpecimenBuilder();
            var dummyHandler = new DelegatingRecursionHandler();
            var sut          = new RecursionGuard(dummyBuilder, dummyHandler);
            // Exercise system
            var actual = sut.Comparer;

            // Verify outcome
            Assert.Equal(EqualityComparer <object> .Default, actual);
            // Teardown
        }
示例#15
0
        public void ConstructWithBuilderAndHandlerAndComparerAndRecursionDepthHasCorrectRecursionDepth()
        {
            // Arrange
            var dummyBuilder  = new DelegatingSpecimenBuilder();
            var dummyHandler  = new DelegatingRecursionHandler();
            var dummyComparer = new DelegatingEqualityComparer();
            var expected      = 2;
            var sut           = new RecursionGuard(dummyBuilder, dummyHandler, dummyComparer, expected);
            // Act
            var actual = sut.RecursionDepth;

            // Assert
            Assert.Equal(expected, actual);
        }
示例#16
0
        public void ConstructWithBuilderAndHandlerAndComparerAndRecursionDepthHasCorrectRecursionDepth()
        {
            // Fixture setup
            var dummyBuilder  = new DelegatingSpecimenBuilder();
            var dummyHandler  = new DelegatingRecursionHandler();
            var dummyComparer = new DelegatingEqualityComparer();
            var expected      = 2;
            var sut           = new RecursionGuard(dummyBuilder, dummyHandler, dummyComparer, expected);
            // Exercise system
            var actual = sut.RecursionDepth;

            // Verify outcome
            Assert.Equal(expected, actual);
            // Teardown
        }
示例#17
0
        public void ConstructWithBuilderAndHandlerAndComparerHasCorrectComparer()
        {
            // Arrange
            var dummyBuilder = new DelegatingSpecimenBuilder();
            var dummyHandler = new DelegatingRecursionHandler();
            var expected     = new DelegatingEqualityComparer();

#pragma warning disable 618
            var sut = new RecursionGuard(dummyBuilder, dummyHandler, expected);
#pragma warning restore 618
            // Act
            var actual = sut.Comparer;
            // Assert
            Assert.Equal(expected, actual);
        }
示例#18
0
        public void ComposeRetainsRecursionDepth()
        {
            // Arrange
            var dummyBuilder  = new DelegatingSpecimenBuilder();
            var dummyHandler  = new DelegatingRecursionHandler();
            var dummyComparer = new DelegatingEqualityComparer();
            int expected      = 2;
            var sut           = new RecursionGuard(dummyBuilder, dummyHandler, dummyComparer, expected);
            // Act
            var actual = sut.Compose(new ISpecimenBuilder[0]);
            // Assert
            var rg = Assert.IsAssignableFrom <RecursionGuard>(actual);

            Assert.Equal(expected, rg.RecursionDepth);
        }
示例#19
0
        public void ComposeRetainsRecursionDepth()
        {
            // Fixture setup
            var dummyBuilder  = new DelegatingSpecimenBuilder();
            var dummyHandler  = new DelegatingRecursionHandler();
            var dummyComparer = new DelegatingEqualityComparer();
            int expected      = 2;
            var sut           = new RecursionGuard(dummyBuilder, dummyHandler, dummyComparer, expected);
            // Exercise system
            var actual = sut.Compose(new ISpecimenBuilder[0]);
            // Verify outcome
            var rg = Assert.IsAssignableFrom <RecursionGuard>(actual);

            Assert.Equal(expected, rg.RecursionDepth);
            // Teardown
        }
示例#20
0
        public void ConstructWithBuilderAndHandlerAndComparerHasCorrectComparer()
        {
            // Fixture setup
            var dummyBuilder = new DelegatingSpecimenBuilder();
            var dummyHandler = new DelegatingRecursionHandler();
            var expected     = new DelegatingEqualityComparer();

#pragma warning disable 618
            var sut = new RecursionGuard(dummyBuilder, dummyHandler, expected);
#pragma warning restore 618
            // Exercise system
            var actual = sut.Comparer;
            // Verify outcome
            Assert.Equal(expected, actual);
            // Teardown
        }
示例#21
0
        public void ComposeSingleItemReturnsCorrectResult()
        {
            // Arrange
            var dummyBuilder        = new DelegatingSpecimenBuilder();
            var dummyHandler        = new DelegatingRecursionHandler();
            var dummyComparer       = new DelegatingEqualityComparer();
            int dummyRecursionDepth = 2;
            var sut = new RecursionGuard(dummyBuilder, dummyHandler, dummyComparer, dummyRecursionDepth);
            // Act
            var expected = new DelegatingSpecimenBuilder();
            var actual   = sut.Compose(new[] { expected });
            // Assert
            var rg = Assert.IsAssignableFrom <RecursionGuard>(actual);

            Assert.Equal(expected, rg.Builder);
        }
示例#22
0
        public void ComposeSingleItemReturnsCorrectResult()
        {
            // Fixture setup
            var dummyBuilder        = new DelegatingSpecimenBuilder();
            var dummyHandler        = new DelegatingRecursionHandler();
            var dummyComparer       = new DelegatingEqualityComparer();
            int dummyRecursionDepth = 2;
            var sut = new RecursionGuard(dummyBuilder, dummyHandler, dummyComparer, dummyRecursionDepth);
            // Exercise system
            var expected = new DelegatingSpecimenBuilder();
            var actual   = sut.Compose(new[] { expected });
            // Verify outcome
            var rg = Assert.IsAssignableFrom <RecursionGuard>(actual);

            Assert.Equal(expected, rg.Builder);
            // Teardown
        }
示例#23
0
        public void ComposeReturnsCorrectResult()
        {
            // Arrange
            var       dummyBuilder        = new DelegatingSpecimenBuilder();
            var       dummyHandler        = new DelegatingRecursionHandler();
            var       dummyComparer       = new DelegatingEqualityComparer();
            const int dummyRecursionDepth = 2;
            var       sut = new RecursionGuard(dummyBuilder, dummyHandler, dummyComparer, dummyRecursionDepth);
            // Act
            var expectedBuilders = new[]
            {
                new DelegatingSpecimenBuilder(),
                new DelegatingSpecimenBuilder(),
                new DelegatingSpecimenBuilder()
            };
            var actual = sut.Compose(expectedBuilders);
            // Assert
            var rg        = Assert.IsAssignableFrom <RecursionGuard>(actual);
            var composite = Assert.IsAssignableFrom <CompositeSpecimenBuilder>(rg.Builder);

            Assert.True(expectedBuilders.SequenceEqual(composite));
        }
示例#24
0
        public void CreateReturnsResultFromInjectedHandlerWhenRequestIsMatched()
        {
            // Fixture setup
            var builder = new DelegatingSpecimenBuilder()
            {
                OnCreate = (r, ctx) => ctx.Resolve(r)
            };

            var request     = new object();
            var expected    = new object();
            var handlerStub = new DelegatingRecursionHandler
            {
                OnHandleRecursiveRequest = (r, rs) =>
                {
                    Assert.Equal(request, r);
                    Assert.NotNull(rs);
                    return(expected);
                }
            };

            var comparer = new DelegatingEqualityComparer
            {
                OnEquals = (x, y) => true
            };

            var sut = new RecursionGuard(builder, handlerStub, comparer, 1);

            var context = new DelegatingSpecimenContext();

            context.OnResolve = r => sut.Create(r, context);
            // Exercise system
            var actual = sut.Create(request, context);

            // Verify outcome
            Assert.Equal(expected, actual);
            // Teardown
        }