Beispiel #1
0
 static ModelPublicSetGenericParentGenericChildTFirstTSecondTest()
 {
     ComparableTestScenarios.AddScenario(new ComparableTestScenario <ModelPublicSetGenericParentGenericChild <Version, Guid> >
     {
         Name            = "Scenario 1",
         ReferenceObject = ReferenceObject,
         ObjectsThatAreEqualToButNotTheSameAsReferenceObject = new[]
         {
             ReferenceObject.DeepCloneWithChildCustomClassProperty(A.Dummy <CustomClass>()),
         },
         ObjectsThatAreLessThanReferenceObject = new[]
         {
             A.Dummy <ModelPublicSetGenericParentGenericChild <Version, Guid> >().Whose(_ => _.ChildIntProperty < ReferenceObject.ChildIntProperty),
         },
         ObjectsThatAreGreaterThanReferenceObject = new[]
         {
             A.Dummy <ModelPublicSetGenericParentGenericChild <Version, Guid> >().Whose(_ => _.ChildIntProperty > ReferenceObject.ChildIntProperty),
         },
         ObjectsThatAreNotOfTheSameTypeAsReferenceObject = new object[]
         {
             1,
             "dummy - string",
             A.Dummy <ModelPublicSetGenericParentGenericPartiallyClosedChild <Version> >(),
             A.Dummy <ModelPublicSetGenericParentNonGenericChild>(),
         },
     });
 }
        static UnitOfTimeTest()
        {
            var referenceUnitOfTime = A.Dummy <FiscalYear>();

            ComparableTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new ComparableTestScenario <UnitOfTime>
            {
                Name            = "Comparable Test Scenario",
                ReferenceObject = referenceUnitOfTime,
                ObjectsThatAreLessThanReferenceObject = new[]
                {
                    new FiscalYear(referenceUnitOfTime.Year - 1),
                },
                ObjectsThatAreGreaterThanReferenceObject = new[]
                {
                    new FiscalYear(referenceUnitOfTime.Year + 1),
                },
                ObjectsThatAreEqualToButNotTheSameAsReferenceObject = new[]
                {
                    referenceUnitOfTime.DeepClone(),
                },
                ObjectsThatAreNotOfTheSameTypeAsReferenceObject = new[]
                {
                    A.Dummy <object>(),
                    A.Dummy <string>(),
                    A.Dummy <int>(),
                    A.Dummy <int?>(),
                    A.Dummy <Guid>(),
                },
                ObjectsThatDeriveFromScenarioTypeButAreNotOfTheSameTypeAsReferenceObject =
                    TestCommon.GetDummyOfEachUnitOfTimeKind().Where(_ => _.GetType() != typeof(FiscalYear)).ToList(),
            });
        }
 static ModelComparingPublicSetNoneChild2Test()
 {
     ComparableTestScenarios.AddScenario(new ComparableTestScenario <ModelComparingPublicSetNoneChild2>
     {
         Name            = "Scenario 1",
         ReferenceObject = new ModelComparingPublicSetNoneChild2 {
             Child2IntProperty = 5, ParentIntProperty = 4
         },
         ObjectsThatAreEqualToButNotTheSameAsReferenceObject = new[] { new ModelComparingPublicSetNoneChild2 {
                                                                           Child2IntProperty = 4, ParentIntProperty = 5
                                                                       }, new ModelComparingPublicSetNoneChild2 {
                                                                           Child2IntProperty = 0, ParentIntProperty = 9
                                                                       }, new ModelComparingPublicSetNoneChild2 {
                                                                           Child2IntProperty = 5, ParentIntProperty = 4
                                                                       } },
         ObjectsThatAreLessThanReferenceObject = new[] { new ModelComparingPublicSetNoneChild2 {
                                                             Child2IntProperty = 8, ParentIntProperty = 0
                                                         }, new ModelComparingPublicSetNoneChild2 {
                                                             Child2IntProperty = -5, ParentIntProperty = -4
                                                         }, new ModelComparingPublicSetNoneChild2 {
                                                             Child2IntProperty = 3, ParentIntProperty = 4
                                                         } },
         ObjectsThatAreGreaterThanReferenceObject = new[] { new ModelComparingPublicSetNoneChild2 {
                                                                Child2IntProperty = 9, ParentIntProperty = 1
                                                            }, new ModelComparingPublicSetNoneChild2 {
                                                                Child2IntProperty = 5, ParentIntProperty = 5
                                                            }, new ModelComparingPublicSetNoneChild2 {
                                                                Child2IntProperty = -50, ParentIntProperty = 100
                                                            } },
         ObjectsThatAreNotOfTheSameTypeAsReferenceObject = new object[] { 1, "dummy-string", new ModelComparingPublicSetNoneChild1 {
                                                                              Child1IntProperty = 5, ParentIntProperty = 4
                                                                          } },
     });
 }
 static ModelComparingPrivateSetNoneChild2Test()
 {
     ComparableTestScenarios.AddScenario(new ComparableTestScenario <ModelComparingPrivateSetNoneChild2>
     {
         Name            = "Scenario 1",
         ReferenceObject = new ModelComparingPrivateSetNoneChild2(5, 4),
         ObjectsThatAreEqualToButNotTheSameAsReferenceObject = new[] { new ModelComparingPrivateSetNoneChild2(4, 5), new ModelComparingPrivateSetNoneChild2(0, 9), new ModelComparingPrivateSetNoneChild2(5, 4) },
         ObjectsThatAreLessThanReferenceObject           = new[] { new ModelComparingPrivateSetNoneChild2(8, 0), new ModelComparingPrivateSetNoneChild2(-5, -4), new ModelComparingPrivateSetNoneChild2(3, 4) },
         ObjectsThatAreGreaterThanReferenceObject        = new[] { new ModelComparingPrivateSetNoneChild2(9, 1), new ModelComparingPrivateSetNoneChild2(5, 5), new ModelComparingPrivateSetNoneChild2(-50, 100) },
         ObjectsThatAreNotOfTheSameTypeAsReferenceObject = new object[] { 1, "dummy - string", new ModelComparingPrivateSetNoneChild1(5, 4) },
     });
 }
 static ModelComparingPrivateSetNoneTest()
 {
     ComparableTestScenarios.AddScenario(new ComparableTestScenario <ModelComparingPrivateSetNone>
     {
         Name            = "Scenario 1",
         ReferenceObject = new ModelComparingPrivateSetNone(5),
         ObjectsThatAreEqualToButNotTheSameAsReferenceObject = new[] { new ModelComparingPrivateSetNone(5) },
         ObjectsThatAreLessThanReferenceObject           = new[] { new ModelComparingPrivateSetNone(4), new ModelComparingPrivateSetNone(-5), new ModelComparingPrivateSetNone(0) },
         ObjectsThatAreGreaterThanReferenceObject        = new[] { new ModelComparingPrivateSetNone(6), new ModelComparingPrivateSetNone(10) },
         ObjectsThatAreNotOfTheSameTypeAsReferenceObject = new object[] { 1, "dummy - string", new ModelComparingPrivateSetNoneChild1(5, 4), new ModelComparingPrivateSetNoneChild2(5, 4) },
     });
 }
        static GenericUnboundedTest()
        {
            var referenceGenericUnbounded = A.Dummy <GenericUnbounded>();

            ComparableTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new ComparableTestScenario <GenericUnbounded>
            {
                Name            = "Comparable Test Scenario",
                ReferenceObject = referenceGenericUnbounded,
                ObjectsThatAreLessThanReferenceObject = new GenericUnbounded[]
                {
                },
                ObjectsThatAreGreaterThanReferenceObject = new GenericUnbounded[]
                {
                },
                ObjectsThatAreEqualToButNotTheSameAsReferenceObject = new[]
                {
                    referenceGenericUnbounded.DeepClone(),
                },
                ObjectsThatAreNotOfTheSameTypeAsReferenceObject = new[]
                {
                    A.Dummy <object>(),
                    A.Dummy <string>(),
                    A.Dummy <int>(),
                    A.Dummy <int?>(),
                    A.Dummy <Guid>(),
                }
                .Concat(TestCommon.GetDummyOfEachUnitOfTimeKind().Where(_ => _.GetType() != typeof(GenericUnbounded)))
                .ToList(),
                ObjectsThatDeriveFromScenarioTypeButAreNotOfTheSameTypeAsReferenceObject = new GenericUnbounded[]
                {
                },
            });

            StringRepresentationTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new StringRepresentationTestScenario <GenericUnbounded>
            {
                Name = "String Representation - case 1",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                                                                  new SystemUnderTestExpectedStringRepresentation <GenericUnbounded>
                {
                    SystemUnderTest = new GenericUnbounded(),
                    ExpectedStringRepresentation = "generic unbounded",
                },
            });
        }
        static CalendarUnitOfTimeTest()
        {
            var referenceCalendarUnitOfTime = A.Dummy <CalendarYear>();

            ComparableTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new ComparableTestScenario <CalendarUnitOfTime>
            {
                Name            = "Comparable Test Scenario",
                ReferenceObject = referenceCalendarUnitOfTime,
                ObjectsThatAreLessThanReferenceObject = new[]
                {
                    new CalendarYear(referenceCalendarUnitOfTime.Year - 1),
                },
                ObjectsThatAreGreaterThanReferenceObject = new[]
                {
                    new CalendarYear(referenceCalendarUnitOfTime.Year + 1),
                },
                ObjectsThatAreEqualToButNotTheSameAsReferenceObject = new[]
                {
                    referenceCalendarUnitOfTime.DeepClone(),
                },
                ObjectsThatAreNotOfTheSameTypeAsReferenceObject = new[]
                {
                    A.Dummy <object>(),
                    A.Dummy <string>(),
                    A.Dummy <int>(),
                    A.Dummy <int?>(),
                    A.Dummy <Guid>(),
                }
                .Concat(TestCommon.GetDummyOfEachUnitOfTimeKind().Where(_ => _.UnitOfTimeKind != UnitOfTimeKind.Calendar))
                .ToList(),
                ObjectsThatDeriveFromScenarioTypeButAreNotOfTheSameTypeAsReferenceObject = new CalendarUnitOfTime[]
                {
                    A.Dummy <CalendarDay>(),
                    A.Dummy <CalendarMonth>(),
                    A.Dummy <CalendarQuarter>(),
                    A.Dummy <CalendarUnbounded>(),
                },
            });
        }
        static ModelPrivateSetMultilevelGrandchild1ATest()
        {
            StringRepresentationTestScenarios.RemoveAllScenarios();

            StringRepresentationTestScenarios.AddScenario(StringRepresentationTestScenario <ModelPrivateSetMultilevelGrandchild1A> .ForceGeneratedTestsToPassAndWriteMyOwnScenario);

            ConstructorArgumentValidationTestScenarios.AddScenario(
                ConstructorArgumentValidationTestScenario <ModelPrivateSetMultilevelGrandchild1A> .ConstructorCannotThrowScenario);

            ComparableTestScenarios.AddScenario(new ComparableTestScenario <ModelPrivateSetMultilevelGrandchild1A>
            {
                Name            = "Scenario 1",
                ReferenceObject = new ModelPrivateSetMultilevelGrandchild1A(1, 2, 3),
                ObjectsThatAreEqualToButNotTheSameAsReferenceObject = new[]
                {
                    new ModelPrivateSetMultilevelGrandchild1A(1, 2, 3),
                    new ModelPrivateSetMultilevelGrandchild1A(3, 2, 1),
                    new ModelPrivateSetMultilevelGrandchild1A(0, 6, 0),
                },
                ObjectsThatAreLessThanReferenceObject = new[]
                {
                    new ModelPrivateSetMultilevelGrandchild1A(1, 2, 2),
                    new ModelPrivateSetMultilevelGrandchild1A(6, -2, -1),
                    new ModelPrivateSetMultilevelGrandchild1A(0, 5, 0),
                },
                ObjectsThatAreGreaterThanReferenceObject = new[]
                {
                    new ModelPrivateSetMultilevelGrandchild1A(2, 2, 3),
                    new ModelPrivateSetMultilevelGrandchild1A(3, 3, 1),
                    new ModelPrivateSetMultilevelGrandchild1A(0, 7, 0),
                },
                ObjectsThatAreNotOfTheSameTypeAsReferenceObject = new object[]
                {
                    1,
                    "dummy-string",
                    new ModelPrivateSetMultilevelGrandchild1B(1, 2, 3),
                    new ModelPrivateSetMultilevelGrandchild2A(1, 2, 3),
                    new ModelPrivateSetMultilevelGrandchild2B(1, 2, 3),
                },
            });
        }
