示例#1
0
        public void DepthWillBeResetAfterDecoratedBuilderThrows()
        {
            // Arrange
            int createCallNumber = 0;
            int lastRequestDepth = 0;
            var firstRequest     = Guid.NewGuid();
            var secondRequest    = Guid.NewGuid();
            var dummyContainer   = new DelegatingSpecimenContext();
            var builder          = new DelegatingSpecimenBuilder
            {
                OnCreate = (r, c) =>
                {
                    createCallNumber++;
                    if (createCallNumber == 1)
                    {
                        throw new PrivateException();
                    }
                    return(c.Resolve(r));
                }
            };
            var sut = new DelegatingTracingBuilder(builder);

            sut.SpecimenRequested += (sender, e) => lastRequestDepth = e.Depth;

            // Act & assert
            Assert.Throws <PrivateException>(() => sut.Create(firstRequest, dummyContainer));
            Assert.Equal(1, lastRequestDepth);

            sut.Create(secondRequest, dummyContainer);
            Assert.Equal(1, lastRequestDepth);
        }
示例#2
0
        public void CreateWillTrackCompositeRequests()
        {
            // Fixture setup
            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);

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

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

            // Teardown
        }
示例#3
0
        public void CreateWillTrackCreatedSpecimensComposite()
        {
            // Arrange
            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);

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

            // Assert
            Assert.Equal(2, spy.Count);
            Assert.Equal(createdSpecimen, spy[0]);
            Assert.Equal(createdSpecimen, spy[1]);
        }
示例#4
0
        public void CreateWillCorrectRaiseSpecimenCreatedInCompositeRequest()
        {
            // Fixture setup
            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);

            // Exercise system
            sut.Create(request, container);
            // Verify outcome
            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);
            // Teardown
        }
示例#5
0
        public void CreateWillCorrectlyRaiseSpecimenRequestedInCompositeRequest()
        {
            // Arrange
            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);

            // Act
            sut.Create(requestedObject, container);
            // Assert
            Assert.Equal(2, spy.Count);
            Assert.Equal(subRequest, spy[1].Request);
            Assert.Equal(2, spy[1].Depth);
        }
示例#6
0
        public void CreateWillNotRaiseSpecimenCreatedForIgnoredType()
        {
            // Fixture setup
            var eventRaised = false;

            var request = Guid.NewGuid();
            var sut     = new DelegatingTracingBuilder();

            sut.SpecimenCreated += (sender, e) => eventRaised = true;

            var ignoredTypes = new List <Type> {
                typeof(Guid)
            };

            sut.Filter = new DelegatingRequestSpecification {
                OnIsSatisfiedBy = r => !ignoredTypes.Contains(r.GetType())
            };
            // Exercise system
            var dummyContainer = new DelegatingSpecimenContext();

            sut.Create(request, dummyContainer);
            // Verify outcome
            Assert.False(eventRaised, "Event raised");
            // Teardown
        }
示例#7
0
        public void IgnoredTypeWillNotTrackRequest()
        {
            // Fixture setup
            object tracked         = null;
            object requestedObject = Guid.NewGuid();
            var    sut             = new DelegatingTracingBuilder();

            var ignoredTypes = new List <Type> {
                typeof(Guid)
            };

            sut.Filter = new DelegatingRequestSpecification {
                OnIsSatisfiedBy = r => !ignoredTypes.Contains(r.GetType())
            };

            // Exercise system
            var dummyContainer = new DelegatingSpecimenContext();

            sut.Create(requestedObject, dummyContainer);

            // Verify outcome
            Assert.Null(tracked);

            // Teardown
        }
示例#8
0
        public void IgnoredTypeWillNotTrackCreatedSpecimen()
        {
            // Arrange
            object tracked         = null;
            object requestedObject = Guid.NewGuid();

            var decoratedBuilder = new DelegatingSpecimenBuilder {
                OnCreate = (r, c) => r
            };
            var sut = new DelegatingTracingBuilder(decoratedBuilder);

            var ignoredTypes = new List <Type> {
                typeof(Guid)
            };

            sut.Filter = new DelegatingRequestSpecification {
                OnIsSatisfiedBy = r => !ignoredTypes.Contains(r.GetType())
            };

            // Act
            var    dummyContainer = new DelegatingSpecimenContext();
            object res            = sut.Create(requestedObject, dummyContainer);

            // Assert
            Assert.Null(tracked);
        }
