Beispiel #1
0
        public void CreateWillCorrectRaiseSpecimenCreatedInCompositeRequest()
        {
            // Arrange
            object request         = "The request";
            object subRequest      = "Some sub request";
            var    createdSpecimen = new object();

            var spy      = new List <SpecimenCreatedEventArgs>();
            var builder2 = new DelegatingSpecimenBuilder {
                OnCreate = (r, c) => r == request?c.Resolve(subRequest) : new NoSpecimen()
            };
            var builder3 = new DelegatingSpecimenBuilder {
                OnCreate = (r, c) => r == subRequest ? createdSpecimen : new NoSpecimen()
            };
            var compBuilder = new CompositeSpecimenBuilder(builder2, builder3);

            var sut = new DelegatingTracingBuilder(compBuilder);

            sut.SpecimenCreated += (sender, e) => spy.Add(e);

            var container = new SpecimenContext(sut);

            // Act
            sut.Create(request, container);
            // Assert
            Assert.Equal(2, spy.Count);
            Assert.Equal(createdSpecimen, spy[0].Specimen);
            Assert.Equal(2, spy[0].Depth);
            Assert.Equal(createdSpecimen, spy[1].Specimen);
            Assert.Equal(1, spy[1].Depth);
        }
Beispiel #2
0
        public void CreateWillCorrectlyRaiseSpecimenRequestedInCompositeRequest()
        {
            // Fixture setup
            object requestedObject = "The request";
            object subRequest      = "Some sub request";

            var spy      = new List <RequestTraceEventArgs>();
            var builder2 = new DelegatingSpecimenBuilder {
                OnCreate = (r, c) => r == requestedObject?c.Resolve(subRequest) : new NoSpecimen()
            };
            var builder3 = new DelegatingSpecimenBuilder {
                OnCreate = (r, c) => r == subRequest ? new object() : new NoSpecimen()
            };
            var compBuilder = new CompositeSpecimenBuilder(builder2, builder3);

            var sut = new DelegatingTracingBuilder(compBuilder);

            sut.SpecimenRequested += (sender, e) => spy.Add(e);

            var container = new SpecimenContext(sut);

            // Exercise system
            sut.Create(requestedObject, container);
            // Verify outcome
            Assert.Equal(2, spy.Count);
            Assert.Equal(subRequest, spy[1].Request);
            Assert.Equal(2, spy[1].Depth);
            // Teardown
        }
Beispiel #3
0
        /// <summary>
        /// Registers that a writable property or field should be assigned a
        /// specific value as part of specimen post-processing.
        /// </summary>
        /// <typeparam name="TProperty">
        /// The type of the property of field.
        /// </typeparam>
        /// <param name="propertyPicker">
        /// An expression that identifies the property or field that will have
        /// <paramref name="value"/> assigned.
        /// </param>
        /// <param name="value">
        /// The value to assign to the property or field identified by
        /// <paramref name="propertyPicker"/>.
        /// </param>
        /// <returns>
        /// An <see cref="IPostprocessComposer{T}"/> which can be used to
        /// further customize the post-processing of created specimens.
        /// </returns>
        public IPostprocessComposer <T> With <TProperty>(
            Expression <Func <T, TProperty> > propertyPicker, TProperty value)
        {
            var graphWithoutSeedIgnoringRelay =
                this.WithoutSeedIgnoringRelay();

            var container = FindContainer(graphWithoutSeedIgnoringRelay);

            var graphWithProperty = graphWithoutSeedIgnoringRelay.ReplaceNodes(
                with: n => n.Compose(
                    new ISpecimenBuilder[]
            {
                new Postprocessor <T>(
                    CompositeSpecimenBuilder.ComposeIfMultiple(n),
                    new BindingCommand <T, TProperty>(propertyPicker, value),
                    CreateSpecification()),
                new SeedIgnoringRelay()
            }),
                when: container.Equals);

            return((NodeComposer <T>)graphWithProperty.ReplaceNodes(
                       with: n => n.Compose(
                           new []
            {
                new Omitter(
                    new EqualRequestSpecification(
                        propertyPicker.GetWritableMember().Member,
                        new MemberInfoEqualityComparer()))
            }
                           .Concat(n)),
                       when: n => n is NodeComposer <T>));
        }