Beispiel #9
0
        static ModelPrivateSetMultilevelGrandchild1BTest()
        {
            ConstructorArgumentValidationTestScenarios.AddScenario(
                ConstructorArgumentValidationTestScenario <ModelPrivateSetMultilevelGrandchild1B> .ConstructorCannotThrowScenario);

            ComparableTestScenarios.AddScenario(new ComparableTestScenario <ModelPrivateSetMultilevelGrandchild1B>
            {
                Name            = "Scenario 1",
                ReferenceObject = new ModelPrivateSetMultilevelGrandchild1B(1, 2, 3),
                ObjectsThatAreEqualToButNotTheSameAsReferenceObject = new[]
                {
                    new ModelPrivateSetMultilevelGrandchild1B(1, 2, 3),
                    new ModelPrivateSetMultilevelGrandchild1B(3, 2, 1),
                    new ModelPrivateSetMultilevelGrandchild1B(0, 6, 0),
                },
                ObjectsThatAreLessThanReferenceObject = new[]
                {
                    new ModelPrivateSetMultilevelGrandchild1B(1, 2, 2),
                    new ModelPrivateSetMultilevelGrandchild1B(6, -2, -1),
                    new ModelPrivateSetMultilevelGrandchild1B(0, 5, 0),
                },
                ObjectsThatAreGreaterThanReferenceObject = new[]
                {
                    new ModelPrivateSetMultilevelGrandchild1B(2, 2, 3),
                    new ModelPrivateSetMultilevelGrandchild1B(3, 3, 1),
                    new ModelPrivateSetMultilevelGrandchild1B(0, 7, 0),
                },
                ObjectsThatAreNotOfTheSameTypeAsReferenceObject = new object[]
                {
                    1,
                    "dummy-string",
                    new ModelPrivateSetMultilevelGrandchild1A(1, 2, 3),
                    new ModelPrivateSetMultilevelGrandchild2A(1, 2, 3),
                    new ModelPrivateSetMultilevelGrandchild2B(1, 2, 3),
                },
            });
        }
