Example #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="RecursionGuard" />
        /// class.
        /// </summary>
        /// <param name="builder">The intercepted builder to decorate.</param>
        /// <param name="recursionHandler">
        /// An <see cref="IRecursionHandler" /> that will handle a recursion
        /// situation, if one is detected.
        /// </param>
        /// <param name="comparer">
        /// An <see cref="IEqualityComparer" /> implementation to use when
        /// comparing requests to determine recursion.
        /// </param>
        /// <param name="recursionDepth">The recursion depth at which the request will be treated as a recursive
        /// request</param>
        /// <exception cref="System.ArgumentNullException">
        /// builder
        /// or
        /// recursionHandler
        /// or
        /// comparer
        /// </exception>
        public RecursionGuard(
            ISpecimenBuilder builder,
            IRecursionHandler recursionHandler,
            IEqualityComparer comparer,
            int recursionDepth)
        {
            if (builder == null)
            {
                throw new ArgumentNullException("builder");
            }
            if (recursionHandler == null)
            {
                throw new ArgumentNullException("recursionHandler");
            }
            if (comparer == null)
            {
                throw new ArgumentNullException("comparer");
            }

            this.monitoredRequests = new Stack <object>();
            this.builder           = builder;
            this.recursionHandler  = recursionHandler;
            this.comparer          = comparer;
            this.recursionDepth    = recursionDepth;
        }
Example #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="RecursionGuard" />
        /// class.
        /// </summary>
        /// <param name="builder">The intercepted builder to decorate.</param>
        /// <param name="recursionHandler">
        /// An <see cref="IRecursionHandler" /> that will handle a recursion
        /// situation, if one is detected.
        /// </param>
        /// <param name="comparer">
        /// An <see cref="IEqualityComparer" /> implementation to use when
        /// comparing requests to determine recursion.
        /// </param>
        /// <param name="recursionDepth">The recursion depth at which the request will be treated as a recursive
        /// request.</param>
        /// <exception cref="System.ArgumentNullException">
        /// builder
        /// or
        /// recursionHandler
        /// or
        /// comparer
        /// </exception>
        /// <exception cref="System.ArgumentOutOfRangeException">recursionDepth is less than one.</exception>
        public RecursionGuard(
            ISpecimenBuilder builder,
            IRecursionHandler recursionHandler,
            IEqualityComparer comparer,
            int recursionDepth)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }
            if (recursionHandler == null)
            {
                throw new ArgumentNullException(nameof(recursionHandler));
            }
            if (comparer == null)
            {
                throw new ArgumentNullException(nameof(comparer));
            }

            if (recursionDepth < 1)
            {
                throw new ArgumentOutOfRangeException(nameof(recursionDepth), "Recursion depth must be greater than 0.");
            }

            this.builder          = builder;
            this.recursionHandler = recursionHandler;
            this.comparer         = comparer;
            this.recursionDepth   = recursionDepth;
        }
Example #3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RecursionGuard" />
 /// class.
 /// </summary>
 /// <param name="builder">The intercepted builder to decorate.</param>
 /// <param name="recursionHandler">
 /// An <see cref="IRecursionHandler" /> that will handle a recursion
 /// situation, if one is detected.
 /// </param>
 public RecursionGuard(
     ISpecimenBuilder builder,
     IRecursionHandler recursionHandler)
     : this(builder, 
         recursionHandler,
         EqualityComparer<object>.Default)
 {
 }
Example #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RecursionGuard" />
 /// class.
 /// </summary>
 /// <param name="builder">The intercepted builder to decorate.</param>
 /// <param name="recursionHandler">
 /// An <see cref="IRecursionHandler" /> that will handle a recursion
 /// situation, if one is detected.
 /// </param>
 public RecursionGuard(
     ISpecimenBuilder builder,
     IRecursionHandler recursionHandler)
     : this(
         builder,
         recursionHandler,
         EqualityComparer <object> .Default)
 {
 }
Example #5
0
 public RecursionGuard(
     ISpecimenBuilder builder,
     IRecursionHandler recursionHandler,
     IEqualityComparer comparer)
     : this(
         builder,
         recursionHandler,
         comparer,
         1)
 {
 }