示例#9
0
        public void SutIsSpecimenBuilder()
        {
            // Arrange
            // Act
            var sut = new DelegatingTracingBuilder();

            // Assert
            Assert.IsAssignableFrom <ISpecimenBuilder>(sut);
        }
示例#10
0
        public void TestSpecificSutIsSut()
        {
            // Arrange
            // Act
            var sut = new DelegatingTracingBuilder();

            // Assert
            Assert.IsAssignableFrom <TracingBuilder>(sut);
        }
示例#11
0
        public void InitializeWithNullWriterWillThrow()
        {
            // Arrange
            var dummyBuilder = new DelegatingTracingBuilder();

            // Act & assert
            Assert.Throws <ArgumentNullException>(() =>
                                                  new TraceWriter(null, dummyBuilder));
        }
示例#12
0
        public void AssignNullFilterWillThrow()
        {
            // Arrange
            var sut = new DelegatingTracingBuilder();

            // Act & assert
            Assert.Throws <ArgumentNullException>(() =>
                                                  sut.Filter = null);
        }
示例#13
0
        public void SutIsSpecimenBuilder()
        {
            // Fixture setup
            // Exercise system
            var sut = new DelegatingTracingBuilder();

            // Verify outcome
            Assert.IsAssignableFrom <ISpecimenBuilder>(sut);
            // Teardown
        }
示例#14
0
        public void AssignNullFilterWillThrow()
        {
            // Fixture setup
            var sut = new DelegatingTracingBuilder();

            // Exercise system and verify outcome
            Assert.Throws <ArgumentNullException>(() =>
                                                  sut.Filter = null);
            // Teardown
        }
示例#15
0
        public void InitializeWithNullWriterWillThrow()
        {
            // Fixture setup
            var dummyBuilder = new DelegatingTracingBuilder();

            // Exercise system and verify outcome
            Assert.Throws <ArgumentNullException>(() =>
                                                  new TraceWriter(null, dummyBuilder));
            // Teardown
        }
示例#16
0
        public void SutIsSpecimenBuilderNode()
        {
            // Arrange
            var dummyWriter  = TextWriter.Null;
            var dummyBuilder = new DelegatingTracingBuilder();
            // Act
            var sut = new TraceWriter(dummyWriter, dummyBuilder);

            // Assert
            Assert.IsAssignableFrom <ISpecimenBuilderNode>(sut);
        }
示例#17
0
        public void TracerIsCorrect()
        {
            // Arrange
            var dummyWriter    = TextWriter.Null;
            var expectedTracer = new DelegatingTracingBuilder();
            var sut            = new TraceWriter(dummyWriter, expectedTracer);
            // Act
            TracingBuilder result = sut.Tracer;

            // Assert
            Assert.Equal(expectedTracer, result);
        }
示例#18
0
        public void SutIsSpecimenBuilderNode()
        {
            // Fixture setup
            var dummyWriter  = TextWriter.Null;
            var dummyBuilder = new DelegatingTracingBuilder();
            // Exercise system
            var sut = new TraceWriter(dummyWriter, dummyBuilder);

            // Verify outcome
            Assert.IsAssignableFrom <ISpecimenBuilderNode>(sut);
            // Teardown
        }
示例#19
0
        public void SutYieldsCorrectSequence()
        {
            // Arrange
            var dummyWriter = TextWriter.Null;
            var expected    = new DelegatingSpecimenBuilder();
            var tracer      = new DelegatingTracingBuilder(expected);
            var sut         = new TraceWriter(dummyWriter, tracer);

            // Act
            // Assert
            Assert.Equal(expected, sut.Single());
            Assert.Equal(expected, ((System.Collections.IEnumerable)sut).Cast <object>().Single());
        }
示例#20
0
        public void TracerIsCorrect()
        {
            // Fixture setup
            var dummyWriter    = TextWriter.Null;
            var expectedTracer = new DelegatingTracingBuilder();
            var sut            = new TraceWriter(dummyWriter, expectedTracer);
            // Exercise system
            TracingBuilder result = sut.Tracer;

            // Verify outcome
            Assert.Equal(expectedTracer, result);
            // Teardown
        }
示例#21
0
        public void FilterIsProperWritableProperty()
        {
            // Arrange
            var sut = new DelegatingTracingBuilder();
            IRequestSpecification expectedFilter = new DelegatingRequestSpecification();

            // Act
            sut.Filter = expectedFilter;
            IRequestSpecification result = sut.Filter;

            // Assert
            Assert.Equal(expectedFilter, result);
        }
