public void CustomizeWithNullFixtureShouldThrowArgumentNullException()
 {
     // Fixture setup
     var sut = new FreezeOnMatchCustomization(typeof(object));
     // Exercise system and verify outcome
     Assert.Throws<ArgumentNullException>(() =>
         sut.Customize(null));
     // Teardown
 }
        public void CustomizeWithCompetingSpecimenBuilderForTheSameTypeShouldReturnTheFrozenSpecimen()
        {
            // Fixture setup
            var fixture = new Fixture();
            var context = new SpecimenContext(fixture);
            var frozenType = typeof(object);
            var competingBuilder = new DelegatingSpecimenBuilder
            {
                OnCreate = (request, ctx) =>
                    request.Equals(frozenType)
                        ? new object()
#pragma warning disable 618
                        : new NoSpecimen(request)
#pragma warning restore 618
            };
            var sut = new FreezeOnMatchCustomization(
                frozenType,
                new ExactTypeSpecification(frozenType));
            // Exercise system
            fixture.Customizations.Add(competingBuilder);
            sut.Customize(fixture);
            // Verify outcome
            Assert.Equal(context.Resolve(frozenType), context.Resolve(frozenType));
        }
 public void FreezeByMatchingMemberNameShouldReturnSameSpecimenForMembersOfMatchingNameAndCompatibleTypes()
 {
     // Fixture setup
     var frozenType = typeof(ConcreteType);
     var fixture = new Fixture();
     var sut = new FreezeOnMatchCustomization(
         frozenType,
         new OrRequestSpecification(
             new ParameterSpecification(frozenType, "parameter"),
             new PropertySpecification(frozenType, "Property"),
             new FieldSpecification(frozenType, "Field")));
     // Exercise system
     sut.Customize(fixture);
     // Verify outcome
     var parameter = fixture.Create<SingleParameterType<ConcreteType>>().Parameter;
     var property = fixture.Create<PropertyHolder<ConcreteType>>().Property;
     var field = fixture.Create<FieldHolder<ConcreteType>>().Field;
     Assert.Same(parameter, property);
     Assert.Same(property, field);
     // Teardown
 }
 public void FreezeByMatchingFieldNameShouldReturnDifferentSpecimensForFieldsOfSameNameAndIncompatibleTypes()
 {
     // Fixture setup
     var frozenType = typeof(string);
     var fieldName = "Field";
     var fixture = new Fixture();
     var sut = new FreezeOnMatchCustomization(
         frozenType,
         new FieldSpecification(frozenType, fieldName));
     // Exercise system
     sut.Customize(fixture);
     // Verify outcome
     var frozen = fixture.Create<FieldHolder<ConcreteType>>().Field;
     var requested = fixture.Create<FieldHolder<ConcreteType>>().Field;
     Assert.NotSame(frozen, requested);
     // Teardown
 }
 public void FreezeByMatchingParameterNameShouldReturnDifferentSpecimensForParametersOfSameNameAndIncompatibleTypes()
 {
     // Fixture setup
     var frozenType = typeof(string);
     var parameterName = "parameter";
     var fixture = new Fixture();
     var sut = new FreezeOnMatchCustomization(
         frozenType,
         new ParameterSpecification(frozenType, parameterName));
     // Exercise system
     sut.Customize(fixture);
     // Verify outcome
     var frozen = fixture.Create<SingleParameterType<ConcreteType>>().Parameter;
     var requested = fixture.Create<SingleParameterType<ConcreteType>>().Parameter;
     Assert.NotSame(frozen, requested);
     // Teardown
 }
 public void FreezeByMatchingPropertyNameShouldReturnDifferentSpecimensForPropertiesOfDifferentNamesAndSameType()
 {
     // Fixture setup
     var frozenType = typeof(ConcreteType);
     var propertyName = "SomeOtherProperty";
     var fixture = new Fixture();
     var sut = new FreezeOnMatchCustomization(
         frozenType,
         new PropertySpecification(frozenType, propertyName));
     // Exercise system
     sut.Customize(fixture);
     // Verify outcome
     var frozen = fixture.Create<PropertyHolder<ConcreteType>>().Property;
     var requested = fixture.Create<PropertyHolder<ConcreteType>>().Property;
     Assert.NotSame(frozen, requested);
     // Teardown
 }
 public void FreezeByMatchingPropertyNameShouldReturnSameSpecimenForPropertiesOfSameNameAndCompatibleTypes()
 {
     // Fixture setup
     var frozenType = typeof(ConcreteType);
     var propertyName = "Property";
     var fixture = new Fixture();
     var sut = new FreezeOnMatchCustomization(
         frozenType,
         new PropertySpecification(frozenType, propertyName));
     // Exercise system
     sut.Customize(fixture);
     // Verify outcome
     var frozen = fixture.Create<PropertyHolder<ConcreteType>>().Property;
     var requested = fixture.Create<PropertyHolder<AbstractType>>().Property;
     Assert.Same(frozen, requested);
     // Teardown
 }
 public void FreezeByMatchingImplementedInterfacesShouldReturnTheRightSpecimen(
     Type frozenType,
     Type requestedType)
 {
     // Fixture setup
     var fixture = new Fixture();
     var context = new SpecimenContext(fixture);
     var sut = new FreezeOnMatchCustomization(
         frozenType,
         new ImplementedInterfaceSpecification(frozenType));
     // Exercise system
     sut.Customize(fixture);
     // Verify outcome
     var frozen = context.Resolve(frozenType);
     var requested = context.Resolve(requestedType);
     Assert.Same(frozen, requested);
     // Teardown
 }
 public void FreezeByMatchingBaseTypeShouldReturnTheRightSpecimen(
     Type frozenType,
     Type requestedType,
     bool areEqual)
 {
     // Fixture setup
     var fixture = new Fixture();
     var context = new SpecimenContext(fixture);
     var sut = new FreezeOnMatchCustomization(
         frozenType,
         new DirectBaseTypeSpecification(frozenType));
     // Exercise system
     sut.Customize(fixture);
     // Verify outcome
     var frozen = context.Resolve(frozenType);
     var requested = context.Resolve(requestedType);
     Assert.Equal(areEqual, frozen.Equals(requested));
     // Teardown
 }