Example #6
0
        public void ConstructWithBuilderAndRecursionHandlerHasCorrectHandler()
        {
            // Arrange
            var dummyBuilder = new DelegatingSpecimenBuilder();
            var expected     = new DelegatingRecursionHandler();
            var sut          = new RecursionGuard(dummyBuilder, expected);
            // Act
            IRecursionHandler actual = sut.RecursionHandler;

            // Assert
            Assert.Equal(expected, actual);
        }
        public void ConstructWithBuilderAndRecursionHandlerHasCorrectHandler()
        {
            // Fixture setup
            var dummyBuilder = new DelegatingSpecimenBuilder();
            var expected     = new DelegatingRecursionHandler();
            var sut          = new RecursionGuard(dummyBuilder, expected);
            // Exercise system
            IRecursionHandler actual = sut.RecursionHandler;

            // Verify outcome
            Assert.Equal(expected, actual);
            // Teardown
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="RecursionGuard" />
        /// class.
        /// </summary>
        /// <param name="builder">The intercepted builder to decorate.</param>
        /// <param name="recursionHandler">
        /// An <see cref="IRecursionHandler" /> that will handle a recursion
        /// situation, if one is detected.
        /// </param>
        /// <param name="comparer">
        /// An <see cref="IEqualityComparer" /> implementation to use when
        /// comparing requests to determine recursion.
        /// </param>
        /// <param name="recursionDepth">The recursion depth at which the request will be treated as a recursive
        /// request</param>
        /// <exception cref="System.ArgumentNullException">
        /// builder
        /// or
        /// recursionHandler
        /// or
        /// comparer
        /// </exception>
        public RecursionGuard(
            ISpecimenBuilder builder,
            IRecursionHandler recursionHandler,
            IEqualityComparer comparer,
            int recursionDepth)
        {
            if (builder == null)
                throw new ArgumentNullException("builder");
            if (recursionHandler == null)
                throw new ArgumentNullException("recursionHandler");
            if (comparer == null)
                throw new ArgumentNullException("comparer");

            this.monitoredRequests = new Stack<object>();
            this.builder = builder;
            this.recursionHandler = recursionHandler;
            this.comparer = comparer;
            this.recursionDepth = recursionDepth;
        }
 public RecursionGuard(
     ISpecimenBuilder builder,
     IRecursionHandler recursionHandler,
     IEqualityComparer comparer)
     : this(
     builder, 
     recursionHandler, 
     comparer, 
     1)
 {
 }        
Example #10
0
        /// <summary>
        /// Initializes a new instance of the <see cref="RecursionGuard" />
        /// class.
        /// </summary>
        /// <param name="builder">The intercepted builder to decorate.</param>
        /// <param name="recursionHandler">
        /// An <see cref="IRecursionHandler" /> that will handle a recursion
        /// situation, if one is detected.
        /// </param>
        /// <param name="comparer">
        /// An <see cref="IEqualityComparer" /> implementation to use when
        /// comparing requests to determine recursion.
        /// </param>
        /// <param name="recursionDepth">The recursion depth at which the request will be treated as a recursive
        /// request.</param>
        /// <exception cref="System.ArgumentNullException">
        /// builder
        /// or
        /// recursionHandler
        /// or
        /// comparer
        /// </exception>
        /// <exception cref="System.ArgumentOutOfRangeException">recursionDepth is less than one.</exception>
        public RecursionGuard(
            ISpecimenBuilder builder,
            IRecursionHandler recursionHandler,
            IEqualityComparer comparer,
            int recursionDepth)
        {
            if (builder == null)
                throw new ArgumentNullException("builder");
            if (recursionHandler == null)
                throw new ArgumentNullException("recursionHandler");
            if (comparer == null)
                throw new ArgumentNullException("comparer");

            if (recursionDepth < 1)
                throw new ArgumentOutOfRangeException("recursionDepth", "Recursion depth must be greater than 0.");

            this.builder = builder;
            this.recursionHandler = recursionHandler;
            this.comparer = comparer;
            this.recursionDepth = recursionDepth;
        }