示例#22
0
        public void FilterIsProperWritableProperty()
        {
            // Fixture setup
            var sut = new DelegatingTracingBuilder();
            IRequestSpecification expectedFilter = new DelegatingRequestSpecification();

            // Exercise system
            sut.Filter = expectedFilter;
            IRequestSpecification result = sut.Filter;

            // Verify outcome
            Assert.Equal(expectedFilter, result);
            // Teardown
        }
示例#23
0
        public void ComposeSingleItemReturnsCorrectResult()
        {
            // Arrange
            var writer = TextWriter.Null;
            var tracer = new DelegatingTracingBuilder();
            var sut    = new TraceWriter(writer, tracer);
            // Act
            var expected = new DelegatingSpecimenBuilder();
            var actual   = sut.Compose(new[] { expected });
            // Assert
            var tw = Assert.IsAssignableFrom <TraceWriter>(actual);

            Assert.Equal(expected, tw.Tracer.Builder);
        }
示例#24
0
        public void SutYieldsCorrectSequence()
        {
            // Fixture setup
            var dummyWriter = TextWriter.Null;
            var expected    = new DelegatingSpecimenBuilder();
            var tracer      = new DelegatingTracingBuilder(expected);
            var sut         = new TraceWriter(dummyWriter, tracer);

            // Exercise system
            // Verify outcome
            Assert.Equal(expected, sut.Single());
            Assert.Equal(expected, ((System.Collections.IEnumerable)sut).Cast <object>().Single());
            // Teardown
        }
示例#25
0
        public void CreateWillCorrectlyRaiseSpecimenRequested()
        {
            // Arrange
            var verified = false;
            var request  = new object();
            var sut      = new DelegatingTracingBuilder();

            sut.SpecimenRequested += (sender, e) => verified = e.Request == request && e.Depth == 1;
            // Act
            var dummyContainer = new DelegatingSpecimenContext();

            sut.Create(request, dummyContainer);
            // Assert
            Assert.True(verified, "Event raised");
        }
示例#26
0
        public void ComposeSingleItemReturnsCorrectResult()
        {
            // Fixture setup
            var writer = TextWriter.Null;
            var tracer = new DelegatingTracingBuilder();
            var sut    = new TraceWriter(writer, tracer);
            // Exercise system
            var expected = new DelegatingSpecimenBuilder();
            var actual   = sut.Compose(new[] { expected });
            // Verify outcome
            var tw = Assert.IsAssignableFrom <TraceWriter>(actual);

            Assert.Equal(expected, tw.Tracer.Builder);
            // Teardown
        }
示例#27
0
        public void CreateWillTrackCreatedSpecimen()
        {
            // Arrange
            object tracked         = null;
            object createdSpecimen = Guid.NewGuid();
            var    container       = new DelegatingSpecimenContext {
                OnResolve = r => createdSpecimen
            };
            var sut = new DelegatingTracingBuilder();

            // Act
            object res = sut.Create(new object(), container);

            // Assert
            Assert.Equal(res, tracked);
        }
示例#28
0
        public void CreateWillPassThroughToDecoratedBuilder()
        {
            // Arrange
            object expectedSpecimen = Guid.NewGuid();
            var    decoratedBuilder = new DelegatingSpecimenBuilder {
                OnCreate = (r, c) => r
            };
            var sut = new DelegatingTracingBuilder(decoratedBuilder);

            // Act
            var    dummyContainer = new DelegatingSpecimenContext();
            object result         = sut.Create(expectedSpecimen, dummyContainer);

            // Assert
            Assert.Equal(expectedSpecimen, result);
        }
示例#29
0
        public void CreateWillCorrectlyRaiseSpecimenRequested()
        {
            // Fixture setup
            var verified = false;
            var request  = new object();
            var sut      = new DelegatingTracingBuilder();

            sut.SpecimenRequested += (sender, e) => verified = e.Request == request && e.Depth == 1;
            // Exercise system
            var dummyContainer = new DelegatingSpecimenContext();

            sut.Create(request, dummyContainer);
            // Verify outcome
            Assert.True(verified, "Event raised");
            // Teardown
        }
示例#30
0
        public void CreateWillNotTrackFilteredRequest()
        {
            // Arrange
            object tracked         = null;
            object requestedObject = new object();
            var    sut             = new DelegatingTracingBuilder();

            sut.Filter = new DelegatingRequestSpecification {
                OnIsSatisfiedBy = r => false
            };
            // Act
            var dummyContainer = new DelegatingSpecimenContext();

            sut.Create(requestedObject, dummyContainer);
            // Assert
            Assert.Null(tracked);
        }