static CellReferenceTest()
        {
            StringRepresentationTestScenarios
            .RemoveAllScenarios()
            .AddScenario(
                new StringRepresentationTestScenario <CellReference>
            {
                Name = "ToString() should return 'KNOWN MISSING' when the cell is Known Missing.",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                                                                  new SystemUnderTestExpectedStringRepresentation <CellReference>
                {
                    SystemUnderTest = CellReference.GetKnownMissing(),
                    ExpectedStringRepresentation = "KNOWN MISSING",
                },
            })
            .AddScenario(
                new StringRepresentationTestScenario <CellReference>
            {
                Name = "ToString() should return WorksheetQualifiedA1Reference when cell is NOT Known Missing.",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                {
                    var systemUnderTest = A.Dummy <CellReference>();

                    var result = new SystemUnderTestExpectedStringRepresentation <CellReference>
                    {
                        SystemUnderTest = systemUnderTest,
                        ExpectedStringRepresentation = systemUnderTest.WorksheetQualifiedA1Reference,
                    };

                    return(result);
                },
            });
        }
        static NotificationTrackingCodeTest()
        {
            ConstructorArgumentValidationTestScenarios
            .AddScenario(ConstructorArgumentValidationTestScenario <NotificationTrackingCode> .ConstructorCannotThrowScenario);

            StringRepresentationTestScenarios
            .AddScenario(() =>
                         new StringRepresentationTestScenario <NotificationTrackingCode>
            {
                Name = "ToString() gets friendly string representation",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                {
                    var systemUnderTest = A.Dummy <NotificationTrackingCode>();

                    var result = new SystemUnderTestExpectedStringRepresentation <NotificationTrackingCode>
                    {
                        SystemUnderTest = systemUnderTest,
                        ExpectedStringRepresentation = Invariant($"{systemUnderTest.Id}"),
                    };

                    return(result);
                },
            });
        }
        static SqlServerLocatorTest()
        {
            StringRepresentationTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new StringRepresentationTestScenario <SqlServerLocator>
            {
                Name = "Override ToString scenario",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                {
                    var systemUnderTest = A.Dummy <SqlServerLocator>();

                    var result = new SystemUnderTestExpectedStringRepresentation <SqlServerLocator>
                    {
                        SystemUnderTest = systemUnderTest,
                        ExpectedStringRepresentation = Invariant($"Naos.SqlServer.Domain.SqlServerLocator: ServerName = {systemUnderTest.ServerName?.ToString(CultureInfo.InvariantCulture) ?? "<null>"}, DatabaseName = {systemUnderTest.DatabaseName?.ToString(CultureInfo.InvariantCulture) ?? "<null>"}, UserName = {systemUnderTest.UserName?.ToString(CultureInfo.InvariantCulture) ?? "<null>"}, Password = ***, InstanceName = {systemUnderTest.InstanceName?.ToString(CultureInfo.InvariantCulture) ?? "<null>"}, Port = {systemUnderTest.Port?.ToString(CultureInfo.InvariantCulture) ?? "<null>"}."),
                    };

                    return(result);
                },
            });

            ConstructorArgumentValidationTestScenarios
            .RemoveAllScenarios()
            .AddScenario(
                () =>
                new ConstructorArgumentValidationTestScenario <SqlServerLocator>
            {
                Name             = "constructor should throw ArgumentNullException when parameter 'serverName' is null scenario",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <SqlServerLocator>();

                    var result = new SqlServerLocator(
                        null,
                        referenceObject.DatabaseName,
                        referenceObject.UserName,
                        referenceObject.Password,
                        referenceObject.InstanceName,
                        referenceObject.Port);

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentNullException),
                ExpectedExceptionMessageContains = new[]
                {
                    "serverName",
                },
            })
            .AddScenario(
                () =>
                new ConstructorArgumentValidationTestScenario <SqlServerLocator>
            {
                Name             = "constructor should throw ArgumentException when parameter 'serverName' is white space scenario",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <SqlServerLocator>();

                    var result = new SqlServerLocator(
                        Invariant($"  {Environment.NewLine}  "),
                        referenceObject.DatabaseName,
                        referenceObject.UserName,
                        referenceObject.Password,
                        referenceObject.InstanceName,
                        referenceObject.Port);

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentException),
                ExpectedExceptionMessageContains = new[]
                {
                    "serverName",
                    "white space",
                },
            })
            .AddScenario(
                () =>
                new ConstructorArgumentValidationTestScenario <SqlServerLocator>
            {
                Name             = "constructor should throw ArgumentNullException when parameter 'databaseName' is null scenario",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <SqlServerLocator>();

                    var result = new SqlServerLocator(
                        referenceObject.ServerName,
                        null,
                        referenceObject.UserName,
                        referenceObject.Password,
                        referenceObject.InstanceName,
                        referenceObject.Port);

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentNullException),
                ExpectedExceptionMessageContains = new[]
                {
                    "databaseName",
                },
            })
            .AddScenario(
                () =>
                new ConstructorArgumentValidationTestScenario <SqlServerLocator>
            {
                Name             = "constructor should throw ArgumentException when parameter 'databaseName' is white space scenario",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <SqlServerLocator>();

                    var result = new SqlServerLocator(
                        referenceObject.ServerName,
                        Invariant($"  {Environment.NewLine}  "),
                        referenceObject.UserName,
                        referenceObject.Password,
                        referenceObject.InstanceName,
                        referenceObject.Port);

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentException),
                ExpectedExceptionMessageContains = new[]
                {
                    "databaseName",
                    "white space",
                },
            });
        }
        static TypeRepresentationTest()
        {
            ConstructorArgumentValidationTestScenarios
            .RemoveAllScenarios()
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <TypeRepresentation>
            {
                Name             = "constructor should throw ArgumentNullException when parameter 'namespace' is null scenario",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <TypeRepresentation>();

                    var result = new TypeRepresentation(
                        null,
                        referenceObject.Name,
                        referenceObject.AssemblyName,
                        referenceObject.AssemblyVersion,
                        referenceObject.GenericArguments);

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentNullException),
                ExpectedExceptionMessageContains = new[] { "namespace" },
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <TypeRepresentation>
            {
                Name             = "constructor should throw ArgumentException when parameter 'namespace' is white space scenario",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <TypeRepresentation>();

                    var result = new TypeRepresentation(
                        Invariant($"  {Environment.NewLine}  "),
                        referenceObject.Name,
                        referenceObject.AssemblyName,
                        referenceObject.AssemblyVersion,
                        referenceObject.GenericArguments);

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentException),
                ExpectedExceptionMessageContains = new[] { "namespace", "white space" },
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <TypeRepresentation>
            {
                Name             = "constructor should throw ArgumentNullException when parameter 'name' is null scenario",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <TypeRepresentation>();

                    var result = new TypeRepresentation(
                        referenceObject.Namespace,
                        null,
                        referenceObject.AssemblyName,
                        referenceObject.AssemblyVersion,
                        referenceObject.GenericArguments);

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentNullException),
                ExpectedExceptionMessageContains = new[] { "name" },
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <TypeRepresentation>
            {
                Name             = "constructor should throw ArgumentException when parameter 'name' is white space scenario",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <TypeRepresentation>();

                    var result = new TypeRepresentation(
                        referenceObject.Namespace,
                        Invariant($"  {Environment.NewLine}  "),
                        referenceObject.AssemblyName,
                        referenceObject.AssemblyVersion,
                        referenceObject.GenericArguments);

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentException),
                ExpectedExceptionMessageContains = new[] { "name", "white space" },
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <TypeRepresentation>
            {
                Name             = "constructor should throw ArgumentNullException when parameter 'assemblyName' is null scenario",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <TypeRepresentation>();

                    var result = new TypeRepresentation(
                        referenceObject.Namespace,
                        referenceObject.Name,
                        null,
                        referenceObject.AssemblyVersion,
                        referenceObject.GenericArguments);

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentNullException),
                ExpectedExceptionMessageContains = new[] { "assemblyName" },
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <TypeRepresentation>
            {
                Name             = "constructor should throw ArgumentException when parameter 'assemblyName' is white space scenario",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <TypeRepresentation>();

                    var result = new TypeRepresentation(
                        referenceObject.Namespace,
                        referenceObject.Name,
                        Invariant($"  {Environment.NewLine}  "),
                        referenceObject.AssemblyVersion,
                        referenceObject.GenericArguments);

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentException),
                ExpectedExceptionMessageContains = new[] { "assemblyName", "white space" },
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <TypeRepresentation>
            {
                Name             = "constructor should throw ArgumentException when parameter 'assemblyVersion' is white space scenario",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <TypeRepresentation>();

                    var result = new TypeRepresentation(
                        referenceObject.Namespace,
                        referenceObject.Name,
                        referenceObject.AssemblyName,
                        Invariant($"  {Environment.NewLine}  "),
                        referenceObject.GenericArguments);

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentException),
                ExpectedExceptionMessageContains = new[] { "assemblyVersion", "white space" },
            })
            .AddScenario(() =>
                         new ConstructorArgumentValidationTestScenario <TypeRepresentation>
            {
                Name             = "constructor should throw ArgumentException when parameter 'genericArguments' contains a null element scenario",
                ConstructionFunc = () =>
                {
                    var referenceObject = A.Dummy <TypeRepresentation>().ThatIs(_ => _.IsClosedGenericType());

                    var result = new TypeRepresentation(
                        referenceObject.Namespace,
                        referenceObject.Name,
                        referenceObject.AssemblyName,
                        referenceObject.AssemblyVersion,
                        new TypeRepresentation[0].Concat(referenceObject.GenericArguments).Concat(new TypeRepresentation[] { null }).Concat(referenceObject.GenericArguments).ToList());

                    return(result);
                },
                ExpectedExceptionType            = typeof(ArgumentException),
                ExpectedExceptionMessageContains = new[] { "genericArguments", "contains at least one null element" },
            });

            ConstructorPropertyAssignmentTestScenarios
            .AddScenario(() =>
                         new ConstructorPropertyAssignmentTestScenario <TypeRepresentation>
            {
                Name = "GenericArguments should return null, when 'genericArguments' parameter passed to constructor is null, when getting",
                SystemUnderTestExpectedPropertyValueFunc = () =>
                {
                    var referenceObject = A.Dummy <TypeRepresentation>();

                    var result = new SystemUnderTestExpectedPropertyValue <TypeRepresentation>
                    {
                        SystemUnderTest = new TypeRepresentation(
                            referenceObject.Namespace,
                            referenceObject.Name,
                            referenceObject.AssemblyName,
                            referenceObject.AssemblyVersion,
                            null),
                        ExpectedPropertyValue = null,
                    };

                    return(result);
                },
                PropertyName = "GenericArguments",
            });

            StringRepresentationTestScenarios
            .AddScenario(() =>
                         new StringRepresentationTestScenario <TypeRepresentation>
            {
                Name = "ToString should return the same string as BuildAssemblyQualifiedName() when called",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                {
                    var systemUnderTest = A.Dummy <TypeRepresentation>();

                    var result = new SystemUnderTestExpectedStringRepresentation <TypeRepresentation>
                    {
                        SystemUnderTest = systemUnderTest,
                        ExpectedStringRepresentation = systemUnderTest.BuildAssemblyQualifiedName(),
                    };

                    return(result);
                },
            })
            .AddScenario(() =>
                         new StringRepresentationTestScenario <TypeRepresentation>
            {
                Name = "ToString should return the Assembly Qualified Name when called",
                SystemUnderTestExpectedStringRepresentationFunc = () =>
                {
                    var systemUnderTest = typeof(IReadOnlyCollection <string> [, ]).ToRepresentation();

                    var result = new SystemUnderTestExpectedStringRepresentation <TypeRepresentation>
                    {
                        SystemUnderTest = systemUnderTest,
                        ExpectedStringRepresentation = "System.Collections.Generic.IReadOnlyCollection`1[[System.String, mscorlib, Version=4.0.0.0]][,], mscorlib, Version=4.0.0.0",
                    };

                    return(result);
                },
            });
        }