/// <summary>
        /// Capture requirements related with CellSubResponseDataType.
        /// </summary>
        /// <param name="cellSubResponseData">The cellSubResponseData</param>
        /// <param name="site">Instance of ITestSite</param>
        private static void ValidateCellSubResponseDataType(CellSubResponseDataType cellSubResponseData, ITestSite site)
        {
            // Verify MS-FSSHTTP requirement: MS-FSSHTTP_R1391
            // The SubResponseData of CellSubResponse is of type CellSubResponseDataType, so if cellSubResponse.SubResponseData is not null, then MS-FSSHTTP_R1391 can be captured.
            site.CaptureRequirementIfAreEqual<Type>(
                     typeof(CellSubResponseDataType),
                     cellSubResponseData.GetType(),
                     "MS-FSSHTTP",
                     1391,
                     @"[In SubResponseDataGenericType][SubResponseDataGenericType MUST take one of the forms described in the following table] CellSubResponseDataType: Type definition for cell subresponse data.");

            if (cellSubResponseData.LockTypeSpecified)
            {
                // Verified LockTypes
                ValidateLockTypes(site);
            }

            // Verify requirements related with CellSubResponseDataOptionalAttributes
            if (cellSubResponseData.Etag != null
                || cellSubResponseData.LastModifiedTime != null
                || cellSubResponseData.CreateTime != null
                || cellSubResponseData.ModifiedBy != null
                || cellSubResponseData.CoalesceErrorMessage != null)
            {
                ValidateCellSubResponseDataOptionalAttributes(cellSubResponseData, site);
            }
        }
        /// <summary>
        /// Capture requirements related with SubResponseDataOptionalAttributes type
        /// </summary>
        /// <param name="subResponseData">The SubResponseData information</param>
        /// <param name="site">Instance of ITestSite</param>
        private static void ValidateSubResponseDataOptionalAttributes(SubResponseDataGenericType subResponseData, ITestSite site)
        {
            // Verify MS-FSSHTTP requirement: MS-FSSHTTP_R458
            site.CaptureRequirement(
                     "MS-FSSHTTP",
                     458,
                     @"[In SubResponseDataOptionalAttributes] The definition of the SubResponseDataOptionalAttributes attribute group is as follows:
                     <xs:attributeGroup name=""SubResponseDataOptionalAttributes"">
                         <xs:attributeGroup ref=""tns:CellSubResponseDataOptionalAttributes""/>
                         <xs:attributeGroup ref=""tns:WhoAmISubResponseDataOptionalAttributes""/>
                         <xs:attribute name=""ServerTime"" type=""xs:positiveInteger"" use=""optional""/>
                         <xs:attribute name=""LockType"" type=""tns:LockTypes"" use=""optional"" />
                         <xs:attribute name=""CoauthStatus"" type=""tns:CoauthStatusType"" use=""optional""/>
                         <xs:attribute name=""TransitionID"" type=""tns:guid"" use=""optional""/>
                         <xs:attribute name=""ExclusiveLockReturnReason"" type=""tns:ExclusiveLockReturnReasonTypes"" use=""optional"" /> 
                     </xs:attributeGroup>");

            // Verify requirements related with CellSubResponseDataOptionalAttributes
            if (subResponseData.Etag != null
                || subResponseData.CreateTime != null
                || subResponseData.ModifiedBy != null
                || subResponseData.LastModifiedTime != null
                || subResponseData.CoalesceErrorMessage != null)
            {
                CellSubResponseDataType cellSubResponseData = new CellSubResponseDataType();
                cellSubResponseData.Etag = subResponseData.Etag;
                cellSubResponseData.CreateTime = subResponseData.CreateTime;
                cellSubResponseData.ModifiedBy = subResponseData.ModifiedBy;
                cellSubResponseData.LastModifiedTime = subResponseData.LastModifiedTime;
                cellSubResponseData.CoalesceErrorMessage = subResponseData.CoalesceErrorMessage;
                ValidateCellSubResponseDataOptionalAttributes(cellSubResponseData, site);
            }

            // Verify requirements related with WhoAmISubResponseDataOptionalAttributes
            if (subResponseData.UserName != null
                || subResponseData.UserEmailAddress != null
                || subResponseData.UserSIPAddress != null)
            {
                WhoAmISubResponseDataType whoamiSubResponseData = new WhoAmISubResponseDataType();
                whoamiSubResponseData.UserName = subResponseData.UserName;
                whoamiSubResponseData.UserEmailAddress = subResponseData.UserEmailAddress;
                whoamiSubResponseData.UserSIPAddress = subResponseData.UserSIPAddress;
                ValidateWhoAmISubResponseDataOptionalAttributes(whoamiSubResponseData, site);
            }

            if (subResponseData.ServerTime != null)
            {
                // Verify MS-FSSHTTP requirement: MS-FSSHTTP_R463
                site.CaptureRequirement(
                         "MS-FSSHTTP",
                         463,
                         @"[In SubResponseDataOptionalAttributes] ServerTime: A positive integer that specifies the server time, which is expressed as a tick count.");
            }

            if (subResponseData.LockTypeSpecified)
            {
                // Verify LockTypes
                ValidateLockTypes(site);
            }

            if (subResponseData.CoauthStatusSpecified)
            {
                // Verify CoauthStatusType
                ValidateCoauthStatusType(site);
            }

            if (subResponseData.TransitionID != null)
            {
                // Verify GUID type
                ValidateGUID(site);
            }

            if (subResponseData.ExclusiveLockReturnReasonSpecified)
            {
                // Verify ExclusiveLockReturnReasonTypes
                ValidateExclusiveLockReturnReasonTypes(site);
            }
        }
        /// <summary>
        /// Capture requirements related with CellSubResponseDataOptionalAttributes.
        /// </summary>
        /// <param name="cellSubResponseData">The cellSubResponseData</param>
        /// <param name="site">Instance of ITestSite</param>
        private static void ValidateCellSubResponseDataOptionalAttributes(CellSubResponseDataType cellSubResponseData, ITestSite site)
        {
            if (cellSubResponseData.ModifiedBy != null)
            {
                // Verify requirements related with UserNameTypes
                ValidateUserNameTypes(site);
            }

            // Verify MS-FSSHTTP requirement: MS-FSSHTTP_R1465
            site.CaptureRequirement(
                     "MS-FSSHTTP",
                     1465,
                     @"[In CellSubResponseDataOptionalAttributes] The CellSubResponseDataOptionalAttributes attribute group contains attributes that is used in SubResponseData elements associated with a SubResponse for a cell subrequest.");

            // Verify MS-FSSHTTP requirement: MS-FSSHTTP_R1497
            site.CaptureRequirement(
                     "MS-FSSHTTP",
                     1497,
                     @"[In SubResponseDataOptionalAttributes] CellSubResponseDataOptionalAttributes: An attribute group that specifies attributes that MUST be used for SubResponseData elements associated with a subresponse for a cell subrequest.");

            // Verify MS-FSSHTTP requirement: MS-FSSHTTP_R839
            site.CaptureRequirement(
                     "MS-FSSHTTP",
                     839,
                     @"[In CellSubResponseDataOptionalAttributes] The definition of the CellSubResponseDataOptionalAttributes attribute group is as follows:
                     <xs:attributeGroup name=""CellSubResponseDataOptionalAttributes"">
                         <xs:attribute name=""Etag"" type=""xs:string"" use=""optional"" />
                         <xs:attribute name=""CreateTime"" type=""xs:integer"" use=""optional""/>
                         <xs:attribute name=""LastModifiedTime"" type=""xs:integer"" use=""optional""/>
                         <xs:attribute name=""ModifiedBy"" type=""tns:UserNameType"" use=""optional"" />
                         <xs:attribute name=""CoalesceErrorMessage"" type=""xs:string"" use=""optional""/>
                         <xs:attribute name=""CoalesceHResult"" type=""xs:integer"" use=""optional""/>
                         <xs:attribute name=""ContainsHotboxData"" type=""tns:TRUEFALSE"" use=""optional""/>
                         <xs:attribute name=""HaveOnlyDemotionChanges"" type=""tns:TRUEFALSE"" use=""optional""/>
                     </xs:attributeGroup>");
        }