/// <summary>
        /// Capture requirements related with WhoAmISubResponseDataType
        /// </summary>
        /// <param name="whoamiSubResponseData">The WhoAmISubResponseData information</param>
        /// <param name="site">Instance of ITestSite</param>
        private static void ValidateWhoAmISubResponseDataType(WhoAmISubResponseDataType whoamiSubResponseData, ITestSite site)
        {
            // Verify MS-FSSHTTP requirement: MS-FSSHTTP_R757
            site.CaptureRequirement(
                     "MS-FSSHTTP",
                     757,
                     @"[In WhoAmISubResponseDataType][WhoAmISubResponseDataType schema is:]
                     <xs:complexType name=""WhoAmISubResponseDataType"">
                     <xs:attributeGroup ref=""tns:WhoAmISubResponseDataOptionalAttributes""/>
                     </xs:complexType>");

            // Verify MS-FSSHTTP requirement: MS-FSSHTTP_R1396
            // The SubResponseData of WhoamiSubResponse is of type WhoAmISubResponseDataType, so if whoamiSubResponse.SubResponseData is not null, then MS-FSSHTTP_R1396 can be captured.
            site.CaptureRequirementIfAreEqual<Type>(
                     typeof(WhoAmISubResponseDataType),
                     whoamiSubResponseData.GetType(),
                     "MS-FSSHTTP",
                     1396,
                     @"[In SubResponseDataGenericType][SubResponseDataGenericType MUST take one of the forms described in the following table] WhoAmISubResponseDataType: Type definition for Who Am I subresponse data.");

            // Verify MS-FSSHTTP requirement: MS-FSSHTTP_R1322
            site.CaptureRequirementIfAreEqual<Type>(
                     typeof(WhoAmISubResponseDataType),
                     whoamiSubResponseData.GetType(),
                     "MS-FSSHTTP",
                     1322,
                     @"[In WhoAmI Subrequest] The WhoAmISubResponseDataType defines the type of the SubResponseData element inside the WhoAmI SubResponse element.");

            // Verify MS-FSSHTTP requirement: MS-FSSHTTP_R1543
            site.CaptureRequirement(
                     "MS-FSSHTTP",
                     1543,
                     @"[In WhoAmISubResponseDataOptionalAttributes][UserLoginType] The UserLogin attribute MUST be specified in a WhoAmI subresponse that is generated in response to a WhoAmI subrequest.");

            if (whoamiSubResponseData.UserName != null
                || whoamiSubResponseData.UserEmailAddress != null
                || whoamiSubResponseData.UserSIPAddress != null)
            {
                // Verify requirements related with WhoAmISubResponseDataOptionalAttributes
                ValidateWhoAmISubResponseDataOptionalAttributes(whoamiSubResponseData, 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 WhoAmISubResponseDataOptionalAttributes.
        /// </summary>
        /// <param name="whoamiSubResponseData">The WhoAmISubResponseData</param>
        /// <param name="site">Instance of ITestSite</param>
        private static void ValidateWhoAmISubResponseDataOptionalAttributes(WhoAmISubResponseDataType whoamiSubResponseData, ITestSite site)
        {
            if (whoamiSubResponseData.UserName != null)
            {
                // Verify requirements related with UserNameTypes
                ValidateUserNameTypes(site);

                // Verify MS-FSSHTTP requirement: MS-FSSHTTP_R794
                site.CaptureRequirement(
                         "MS-FSSHTTP",
                         794,
                         @"[In UserNameType] UserNameType is the type definition of the UserName attribute, which is part of the subresponse for a Who Am I subrequest.");

                // Verify MS-FSSHTTP requirement: MS-FSSHTTP_R2130
                site.CaptureRequirement(
                         "MS-FSSHTTP",
                         2130,
                         @" [In WhoAmISubResponseDataOptionalAttributes] UserName: [is] A UserNameType [that specifies the user name for the client.]");
            }

            if (!string.IsNullOrEmpty(whoamiSubResponseData.UserEmailAddress))
            {
                ValidateUserEmailAddress(whoamiSubResponseData.UserEmailAddress, site);
            }

            // Verify MS-FSSHTTP requirement: MS-FSSHTTP_R903
            site.CaptureRequirement(
                     "MS-FSSHTTP",
                     903,
                     @"[In WhoAmISubResponseDataOptionalAttributes] The schema definition of the WhoAmISubResponseDataOptionalAttributes attribute group is as follows:
                     <xs:attributeGroup name=""WhoAmISubResponseDataOptionalAttributes"">
                         <xs:attribute name=""UserName"" type=""tns:UserNameType"" use=""optional""/>
                         <xs:attribute name=""UserEmailAddress"" type=""xs:string"" use=""optional""/>
                         <xs:attribute name=""UserSIPAddress"" type=""xs:string"" use=""optional"" />
                         <xs:attribute name=""UserIsAnonymous"" type=""xs:boolean"" use=""optional"" />
                         <xs:attribute name=""UserLogin"" type=""xs:UserLoginType"" use=""optional"" />
                     </xs:attributeGroup>");

            // Verify MS-FSSHTTP requirement: MS-FSSHTTP_R1466
            site.CaptureRequirement(
                     "MS-FSSHTTP",
                     1466,
                     @"[In WhoAmISubResponseDataOptionalAttributes] The WhoAmISubResponseDataOptionalAttributes attribute group contains attributes that MUST be used in SubResponseData elements associated with a subresponse for a Who Am I subrequest.");

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