Beispiel #10
0
 static ModelPrivateSetMultilevelParentTest()
 {
     ComparableTestScenarios.AddScenario(new ComparableTestScenario <ModelPrivateSetMultilevelParent>
     {
         Name            = "Scenario 1",
         ReferenceObject = new ModelPrivateSetMultilevelGrandchild1A(1, 2, 3),
         ObjectsThatAreEqualToButNotTheSameAsReferenceObject = new[]
         {
             new ModelPrivateSetMultilevelGrandchild1A(1, 2, 3),
             new ModelPrivateSetMultilevelGrandchild1A(3, 2, 1),
             new ModelPrivateSetMultilevelGrandchild1A(0, 6, 0),
         },
         ObjectsThatAreLessThanReferenceObject = new[]
         {
             new ModelPrivateSetMultilevelGrandchild1A(1, 2, 2),
             new ModelPrivateSetMultilevelGrandchild1A(6, -2, -1),
             new ModelPrivateSetMultilevelGrandchild1A(0, 5, 0),
         },
         ObjectsThatAreGreaterThanReferenceObject = new[]
         {
             new ModelPrivateSetMultilevelGrandchild1A(2, 2, 3),
             new ModelPrivateSetMultilevelGrandchild1A(3, 3, 1),
             new ModelPrivateSetMultilevelGrandchild1A(0, 7, 0),
         },
         ObjectsThatDeriveFromScenarioTypeButAreNotOfTheSameTypeAsReferenceObject = new ModelPrivateSetMultilevelParent[]
         {
             new ModelPrivateSetMultilevelGrandchild1B(1, 2, 3),
             new ModelPrivateSetMultilevelGrandchild2A(1, 2, 3),
             new ModelPrivateSetMultilevelGrandchild2B(1, 2, 3),
         },
         ObjectsThatAreNotOfTheSameTypeAsReferenceObject = new object[]
         {
             1,
             "dummy-string",
         },
     });
 }
 static ModelPublicSetMultilevelGrandchild1BTest()
 {
     ComparableTestScenarios.AddScenario(new ComparableTestScenario <ModelPublicSetMultilevelGrandchild1B>
     {
         Name            = "Scenario 1",
         ReferenceObject = new ModelPublicSetMultilevelGrandchild1B
         {
             ParentInt       = 1,
             Child1Int       = 2,
             Grandchild1BInt = 3,
         },
         ObjectsThatAreEqualToButNotTheSameAsReferenceObject = new[]
         {
             new ModelPublicSetMultilevelGrandchild1B
             {
                 ParentInt       = 1,
                 Child1Int       = 2,
                 Grandchild1BInt = 3,
             },
             new ModelPublicSetMultilevelGrandchild1B
             {
                 ParentInt       = 3,
                 Child1Int       = 2,
                 Grandchild1BInt = 1,
             },
             new ModelPublicSetMultilevelGrandchild1B
             {
                 ParentInt       = 0,
                 Child1Int       = 6,
                 Grandchild1BInt = 0,
             },
         },
         ObjectsThatAreLessThanReferenceObject = new[]
         {
             new ModelPublicSetMultilevelGrandchild1B
             {
                 ParentInt       = 1,
                 Child1Int       = 2,
                 Grandchild1BInt = 2,
             },
             new ModelPublicSetMultilevelGrandchild1B
             {
                 ParentInt       = 6,
                 Child1Int       = -2,
                 Grandchild1BInt = -1,
             },
             new ModelPublicSetMultilevelGrandchild1B
             {
                 ParentInt       = 0,
                 Child1Int       = 5,
                 Grandchild1BInt = 0,
             },
         },
         ObjectsThatAreGreaterThanReferenceObject = new[]
         {
             new ModelPublicSetMultilevelGrandchild1B
             {
                 ParentInt       = 2,
                 Child1Int       = 2,
                 Grandchild1BInt = 3,
             },
             new ModelPublicSetMultilevelGrandchild1B
             {
                 ParentInt       = 3,
                 Child1Int       = 3,
                 Grandchild1BInt = 1,
             },
             new ModelPublicSetMultilevelGrandchild1B
             {
                 ParentInt       = 0,
                 Child1Int       = 7,
                 Grandchild1BInt = 0,
             },
         },
         ObjectsThatAreNotOfTheSameTypeAsReferenceObject = new object[]
         {
             1,
             "dummy-string",
             new ModelPublicSetMultilevelGrandchild1A
             {
                 ParentInt       = 1,
                 Child1Int       = 2,
                 Grandchild1AInt = 3,
             },
             new ModelPublicSetMultilevelGrandchild2A
             {
                 ParentInt       = 1,
                 Child2Int       = 2,
                 Grandchild2AInt = 3,
             },
             new ModelPublicSetMultilevelGrandchild2B
             {
                 ParentInt       = 1,
                 Child2Int       = 2,
                 Grandchild2BInt = 3,
             },
         },
     });
 }
        static GenericQuarterTest()
        {
            var referenceGenericQuarter = A.Dummy <GenericQuarter>();

            ConstructorArgumentValidationTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <GenericQuarter>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'year' is < 0",
                ConstructionFunc = () => new GenericQuarter(A.Dummy <NegativeInteger>(), referenceGenericQuarter.QuarterNumber),
                ExpectedExceptionMessageContains = new[] { "'year' < '1'" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <GenericQuarter>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'year' = 0",
                ConstructionFunc = () => new GenericQuarter(0, referenceGenericQuarter.QuarterNumber),
                ExpectedExceptionMessageContains = new[] { "'year' < '1'" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <GenericQuarter>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'year' = 10000",
                ConstructionFunc = () => new GenericQuarter(10000, referenceGenericQuarter.QuarterNumber),
                ExpectedExceptionMessageContains = new[] { "'year' > '9999'" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <GenericQuarter>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'year' > 9999",
                ConstructionFunc = () => new GenericQuarter(A.Dummy <PositiveInteger>().ThatIs(_ => _ > 9999, -1), referenceGenericQuarter.QuarterNumber),
                ExpectedExceptionMessageContains = new[] { "'year' > '9999'" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <GenericQuarter>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'quarterNumber' is QuarterNumber.Invalid",
                ConstructionFunc = () => new GenericQuarter(referenceGenericQuarter.Year, QuarterNumber.Invalid),
                ExpectedExceptionMessageContains = new[] { "quarterNumber", "Invalid" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            });

            ComparableTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new ComparableTestScenario <GenericQuarter>
            {
                Name            = "Comparable Test Scenario",
                ReferenceObject = referenceGenericQuarter,
                ObjectsThatAreLessThanReferenceObject = new[]
                {
                    referenceGenericQuarter.TweakBy(-1, GenericQuarterComponent.Quarter),
                    referenceGenericQuarter.TweakBy(-1, GenericQuarterComponent.Year),
                },
                ObjectsThatAreGreaterThanReferenceObject = new[]
                {
                    referenceGenericQuarter.TweakBy(1, GenericQuarterComponent.Quarter),
                    referenceGenericQuarter.TweakBy(1, GenericQuarterComponent.Year),
                },
                ObjectsThatAreEqualToButNotTheSameAsReferenceObject = new[]
                {
                    referenceGenericQuarter.DeepClone(),
                },
                ObjectsThatAreNotOfTheSameTypeAsReferenceObject = new[]
                {
                    A.Dummy <object>(),
                    A.Dummy <string>(),
                    A.Dummy <int>(),
                    A.Dummy <int?>(),
                    A.Dummy <Guid>(),
                }
                .Concat(TestCommon.GetDummyOfEachUnitOfTimeKind().Where(_ => _.GetType() != typeof(GenericQuarter)))
                .ToList(),
                ObjectsThatDeriveFromScenarioTypeButAreNotOfTheSameTypeAsReferenceObject = new GenericQuarter[]
                {
                },
            });

            StringRepresentationTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new StringRepresentationTestScenario <GenericQuarter>
            {
                Name = "String Representation - case 1",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                                                                  new SystemUnderTestExpectedStringRepresentation <GenericQuarter>
                {
                    SystemUnderTest = new GenericQuarter(2017, QuarterNumber.Q1),
                    ExpectedStringRepresentation = "1Q2017",
                },
            })
            .AddScenario(() =>
                         new StringRepresentationTestScenario <GenericQuarter>
            {
                Name = "String Representation - case 2",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                                                                  new SystemUnderTestExpectedStringRepresentation <GenericQuarter>
                {
                    SystemUnderTest = new GenericQuarter(2020, QuarterNumber.Q4),
                    ExpectedStringRepresentation = "4Q2020",
                },
            });
        }
Beispiel #13
0
        static CalendarDayTest()
        {
            var referenceCalendarDay = A.Dummy <CalendarDay>();

            ConstructorArgumentValidationTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <CalendarDay>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'year' is < 0",
                ConstructionFunc = () => new CalendarDay(A.Dummy <NegativeInteger>(), referenceCalendarDay.MonthOfYear, referenceCalendarDay.DayOfMonth),
                ExpectedExceptionMessageContains = new[] { "'year' < '1'" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <CalendarDay>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'year' = 0",
                ConstructionFunc = () => new CalendarDay(0, referenceCalendarDay.MonthOfYear, referenceCalendarDay.DayOfMonth),
                ExpectedExceptionMessageContains = new[] { "'year' < '1'" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <CalendarDay>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'year' = 10000",
                ConstructionFunc = () => new CalendarDay(10000, referenceCalendarDay.MonthOfYear, referenceCalendarDay.DayOfMonth),
                ExpectedExceptionMessageContains = new[] { "'year' > '9999'" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <CalendarDay>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'year' > 9999",
                ConstructionFunc = () => new CalendarDay(A.Dummy <PositiveInteger>().ThatIs(_ => _ > 9999, -1), referenceCalendarDay.MonthOfYear, referenceCalendarDay.DayOfMonth),
                ExpectedExceptionMessageContains = new[] { "'year' > '9999'" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <CalendarDay>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'monthOfYear' is MonthOfYear.Invalid",
                ConstructionFunc = () => new CalendarDay(referenceCalendarDay.Year, MonthOfYear.Invalid, referenceCalendarDay.DayOfMonth),
                ExpectedExceptionMessageContains = new[] { "monthOfYear", "Invalid" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <CalendarDay>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'dayOfMonth' is DayOfMonth.Invalid",
                ConstructionFunc = () => new CalendarDay(referenceCalendarDay.Year, referenceCalendarDay.MonthOfYear, DayOfMonth.Invalid),
                ExpectedExceptionMessageContains = new[] { "dayOfMonth", "Invalid" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <CalendarDay>
            {
                Name             = "Constructor should throw ArgumentException when parameter 'dayOfMonth' is not a valid day in the specified 'year' and 'monthOfYear' - case 1",
                ConstructionFunc = () => new CalendarDay(2016, MonthOfYear.February, (DayOfMonth)30),
                ExpectedExceptionMessageContains = new[] { "day (Thirty) is not a valid day in the specified month (February) and year (2016)" },
                ExpectedExceptionType            = typeof(ArgumentException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <CalendarDay>
            {
                Name             = "Constructor should throw ArgumentException when parameter 'dayOfMonth' is not a valid day in the specified 'year' and 'monthOfYear' - case 2",
                ConstructionFunc = () => new CalendarDay(2016, MonthOfYear.February, (DayOfMonth)31),
                ExpectedExceptionMessageContains = new[] { "day (ThirtyOne) is not a valid day in the specified month (February) and year (2016)" },
                ExpectedExceptionType            = typeof(ArgumentException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <CalendarDay>
            {
                Name             = "Constructor should throw ArgumentException when parameter 'dayOfMonth' is not a valid day in the specified 'year' and 'monthOfYear' - case 3",
                ConstructionFunc = () => new CalendarDay(2015, MonthOfYear.February, (DayOfMonth)29),
                ExpectedExceptionMessageContains = new[] { "day (TwentyNine) is not a valid day in the specified month (February) and year (2015)" },
                ExpectedExceptionType            = typeof(ArgumentException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <CalendarDay>
            {
                Name             = "Constructor should throw ArgumentException when parameter 'dayOfMonth' is not a valid day in the specified 'year' and 'monthOfYear' - case 4",
                ConstructionFunc = () => new CalendarDay(2015, MonthOfYear.February, (DayOfMonth)30),
                ExpectedExceptionMessageContains = new[] { "day (Thirty) is not a valid day in the specified month (February) and year (2015)" },
                ExpectedExceptionType            = typeof(ArgumentException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <CalendarDay>
            {
                Name             = "Constructor should throw ArgumentException when parameter 'dayOfMonth' is not a valid day in the specified 'year' and 'monthOfYear' - case 5",
                ConstructionFunc = () => new CalendarDay(2015, MonthOfYear.February, (DayOfMonth)31),
                ExpectedExceptionMessageContains = new[] { "day (ThirtyOne) is not a valid day in the specified month (February) and year (2015)" },
                ExpectedExceptionType            = typeof(ArgumentException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <CalendarDay>
            {
                Name             = "Constructor should throw ArgumentException when parameter 'dayOfMonth' is not a valid day in the specified 'year' and 'monthOfYear' - case 6",
                ConstructionFunc = () => new CalendarDay(2016, MonthOfYear.November, (DayOfMonth)31),
                ExpectedExceptionMessageContains = new[] { "day (ThirtyOne) is not a valid day in the specified month (November) and year (2016)" },
                ExpectedExceptionType            = typeof(ArgumentException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <CalendarDay>
            {
                Name             = "Constructor should throw ArgumentException when parameter 'dayOfMonth' is not a valid day in the specified 'year' and 'monthOfYear' - case 7",
                ConstructionFunc = () => new CalendarDay(2017, MonthOfYear.April, (DayOfMonth)31),
                ExpectedExceptionMessageContains = new[] { "day (ThirtyOne) is not a valid day in the specified month (April) and year (2017)" },
                ExpectedExceptionType            = typeof(ArgumentException),
            });

            DeepCloneWithTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new DeepCloneWithTestScenario <CalendarDay>
            {
                Name             = Invariant($"{nameof(CalendarDay.DeepCloneWithYear)} should deep clone object and replace {nameof(CalendarDay.Year)} with the provided year"),
                WithPropertyName = nameof(CalendarDay.Year),
                SystemUnderTestDeepCloneWithValueFunc = () =>
                {
                    var systemUnderTest = A.Dummy <CalendarDay>();

                    var referenceObject = A.Dummy <CalendarDay>().ThatIs(_ => !systemUnderTest.Year.IsEqualTo(_.Year));

                    var result = new SystemUnderTestDeepCloneWithValue <CalendarDay>
                    {
                        SystemUnderTest    = systemUnderTest,
                        DeepCloneWithValue = referenceObject.Year,
                    };

                    return(result);
                },
            })
            .AddScenario(() =>
                         new DeepCloneWithTestScenario <CalendarDay>
            {
                Name             = Invariant($"{nameof(CalendarDay.DeepCloneWithMonthOfYear)} should deep clone object and replace {nameof(CalendarDay.MonthOfYear)} with the provided monthOfYear"),
                WithPropertyName = nameof(CalendarDay.MonthOfYear),
                SystemUnderTestDeepCloneWithValueFunc = () =>
                {
                    var systemUnderTest = A.Dummy <CalendarDay>().ThatIs(_ => _.DayOfMonth <= DayOfMonth.TwentyEight);

                    var referenceObject = A.Dummy <CalendarDay>().ThatIs(_ => !systemUnderTest.MonthOfYear.IsEqualTo(_.MonthOfYear));

                    var result = new SystemUnderTestDeepCloneWithValue <CalendarDay>
                    {
                        SystemUnderTest    = systemUnderTest,
                        DeepCloneWithValue = referenceObject.MonthOfYear,
                    };

                    return(result);
                },
            })
            .AddScenario(() =>
                         new DeepCloneWithTestScenario <CalendarDay>
            {
                Name             = Invariant($"{nameof(CalendarDay.DeepCloneWithDayOfMonth)} should deep clone object and replace {nameof(CalendarDay.DayOfMonth)} with the provided dayOfMonth"),
                WithPropertyName = nameof(CalendarDay.DayOfMonth),
                SystemUnderTestDeepCloneWithValueFunc = () =>
                {
                    var systemUnderTest = A.Dummy <CalendarDay>().Whose(_ => new[] { MonthOfYear.January, MonthOfYear.March, MonthOfYear.March, MonthOfYear.July, MonthOfYear.August, MonthOfYear.October, MonthOfYear.December }.Contains(_.MonthOfYear));

                    var referenceObject = A.Dummy <CalendarDay>().ThatIs(_ => !systemUnderTest.DayOfMonth.IsEqualTo(_.DayOfMonth));

                    var result = new SystemUnderTestDeepCloneWithValue <CalendarDay>
                    {
                        SystemUnderTest    = systemUnderTest,
                        DeepCloneWithValue = referenceObject.DayOfMonth,
                    };

                    return(result);
                },
            });

            EquatableTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new EquatableTestScenario <CalendarDay>
            {
                Name            = "Equatable Test Scenario",
                ReferenceObject = ReferenceObjectForEquatableTestScenarios,
                ObjectsThatAreEqualToButNotTheSameAsReferenceObject = new[]
                {
                    new CalendarDay(
                        ReferenceObjectForEquatableTestScenarios.Year,
                        ReferenceObjectForEquatableTestScenarios.MonthOfYear,
                        ReferenceObjectForEquatableTestScenarios.DayOfMonth),
                },
                ObjectsThatAreNotEqualToReferenceObject = new[]
                {
                    ReferenceObjectForEquatableTestScenarios.Tweak(CalendarDayComponent.Day),
                    ReferenceObjectForEquatableTestScenarios.Tweak(CalendarDayComponent.Month),
                    ReferenceObjectForEquatableTestScenarios.Tweak(CalendarDayComponent.Year),
                },
                ObjectsThatAreNotOfTheSameTypeAsReferenceObject = new[]
                {
                    A.Dummy <object>(),
                    A.Dummy <string>(),
                    A.Dummy <int>(),
                    A.Dummy <int?>(),
                    A.Dummy <Guid>(),
                }
                .Concat(TestCommon.GetDummyOfEachUnitOfTimeKind().Where(_ => _.GetType() != typeof(CalendarDay)))
                .ToList(),
            });

            ComparableTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new ComparableTestScenario <CalendarDay>
            {
                Name            = "Comparable Test Scenario",
                ReferenceObject = referenceCalendarDay,
                ObjectsThatAreLessThanReferenceObject = new[]
                {
                    referenceCalendarDay.TweakBy(-1, CalendarDayComponent.Day),
                    referenceCalendarDay.TweakBy(-1, CalendarDayComponent.Month),
                    referenceCalendarDay.TweakBy(-1, CalendarDayComponent.Year),
                },
                ObjectsThatAreGreaterThanReferenceObject = new[]
                {
                    referenceCalendarDay.TweakBy(1, CalendarDayComponent.Day),
                    referenceCalendarDay.TweakBy(1, CalendarDayComponent.Month),
                    referenceCalendarDay.TweakBy(1, CalendarDayComponent.Year),
                },
                ObjectsThatAreEqualToButNotTheSameAsReferenceObject = new[]
                {
                    referenceCalendarDay.DeepClone(),
                },
                ObjectsThatAreNotOfTheSameTypeAsReferenceObject = new[]
                {
                    A.Dummy <object>(),
                    A.Dummy <string>(),
                    A.Dummy <int>(),
                    A.Dummy <int?>(),
                    A.Dummy <Guid>(),
                    A.Dummy <CalendarMonth>(),
                    A.Dummy <CalendarQuarter>(),
                    A.Dummy <CalendarUnbounded>(),
                    A.Dummy <CalendarYear>(),
                    A.Dummy <FiscalMonth>(),
                    A.Dummy <FiscalQuarter>(),
                    A.Dummy <FiscalUnbounded>(),
                    A.Dummy <FiscalYear>(),
                    A.Dummy <GenericMonth>(),
                    A.Dummy <GenericQuarter>(),
                    A.Dummy <GenericUnbounded>(),
                    A.Dummy <GenericYear>(),
                },
                ObjectsThatDeriveFromScenarioTypeButAreNotOfTheSameTypeAsReferenceObject = new CalendarDay[]
                {
                },
            });

            StringRepresentationTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new StringRepresentationTestScenario <CalendarDay>
            {
                Name = "String Representation - case 1",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                                                                  new SystemUnderTestExpectedStringRepresentation <CalendarDay>
                {
                    SystemUnderTest = new CalendarDay(2017, MonthOfYear.November, DayOfMonth.Thirty),
                    ExpectedStringRepresentation = "2017-11-30",
                },
            })
            .AddScenario(() =>
                         new StringRepresentationTestScenario <CalendarDay>
            {
                Name = "String Representation - case 2",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                                                                  new SystemUnderTestExpectedStringRepresentation <CalendarDay>
                {
                    SystemUnderTest = new CalendarDay(2017, MonthOfYear.February, DayOfMonth.Three),
                    ExpectedStringRepresentation = "2017-02-03",
                },
            });
        }
        static FiscalMonthTest()
        {
            var referenceFiscalMonth = A.Dummy <FiscalMonth>();

            ConstructorArgumentValidationTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <FiscalMonth>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'year' is < 0",
                ConstructionFunc = () => new FiscalMonth(A.Dummy <NegativeInteger>(), referenceFiscalMonth.MonthNumber),
                ExpectedExceptionMessageContains = new[] { "'year' < '1'" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <FiscalMonth>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'year' = 0",
                ConstructionFunc = () => new FiscalMonth(0, referenceFiscalMonth.MonthNumber),
                ExpectedExceptionMessageContains = new[] { "'year' < '1'" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <FiscalMonth>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'year' = 10000",
                ConstructionFunc = () => new FiscalMonth(10000, referenceFiscalMonth.MonthNumber),
                ExpectedExceptionMessageContains = new[] { "'year' > '9999'" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <FiscalMonth>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'year' > 9999",
                ConstructionFunc = () => new FiscalMonth(A.Dummy <PositiveInteger>().ThatIs(_ => _ > 9999, -1), referenceFiscalMonth.MonthNumber),
                ExpectedExceptionMessageContains = new[] { "'year' > '9999'" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <FiscalMonth>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'monthNumber' is MonthNumber.Invalid",
                ConstructionFunc = () => new FiscalMonth(referenceFiscalMonth.Year, MonthNumber.Invalid),
                ExpectedExceptionMessageContains = new[] { "monthNumber", "Invalid" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            });

            ComparableTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new ComparableTestScenario <FiscalMonth>
            {
                Name            = "Comparable Test Scenario",
                ReferenceObject = referenceFiscalMonth,
                ObjectsThatAreLessThanReferenceObject = new[]
                {
                    referenceFiscalMonth.TweakBy(-1, FiscalMonthComponent.Month),
                    referenceFiscalMonth.TweakBy(-1, FiscalMonthComponent.Year),
                },
                ObjectsThatAreGreaterThanReferenceObject = new[]
                {
                    referenceFiscalMonth.TweakBy(1, FiscalMonthComponent.Month),
                    referenceFiscalMonth.TweakBy(1, FiscalMonthComponent.Year),
                },
                ObjectsThatAreEqualToButNotTheSameAsReferenceObject = new[]
                {
                    referenceFiscalMonth.DeepClone(),
                },
                ObjectsThatAreNotOfTheSameTypeAsReferenceObject = new[]
                {
                    A.Dummy <object>(),
                    A.Dummy <string>(),
                    A.Dummy <int>(),
                    A.Dummy <int?>(),
                    A.Dummy <Guid>(),
                }
                .Concat(TestCommon.GetDummyOfEachUnitOfTimeKind().Where(_ => _.GetType() != typeof(FiscalMonth)))
                .ToList(),
                ObjectsThatDeriveFromScenarioTypeButAreNotOfTheSameTypeAsReferenceObject = new FiscalMonth[]
                {
                },
            });

            StringRepresentationTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new StringRepresentationTestScenario <FiscalMonth>
            {
                Name = "String Representation - case 1",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                                                                  new SystemUnderTestExpectedStringRepresentation <FiscalMonth>
                {
                    SystemUnderTest = new FiscalMonth(2017, MonthNumber.One),
                    ExpectedStringRepresentation = "1st month of FY2017",
                },
            })
            .AddScenario(() =>
                         new StringRepresentationTestScenario <FiscalMonth>
            {
                Name = "String Representation - case 2",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                                                                  new SystemUnderTestExpectedStringRepresentation <FiscalMonth>
                {
                    SystemUnderTest = new FiscalMonth(2017, MonthNumber.Two),
                    ExpectedStringRepresentation = "2nd month of FY2017",
                },
            })
            .AddScenario(() =>
                         new StringRepresentationTestScenario <FiscalMonth>
            {
                Name = "String Representation - case 3",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                                                                  new SystemUnderTestExpectedStringRepresentation <FiscalMonth>
                {
                    SystemUnderTest = new FiscalMonth(2017, MonthNumber.Three),
                    ExpectedStringRepresentation = "3rd month of FY2017",
                },
            })
            .AddScenario(() =>
                         new StringRepresentationTestScenario <FiscalMonth>
            {
                Name = "String Representation - case 4",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                                                                  new SystemUnderTestExpectedStringRepresentation <FiscalMonth>
                {
                    SystemUnderTest = new FiscalMonth(2017, MonthNumber.Four),
                    ExpectedStringRepresentation = "4th month of FY2017",
                },
            })
            .AddScenario(() =>
                         new StringRepresentationTestScenario <FiscalMonth>
            {
                Name = "String Representation - case 5",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                                                                  new SystemUnderTestExpectedStringRepresentation <FiscalMonth>
                {
                    SystemUnderTest = new FiscalMonth(2017, MonthNumber.Five),
                    ExpectedStringRepresentation = "5th month of FY2017",
                },
            })
            .AddScenario(() =>
                         new StringRepresentationTestScenario <FiscalMonth>
            {
                Name = "String Representation - case 6",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                                                                  new SystemUnderTestExpectedStringRepresentation <FiscalMonth>
                {
                    SystemUnderTest = new FiscalMonth(2017, MonthNumber.Six),
                    ExpectedStringRepresentation = "6th month of FY2017",
                },
            })
            .AddScenario(() =>
                         new StringRepresentationTestScenario <FiscalMonth>
            {
                Name = "String Representation - case 7",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                                                                  new SystemUnderTestExpectedStringRepresentation <FiscalMonth>
                {
                    SystemUnderTest = new FiscalMonth(2017, MonthNumber.Seven),
                    ExpectedStringRepresentation = "7th month of FY2017",
                },
            })
            .AddScenario(() =>
                         new StringRepresentationTestScenario <FiscalMonth>
            {
                Name = "String Representation - case 8",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                                                                  new SystemUnderTestExpectedStringRepresentation <FiscalMonth>
                {
                    SystemUnderTest = new FiscalMonth(2017, MonthNumber.Eight),
                    ExpectedStringRepresentation = "8th month of FY2017",
                },
            })
            .AddScenario(() =>
                         new StringRepresentationTestScenario <FiscalMonth>
            {
                Name = "String Representation - case 9",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                                                                  new SystemUnderTestExpectedStringRepresentation <FiscalMonth>
                {
                    SystemUnderTest = new FiscalMonth(2017, MonthNumber.Nine),
                    ExpectedStringRepresentation = "9th month of FY2017",
                },
            })
            .AddScenario(() =>
                         new StringRepresentationTestScenario <FiscalMonth>
            {
                Name = "String Representation - case 10",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                                                                  new SystemUnderTestExpectedStringRepresentation <FiscalMonth>
                {
                    SystemUnderTest = new FiscalMonth(2017, MonthNumber.Ten),
                    ExpectedStringRepresentation = "10th month of FY2017",
                },
            })
            .AddScenario(() =>
                         new StringRepresentationTestScenario <FiscalMonth>
            {
                Name = "String Representation - case 11",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                                                                  new SystemUnderTestExpectedStringRepresentation <FiscalMonth>
                {
                    SystemUnderTest = new FiscalMonth(2017, MonthNumber.Eleven),
                    ExpectedStringRepresentation = "11th month of FY2017",
                },
            })
            .AddScenario(() =>
                         new StringRepresentationTestScenario <FiscalMonth>
            {
                Name = "String Representation - case 12",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                                                                  new SystemUnderTestExpectedStringRepresentation <FiscalMonth>
                {
                    SystemUnderTest = new FiscalMonth(2017, MonthNumber.Twelve),
                    ExpectedStringRepresentation = "12th month of FY2017",
                },
            });
        }
Beispiel #15
0
        static CalendarMonthTest()
        {
            var referenceCalendarMonth = A.Dummy <CalendarMonth>();

            ConstructorArgumentValidationTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <CalendarMonth>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'year' is < 0",
                ConstructionFunc = () => new CalendarMonth(A.Dummy <NegativeInteger>(), referenceCalendarMonth.MonthOfYear),
                ExpectedExceptionMessageContains = new[] { "'year' < '1'" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <CalendarMonth>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'year' = 0",
                ConstructionFunc = () => new CalendarMonth(0, referenceCalendarMonth.MonthOfYear),
                ExpectedExceptionMessageContains = new[] { "'year' < '1'" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <CalendarMonth>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'year' = 10000",
                ConstructionFunc = () => new CalendarMonth(10000, referenceCalendarMonth.MonthOfYear),
                ExpectedExceptionMessageContains = new[] { "'year' > '9999'" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <CalendarMonth>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'year' > 9999",
                ConstructionFunc = () => new CalendarMonth(A.Dummy <PositiveInteger>().ThatIs(_ => _ > 9999, -1), referenceCalendarMonth.MonthOfYear),
                ExpectedExceptionMessageContains = new[] { "'year' > '9999'" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <CalendarMonth>
            {
                Name             = "Constructor should throw ArgumentOutOfRangeException when parameter 'monthOfYear' is MonthOfYear.Invalid",
                ConstructionFunc = () => new CalendarMonth(referenceCalendarMonth.Year, MonthOfYear.Invalid),
                ExpectedExceptionMessageContains = new[] { "monthOfYear", "Invalid" },
                ExpectedExceptionType            = typeof(ArgumentOutOfRangeException),
            });

            ComparableTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new ComparableTestScenario <CalendarMonth>
            {
                Name            = "Comparable Test Scenario",
                ReferenceObject = referenceCalendarMonth,
                ObjectsThatAreLessThanReferenceObject = new[]
                {
                    referenceCalendarMonth.TweakBy(-1, CalendarMonthComponent.Month),
                    referenceCalendarMonth.TweakBy(-1, CalendarMonthComponent.Year),
                },
                ObjectsThatAreGreaterThanReferenceObject = new[]
                {
                    referenceCalendarMonth.TweakBy(1, CalendarMonthComponent.Month),
                    referenceCalendarMonth.TweakBy(1, CalendarMonthComponent.Year),
                },
                ObjectsThatAreEqualToButNotTheSameAsReferenceObject = new[]
                {
                    referenceCalendarMonth.DeepClone(),
                },
                ObjectsThatAreNotOfTheSameTypeAsReferenceObject = new[]
                {
                    A.Dummy <object>(),
                    A.Dummy <string>(),
                    A.Dummy <int>(),
                    A.Dummy <int?>(),
                    A.Dummy <Guid>(),
                }
                .Concat(TestCommon.GetDummyOfEachUnitOfTimeKind().Where(_ => _.GetType() != typeof(CalendarMonth)))
                .ToList(),
                ObjectsThatDeriveFromScenarioTypeButAreNotOfTheSameTypeAsReferenceObject = new CalendarMonth[]
                {
                },
            });

            StringRepresentationTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new StringRepresentationTestScenario <CalendarMonth>
            {
                Name = "String Representation - case 1",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                                                                  new SystemUnderTestExpectedStringRepresentation <CalendarMonth>
                {
                    SystemUnderTest = new CalendarMonth(2017, MonthOfYear.November),
                    ExpectedStringRepresentation = "2017-11",
                },
            })
            .AddScenario(() =>
                         new StringRepresentationTestScenario <CalendarMonth>
            {
                Name = "String Representation - case 2",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                                                                  new SystemUnderTestExpectedStringRepresentation <CalendarMonth>
                {
                    SystemUnderTest = new CalendarMonth(2017, MonthOfYear.February),
                    ExpectedStringRepresentation = "2017-02",
                },
            });
        }