Beispiel #4
0
        public void CreateDoubleMixedParameterizedTypeWithNumberBasedStringGeneratorObsolete()
        {
            // Fixture setup
            var intGenerator = new Int32SequenceGenerator();
            var builder      = new CompositeSpecimenBuilder(
                intGenerator,
                new StringGenerator(() => intGenerator.CreateAnonymous()),
                new Int64SequenceGenerator(),
                new DecimalSequenceGenerator(),
                new BooleanSwitch(),
                new GuidGenerator(),
                new MethodInvoker(new ModestConstructorQuery()),
                new ParameterRequestRelay(),
                new StringSeedRelay(),
                new SeedIgnoringRelay());
            var container = new SpecimenContext(builder);
            // Exercise system
            var result = (TripleParameterType <int, string, int>)container.Resolve(typeof(TripleParameterType <int, string, int>));

            // Verify outcome
            Assert.Equal(1, result.Parameter1);
            Assert.Equal("parameter22", result.Parameter2);
            Assert.Equal(3, result.Parameter3);
            // Teardown
        }
Beispiel #5
0
        public void CreateWillReturnNoSpecimenIfAllBuildersReturnNoSpecimen()
        {
            // Fixture setup
            var builders = new ISpecimenBuilder[]
            {
                new DelegatingSpecimenBuilder {
                    OnCreate = (r, c) => new NoSpecimen()
                },
                new DelegatingSpecimenBuilder {
                    OnCreate = (r, c) => new NoSpecimen()
                },
                new DelegatingSpecimenBuilder {
                    OnCreate = (r, c) => new NoSpecimen()
                }
            };
            var sut = new CompositeSpecimenBuilder(builders);
            // Exercise system
            var anonymousRequest = new object();
            var dummyContainer   = new DelegatingSpecimenContext();
            var result           = sut.Create(anonymousRequest, dummyContainer);
            // Verify outcome
            var expected = new NoSpecimen(anonymousRequest);

            Assert.Equal(expected, result);
            // Teardown
        }
        public void FromSingleArgFuncReturnsCorrectResult()
        {
            // Arrange
            var node = new CompositeSpecimenBuilder(
                new DelegatingSpecimenBuilder(),
                SpecimenBuilderNodeFactory.CreateComposer <string>(),
                SpecimenBuilderNodeFactory.CreateComposer <ulong>(),
                SpecimenBuilderNodeFactory.CreateComposer <string>(),
                new DelegatingSpecimenBuilder());
            var sut = new CompositeNodeComposer <string>(node);
            Func <int, string> f = i => i.ToString();
            // Act
            var actual = sut.FromFactory(f);
            // Assert
            var expected = new CompositeNodeComposer <string>(
                new CompositeSpecimenBuilder(
                    new DelegatingSpecimenBuilder(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <string>().FromFactory(f),
                    SpecimenBuilderNodeFactory.CreateComposer <ulong>(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <string>().FromFactory(f),
                    new DelegatingSpecimenBuilder()));
            var n = Assert.IsAssignableFrom <ISpecimenBuilderNode>(actual);

            Assert.True(expected.GraphEquals(n, new NodeComparer()));
        }
        public void FromQuadrupleArgFuncReturnsCorrectResult()
        {
            // Arrange
            var node = new CompositeSpecimenBuilder(
                new DelegatingSpecimenBuilder(),
                SpecimenBuilderNodeFactory.CreateComposer <Version>(),
                SpecimenBuilderNodeFactory.CreateComposer <Guid>(),
                SpecimenBuilderNodeFactory.CreateComposer <Version>(),
                new DelegatingSpecimenBuilder());
            var sut = new CompositeNodeComposer <Version>(node);
            Func <int, int, int, int, Version> f =
                (mj, mn, b, r) => new Version(mj, mn, b, r);
            // Act
            var actual = sut.FromFactory(f);
            // Assert
            var expected = new CompositeNodeComposer <Version>(
                new CompositeSpecimenBuilder(
                    new DelegatingSpecimenBuilder(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <Version>().FromFactory(f),
                    SpecimenBuilderNodeFactory.CreateComposer <Guid>(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <Version>().FromFactory(f),
                    new DelegatingSpecimenBuilder()));
            var n = Assert.IsAssignableFrom <ISpecimenBuilderNode>(actual);

            Assert.True(expected.GraphEquals(n, new NodeComparer()));
        }
        /// <summary>
        ///     Add the customization for a NullBuilder to the given <see cref="IFixture" />.
        /// </summary>
        /// <param name="fixture">
        ///     The <see cref="IFixture" /> to be customized.
        /// </param>
        public void Customize(IFixture fixture)
        {
            if (fixture == null)
            {
                throw new ArgumentNullException(nameof(fixture));
            }

            var fixedBuilder = new NullBuilder( );

            var types = new []
            {
                TargetType,
                RegisteredType
            };

            var specimenBuilders = from t in types
                                   select SpecimenBuilderNodeFactory.CreateTypedNode(t,
                                                                                     fixedBuilder)
                                   as ISpecimenBuilder;

            var builder = new CompositeSpecimenBuilder(specimenBuilders);

            fixture.Customizations
            .Insert(0,
                    builder);
        }
        public void FromSpecimenBuilderFactoryReturnsCorrectResult()
        {
            // Fixture setup
            var node = new CompositeSpecimenBuilder(
                new DelegatingSpecimenBuilder(),
                SpecimenBuilderNodeFactory.CreateComposer <decimal>(),
                SpecimenBuilderNodeFactory.CreateComposer <int>(),
                SpecimenBuilderNodeFactory.CreateComposer <decimal>(),
                new DelegatingSpecimenBuilder());
            var sut     = new CompositeNodeComposer <decimal>(node);
            var factory = new DelegatingSpecimenBuilder();
            // Exercise system
            var actual = sut.FromFactory(factory);
            // Verify outcome
            var expected = new CompositeNodeComposer <decimal>(
                new CompositeSpecimenBuilder(
                    new DelegatingSpecimenBuilder(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <decimal>().FromFactory(factory),
                    SpecimenBuilderNodeFactory.CreateComposer <int>(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <decimal>().FromFactory(factory),
                    new DelegatingSpecimenBuilder()));
            var n = Assert.IsAssignableFrom <ISpecimenBuilderNode>(actual);

            Assert.True(expected.GraphEquals(n, new NodeComparer()));
            // Teardown
        }
Beispiel #10
0
        public void ComposeComplexObjectWithAutoPropertiesAndSomeCustomizations()
        {
            // Fixture setup
            var builder = new CompositeSpecimenBuilder(
                new Composer <DoublePropertyHolder <long, long> >()
                .With(x => x.Property2, 43)
                .WithAutoProperties()
                .Compose(),
                new Composer <DoublePropertyHolder <int, string> >()
                .OmitAutoProperties()
                .With(x => x.Property1)
                .Compose(),
                new Composer <DoublePropertyHolder <DoublePropertyHolder <long, long>, DoublePropertyHolder <int, string> > >()
                .WithAutoProperties()
                .Compose(),
                Scenario.CreateCoreBuilder());
            // Exercise system
            var result = new SpecimenContext(builder).CreateAnonymous <DoublePropertyHolder <DoublePropertyHolder <long, long>, DoublePropertyHolder <int, string> > >();

            // Verify outcome
            Assert.Equal(1, result.Property1.Property1);
            Assert.Equal(43, result.Property1.Property2);
            Assert.Equal(1, result.Property2.Property1);
            Assert.Null(result.Property2.Property2);
            // Teardown
        }
        /// <summary>Composes the supplied builders.</summary>
        /// <param name="builders">The builders to compose.</param>
        /// <returns>
        /// A new <see cref="ISpecimenBuilderNode" /> instance containing
        /// <paramref name="builders" /> as child nodes.
        /// </returns>
        public ISpecimenBuilderNode Compose(IEnumerable <ISpecimenBuilder> builders)
        {
            var composedBuilder =
                CompositeSpecimenBuilder.ComposeIfMultiple(builders);

            return(new ResidueCollectorNode(composedBuilder));
        }
        /// <summary>Composes the supplied builders.</summary>
        /// <param name="builders">The builders to compose.</param>
        /// <returns>
        /// A new <see cref="ISpecimenBuilderNode" /> instance containing
        /// <paramref name="builders" /> as child nodes.
        /// </returns>
        public ISpecimenBuilderNode Compose(IEnumerable <ISpecimenBuilder> builders)
        {
            var composedBuilder =
                CompositeSpecimenBuilder.ComposeIfMultiple(builders);

            return(new CustomizationNode(composedBuilder));
        }
Beispiel #13
0
        public void CreateWillInvokeBuilderWithCorrectContainer()
        {
            // Arrange
            var expectedContainer = new DelegatingSpecimenContext();

            var mockVerified = false;
            var builderMock  = new DelegatingSpecimenBuilder();

            builderMock.OnCreate = (r, c) =>
            {
                if (expectedContainer != c)
                {
                    throw new ArgumentException("Invalid context");
                }
                mockVerified = true;
                return(new object());
            };

            var sut = new CompositeSpecimenBuilder(builderMock);
            // Act
            var dummyRequest = new object();

            sut.Create(dummyRequest, expectedContainer);
            // Assert
            Assert.True(mockVerified, "Mock verification");
        }
        public void WithSingleArgValueFactoryReturnsCorrectResult(string value)
        {
            // Arrange
            var node = new CompositeSpecimenBuilder(
                new DelegatingSpecimenBuilder(),
                SpecimenBuilderNodeFactory.CreateComposer <PropertyHolder <string> >(),
                SpecimenBuilderNodeFactory.CreateComposer <Version>(),
                SpecimenBuilderNodeFactory.CreateComposer <PropertyHolder <string> >(),
                new DelegatingSpecimenBuilder());
            var sut = new CompositeNodeComposer <PropertyHolder <string> >(node);
            Func <string, string> valueFactory = _ => value;
            // Act
            var actual = sut.With(x => x.Property, valueFactory);
            // Assert
            var expected = new CompositeNodeComposer <PropertyHolder <string> >(
                new CompositeSpecimenBuilder(
                    new DelegatingSpecimenBuilder(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <PropertyHolder <string> >().With(x => x.Property, valueFactory),
                    SpecimenBuilderNodeFactory.CreateComposer <Version>(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <PropertyHolder <string> >().With(x => x.Property, valueFactory),
                    new DelegatingSpecimenBuilder()));
            var n = Assert.IsAssignableFrom <ISpecimenBuilderNode>(actual);

            Assert.True(expected.GraphEquals(n, new NodeComparer()));
        }
        public void FromSpecimenBuilderFactoryReturnsCorrectResult()
        {
            // Arrange
            var node = new CompositeSpecimenBuilder(
                new DelegatingSpecimenBuilder(),
                SpecimenBuilderNodeFactory.CreateComposer <decimal>(),
                SpecimenBuilderNodeFactory.CreateComposer <int>(),
                SpecimenBuilderNodeFactory.CreateComposer <decimal>(),
                new DelegatingSpecimenBuilder());
            var sut     = new CompositeNodeComposer <decimal>(node);
            var factory = new DelegatingSpecimenBuilder();
            // Act
            var actual = sut.FromFactory(factory);
            // Assert
            var expected = new CompositeNodeComposer <decimal>(
                new CompositeSpecimenBuilder(
                    new DelegatingSpecimenBuilder(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <decimal>().FromFactory(factory),
                    SpecimenBuilderNodeFactory.CreateComposer <int>(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <decimal>().FromFactory(factory),
                    new DelegatingSpecimenBuilder()));
            var n = Assert.IsAssignableFrom <ISpecimenBuilderNode>(actual);

            Assert.True(expected.GraphEquals(n, new NodeComparer()));
        }
        public void FromDoubleArgFuncReturnsCorrectResult()
        {
            // Fixture setup
            var node = new CompositeSpecimenBuilder(
                new DelegatingSpecimenBuilder(),
                SpecimenBuilderNodeFactory.CreateComposer <Version>(),
                SpecimenBuilderNodeFactory.CreateComposer <string>(),
                SpecimenBuilderNodeFactory.CreateComposer <Version>(),
                new DelegatingSpecimenBuilder());
            var sut = new CompositeNodeComposer <Version>(node);
            Func <int, int, Version> f = (mj, mn) => new Version(mj, mn);
            // Exercise system
            var actual = sut.FromFactory(f);
            // Verify outcome
            var expected = new CompositeNodeComposer <Version>(
                new CompositeSpecimenBuilder(
                    new DelegatingSpecimenBuilder(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <Version>().FromFactory(f),
                    SpecimenBuilderNodeFactory.CreateComposer <string>(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <Version>().FromFactory(f),
                    new DelegatingSpecimenBuilder()));
            var n = Assert.IsAssignableFrom <ISpecimenBuilderNode>(actual);

            Assert.True(expected.GraphEquals(n, new NodeComparer()));
            // Teardown
        }
        public void FromNoArgFuncReturnsCorrectResult()
        {
            // Arrange
            var node = new CompositeSpecimenBuilder(
                new DelegatingSpecimenBuilder(),
                SpecimenBuilderNodeFactory.CreateComposer <Guid>(),
                SpecimenBuilderNodeFactory.CreateComposer <float>(),
                SpecimenBuilderNodeFactory.CreateComposer <Guid>(),
                new DelegatingSpecimenBuilder());
            var         sut = new CompositeNodeComposer <Guid>(node);
            Func <Guid> f   = () => Guid.Empty;
            // Act
            var actual = sut.FromFactory(f);
            // Assert
            var expected = new CompositeNodeComposer <Guid>(
                new CompositeSpecimenBuilder(
                    new DelegatingSpecimenBuilder(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <Guid>().FromFactory(f),
                    SpecimenBuilderNodeFactory.CreateComposer <float>(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <Guid>().FromFactory(f),
                    new DelegatingSpecimenBuilder()));
            var n = Assert.IsAssignableFrom <ISpecimenBuilderNode>(actual);

            Assert.True(expected.GraphEquals(n, new NodeComparer()));
        }
        public void DoReturnsCorrectResult()
        {
            // Fixture setup
            var node = new CompositeSpecimenBuilder(
                new DelegatingSpecimenBuilder(),
                SpecimenBuilderNodeFactory.CreateComposer <AppDomainSetup>(),
                SpecimenBuilderNodeFactory.CreateComposer <bool>(),
                SpecimenBuilderNodeFactory.CreateComposer <AppDomainSetup>(),
                new DelegatingSpecimenBuilder());
            var sut = new CompositeNodeComposer <AppDomainSetup>(node);
            Action <AppDomainSetup> a =
                ads => ads.DisallowApplicationBaseProbing = false;
            // Exercise system
            var actual = sut.Do(a);
            // Verify outcome
            var expected = new CompositeNodeComposer <AppDomainSetup>(
                new CompositeSpecimenBuilder(
                    new DelegatingSpecimenBuilder(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <AppDomainSetup>().Do(a),
                    SpecimenBuilderNodeFactory.CreateComposer <bool>(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <AppDomainSetup>().Do(a),
                    new DelegatingSpecimenBuilder()));
            var n = Assert.IsAssignableFrom <ISpecimenBuilderNode>(actual);

            Assert.True(expected.GraphEquals(n, new NodeComparer()));
            // Teardown
        }
        public void FromTripleArgFuncReturnsCorrectResult()
        {
            // Arrange
            var node = new CompositeSpecimenBuilder(
                new DelegatingSpecimenBuilder(),
                SpecimenBuilderNodeFactory.CreateComposer <long>(),
                SpecimenBuilderNodeFactory.CreateComposer <Version>(),
                SpecimenBuilderNodeFactory.CreateComposer <long>(),
                new DelegatingSpecimenBuilder());
            var sut = new CompositeNodeComposer <long>(node);
            Func <long, int, short, long> f = (x, y, z) => x;
            // Act
            var actual = sut.FromFactory(f);
            // Assert
            var expected = new CompositeNodeComposer <long>(
                new CompositeSpecimenBuilder(
                    new DelegatingSpecimenBuilder(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <long>().FromFactory(f),
                    SpecimenBuilderNodeFactory.CreateComposer <Version>(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <long>().FromFactory(f),
                    new DelegatingSpecimenBuilder()));
            var n = Assert.IsAssignableFrom <ISpecimenBuilderNode>(actual);

            Assert.True(expected.GraphEquals(n, new NodeComparer()));
        }
        public void OmitAutoPropertiesAfterAddingAutoPropertiesReturnsCorrectResult()
        {
            // Fixture setup
            var node = new CompositeSpecimenBuilder(
                new DelegatingSpecimenBuilder(),
                SpecimenBuilderNodeFactory.CreateComposer <Version>(),
                SpecimenBuilderNodeFactory.CreateComposer <string>(),
                SpecimenBuilderNodeFactory.CreateComposer <Version>(),
                new DelegatingSpecimenBuilder());
            var sut = new CompositeNodeComposer <Version>(node);
            // Exercise system
            var actual = sut.WithAutoProperties().OmitAutoProperties();
            // Verify outcome
            var expected = new CompositeNodeComposer <Version>(
                new CompositeSpecimenBuilder(
                    new DelegatingSpecimenBuilder(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <Version>().WithAutoProperties().OmitAutoProperties(),
                    SpecimenBuilderNodeFactory.CreateComposer <string>(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <Version>().WithAutoProperties().OmitAutoProperties(),
                    new DelegatingSpecimenBuilder()));
            var n = Assert.IsAssignableFrom <ISpecimenBuilderNode>(actual);

            Assert.True(expected.GraphEquals(n, new NodeComparer()));
            // Teardown
        }
        public void DoReturnsCorrectResult()
        {
            // Arrange
            var node = new CompositeSpecimenBuilder(
                new DelegatingSpecimenBuilder(),
                SpecimenBuilderNodeFactory.CreateComposer <ConcreteType>(),
                SpecimenBuilderNodeFactory.CreateComposer <bool>(),
                SpecimenBuilderNodeFactory.CreateComposer <ConcreteType>(),
                new DelegatingSpecimenBuilder());
            var sut = new CompositeNodeComposer <ConcreteType>(node);
            Action <ConcreteType> a =
                ads => ads.Property1 = null;
            // Act
            var actual = sut.Do(a);
            // Assert
            var expected = new CompositeNodeComposer <ConcreteType>(
                new CompositeSpecimenBuilder(
                    new DelegatingSpecimenBuilder(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <ConcreteType>().Do(a),
                    SpecimenBuilderNodeFactory.CreateComposer <bool>(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <ConcreteType>().Do(a),
                    new DelegatingSpecimenBuilder()));
            var n = Assert.IsAssignableFrom <ISpecimenBuilderNode>(actual);

            Assert.True(expected.GraphEquals(n, new NodeComparer()));
        }
        public void WithExplicitValueReturnsCorrectResult(string value)
        {
            // Fixture setup
            var node = new CompositeSpecimenBuilder(
                new DelegatingSpecimenBuilder(),
                SpecimenBuilderNodeFactory.CreateComposer <PropertyHolder <string> >(),
                SpecimenBuilderNodeFactory.CreateComposer <Version>(),
                SpecimenBuilderNodeFactory.CreateComposer <PropertyHolder <string> >(),
                new DelegatingSpecimenBuilder());
            var sut = new CompositeNodeComposer <PropertyHolder <string> >(node);
            // Exercise system
            var actual = sut.With(x => x.Property, value);
            // Verify outcome
            var expected = new CompositeNodeComposer <PropertyHolder <string> >(
                new CompositeSpecimenBuilder(
                    new DelegatingSpecimenBuilder(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <PropertyHolder <string> >().With(x => x.Property, value),
                    SpecimenBuilderNodeFactory.CreateComposer <Version>(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <PropertyHolder <string> >().With(x => x.Property, value),
                    new DelegatingSpecimenBuilder()));
            var n = Assert.IsAssignableFrom <ISpecimenBuilderNode>(actual);

            Assert.True(expected.GraphEquals(n, new NodeComparer()));
            // Teardown
        }
        /// <summary>Composes the supplied builders.</summary>
        /// <param name="builders">The builders to compose.</param>
        /// <returns>
        /// A new <see cref="ISpecimenBuilderNode" /> instance containing
        /// <paramref name="builders" /> as child nodes.
        /// </returns>
        public ISpecimenBuilderNode Compose(IEnumerable <ISpecimenBuilder> builders)
        {
            var composedBuilder =
                CompositeSpecimenBuilder.ComposeIfMultiple(builders);

            return(new AutoPropertiesTarget(composedBuilder));
        }
        public void WithoutReturnsCorrectResult()
        {
            // Fixture setup
            var node = new CompositeSpecimenBuilder(
                new DelegatingSpecimenBuilder(),
                SpecimenBuilderNodeFactory.CreateComposer <FieldHolder <short> >(),
                SpecimenBuilderNodeFactory.CreateComposer <PropertyHolder <int> >(),
                SpecimenBuilderNodeFactory.CreateComposer <FieldHolder <short> >(),
                new DelegatingSpecimenBuilder());
            var sut = new CompositeNodeComposer <FieldHolder <short> >(node);
            // Exercise system
            var actual = sut.Without(x => x.Field);
            // Verify outcome
            var expected = new CompositeNodeComposer <FieldHolder <short> >(
                new CompositeSpecimenBuilder(
                    new DelegatingSpecimenBuilder(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <FieldHolder <short> >().Without(x => x.Field),
                    SpecimenBuilderNodeFactory.CreateComposer <PropertyHolder <int> >(),
                    (ISpecimenBuilder)SpecimenBuilderNodeFactory.CreateComposer <FieldHolder <short> >().Without(x => x.Field),
                    new DelegatingSpecimenBuilder()));
            var n = Assert.IsAssignableFrom <ISpecimenBuilderNode>(actual);

            Assert.True(expected.GraphEquals(n, new NodeComparer()));
            // Teardown
        }
Beispiel #25
0
        public void CreateWillTrackCreatedSpecimensComposite()
        {
            // Fixture setup
            object requestedObject = "The request";
            object subRequest      = "Some sub request";
            object createdSpecimen = Guid.NewGuid();
            var    spy             = new List <object>();
            var    builder2        = new DelegatingSpecimenBuilder {
                OnCreate = (r, c) => r == requestedObject?c.Resolve(subRequest) : new NoSpecimen()
            };
            var builder3 = new DelegatingSpecimenBuilder {
                OnCreate = (r, c) => r == subRequest ? createdSpecimen : new NoSpecimen()
            };
            var compBuilder = new CompositeSpecimenBuilder(builder2, builder3);

            var sut = new DelegatingTracingBuilder(compBuilder);

            sut.SpecimenCreated += (sender, e) => spy.Add(e.Specimen);
            var container = new SpecimenContext(sut);

            // Exercise system
            sut.Create(requestedObject, container);

            // Verify outcome
            Assert.Equal(2, spy.Count);
            Assert.Equal(createdSpecimen, spy[0]);
            Assert.Equal(createdSpecimen, spy[1]);

            // Teardown
        }
Beispiel #26
0
        public void GraphEqualsNullFirstThrows()
        {
            var dummyNode = new CompositeSpecimenBuilder();

            Assert.Throws <ArgumentNullException>(() =>
                                                  SpecimenBuilderNode.GraphEquals(null, dummyNode));
        }
        /// <summary>Composes the supplied builders.</summary>
        /// <param name="builders">The builders to compose.</param>
        /// <returns>
        /// A new <see cref="ISpecimenBuilderNode" /> instance containing
        /// <paramref name="builders" /> as child nodes.
        /// </returns>
        public ISpecimenBuilderNode Compose(IEnumerable <ISpecimenBuilder> builders)
        {
            var composedBuilder =
                CompositeSpecimenBuilder.ComposeIfMultiple(builders);

            return(new BehaviorRoot(composedBuilder));
        }
        public void CreateWillReturnNoSpecimenIfAllBuildersReturnNoSpecimen()
        {
            // Arrange
            var builders = new ISpecimenBuilder[]
            {
                new DelegatingSpecimenBuilder {
                    OnCreate = (r, c) => new NoSpecimen()
                },
                new DelegatingSpecimenBuilder {
                    OnCreate = (r, c) => new NoSpecimen()
                },
                new DelegatingSpecimenBuilder {
                    OnCreate = (r, c) => new NoSpecimen()
                }
            };
            var sut = new CompositeSpecimenBuilder(builders);
            // Act
            var anonymousRequest = new object();
            var dummyContainer   = new DelegatingSpecimenContext();
            var result           = sut.Create(anonymousRequest, dummyContainer);
            // Assert
            var expected = new NoSpecimen();

            Assert.Equal(expected, result);
        }
Beispiel #29
0
        public void CombineExplicitPropertyWithAutoProperties()
        {
            // Arrange
            var expectedText = "Fnaah";

            var specifiedCommand = new BindingCommand <DoublePropertyHolder <string, int>, string>(ph => ph.Property1, expectedText);
            var reservedProperty = new InverseRequestSpecification(specifiedCommand);

            var customizedBuilder = new Postprocessor(
                new Postprocessor(
                    new MethodInvoker(new ModestConstructorQuery()),
                    specifiedCommand),
                new AutoPropertiesCommand(reservedProperty),
                new AnyTypeSpecification());

            var builder = new CompositeSpecimenBuilder(
                customizedBuilder,
                Scenario.CreateAutoPropertyBuilder());
            var container = new SpecimenContext(builder);
            // Act
            var result = container.Resolve(typeof(DoublePropertyHolder <string, int>));
            // Assert
            var actual = Assert.IsAssignableFrom <DoublePropertyHolder <string, int> >(result);

            Assert.Equal(expectedText, actual.Property1);
            Assert.Equal(1, actual.Property2);
        }
Beispiel #30
0
        public void CreateWillTrackCompositeRequests()
        {
            // Arrange
            object requestedObject = "The request";
            object subRequest      = "Some sub request";
            var    spy             = new List <object>();
            var    builder2        = new DelegatingSpecimenBuilder {
                OnCreate = (r, c) => r == requestedObject?c.Resolve(subRequest) : new NoSpecimen()
            };
            var builder3 = new DelegatingSpecimenBuilder {
                OnCreate = (r, c) => r == subRequest ? new object() : new NoSpecimen()
            };
            var compBuilder = new CompositeSpecimenBuilder(builder2, builder3);

            var sut = new DelegatingTracingBuilder(compBuilder);

            sut.SpecimenRequested += (sender, e) => spy.Add(e.Request);
            var container = new SpecimenContext(sut);

            // Act
            sut.Create(requestedObject, container);

            // Assert
            Assert.Equal(2, spy.Count);
            Assert.Equal(subRequest, spy[1]);
        }