/// <summary>
        /// This method is used to verify requirements gathered from MS-OXCDATA.
        /// </summary>
        /// <param name="recipientRows">ReadRecipientRow structure.</param>
        private void TestMSOXCDATARequirements(ReadRecipientRow[] recipientRows)
        {
            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R177. The DisplayName is {0}.", recipientRows[0].RecipientRow.DisplayName);

            // Verify MS-OXCDATA requirement: MS-OXCDATA_R177
            Site.CaptureRequirementIfAreEqual<int>(
                recipientRows[0].RecipientRow.RecipientColumnCount,
                recipientRows[0].RecipientRow.RecipientProperties.PropertyValues.Count,
                CdataShortName,
                177,
                @"[In RecipientRow] RecipientColumnCount (2 bytes): This value [RecipientColumnCount] specifies the number of columns from the RecipientColumns field that are included in the RecipientProperties field.");

            bool isFieldRExist = Convert.ToBoolean(recipientRows[0].RecipientRow.RecipientFlags & 0x0080);

            if (isFieldRExist)
            {
                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R105. The RecipientFlags is {0}.", recipientRows[0].RecipientRow.RecipientFlags);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R105
                // R flag exists if RecipientFlags & 0x0080 is not 0.
                Site.CaptureRequirement(
                    CdataShortName,
                    105,
                    @"[In RecipientFlags Field] R (1 bit): (mask 0x0080).");
            }

            bool isFieldSExist = Convert.ToBoolean(recipientRows[0].RecipientRow.RecipientFlags & 0x0040);

            if (isFieldSExist)
            {
                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R107. The RecipientFlags is {0}.", recipientRows[0].RecipientRow.RecipientFlags);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R107
                // S flag exists if RecipientFlags & 0x0040 is not 0.
                Site.CaptureRequirement(
                    CdataShortName,
                    107,
                    @"[In RecipientFlags Field] S (1 bit): (mask 0x0040).");
            }

            bool isFieldDExist = Convert.ToBoolean(recipientRows[0].RecipientRow.RecipientFlags & 0x0010);

            if (isFieldDExist)
            {
                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R111. The RecipientFlags is {0}.", recipientRows[0].RecipientRow.RecipientFlags);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R111
                // D flag exists if RecipientFlags & 0x0010 is not 0.
                Site.CaptureRequirement(
                    CdataShortName,
                    111,
                    @"[In RecipientFlags Field] D (1 bit): (mask 0x0010).");

                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R112. The DisplayName is {0}.", recipientRows[0].RecipientRow.DisplayName);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R112
                Site.CaptureRequirementIfIsNotNull(
                    recipientRows[0].RecipientRow.DisplayName,
                    CdataShortName,
                    112,
                    @"[In RecipientFlags Field] D (1 bit): If this flag is b'1', the DisplayName field is included.");
                
                int lengthOfDisplayName = recipientRows[0].RecipientRow.DisplayName.Length;

                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R164. The DisplayName is {0}.", recipientRows[0].RecipientRow.DisplayName);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R164
                Site.CaptureRequirementIfAreEqual<ushort>(
                    0,
                    recipientRows[0].RecipientRow.DisplayName[lengthOfDisplayName - 1],
                    CdataShortName,
                    164,
                    @"[In RecipientRow Structure] DisplayName (optional) (variable): A null-terminated string.");

                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R165. The DisplayName is {0}.", recipientRows[0].RecipientRow.DisplayName);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R165
                Site.CaptureRequirementIfIsNotNull(
                    recipientRows[0].RecipientRow.DisplayName,
                    CdataShortName,
                    165,
                    @"[In RecipientRow Structure] DisplayName (optional) (variable): This field [DisplayName (optional) (variable)] MUST be present when the D flag of the RecipientsFlags field is set.");

                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R166. The DisplayName is {0}.", recipientRows[0].RecipientRow.DisplayName);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R166
                bool isVerifiedR166 = Common.IsUtf16LEString(recipientRows[0].RecipientRow.DisplayName);
                Site.CaptureRequirementIfIsTrue(
                    isVerifiedR166,
                    CdataShortName,
                    166,
                    @"[In RecipientRow Structure] DisplayName (optional) (variable): This field [DisplayName] MUST be specified in Unicode characters if the U flag of the RecipientsFlags field is set and in the 8-bit character.");
            }

            bool isFieldEExist = Convert.ToBoolean(recipientRows[0].RecipientRow.RecipientFlags & 0x0008);

            if (isFieldEExist)
            {
                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R113. The RecipientFlags is {0}.", recipientRows[0].RecipientRow.RecipientFlags);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R113
                // E flag exists if RecipientFlags & 0x0008 is not 0.
                Site.CaptureRequirement(
                    CdataShortName,
                    113,
                    @"[In RecipientFlags Field] E (1 bit): (mask 0x0008).");

                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R114. The EmailAddress is {0}.", recipientRows[0].RecipientRow.EmailAddress);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R112
                Site.CaptureRequirementIfIsNotNull(
                    recipientRows[0].RecipientRow.EmailAddress,
                    CdataShortName,
                    114,
                    @"[In RecipientFlags Field] E (1 bit): If this flag is b'1', the EmailAddress field is included.");

                 int lengthOfEmailAddress = recipientRows[0].RecipientRow.EmailAddress.Length;

                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R160. The EmailAddress is {0}.", recipientRows[0].RecipientRow.EmailAddress);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R160
                Site.CaptureRequirementIfAreEqual<ushort>(
                    0,
                    recipientRows[0].RecipientRow.EmailAddress[lengthOfEmailAddress - 1],
                    CdataShortName,
                    160,
                    @"[In RecipientRow Structure] EmailAddress (optional) (variable): A null-terminated string.");

                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R161. The EmailAddress is {0}.", recipientRows[0].RecipientRow.EmailAddress);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R161
                Site.CaptureRequirementIfIsNotNull(
                    recipientRows[0].RecipientRow.EmailAddress,
                    CdataShortName,
                    161,
                    @"[In RecipientRow Structure] EmailAddress (optional) (variable): This field [EmailAddress (optional) (variable)] MUST be present when the E flag of the RecipientsFlags field is set.");

                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R162. The EmailAddress is {0}.", recipientRows[0].RecipientRow.EmailAddress);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R162
                bool isVerifiedR162 = Common.IsUtf16LEString(recipientRows[0].RecipientRow.EmailAddress);
                Site.CaptureRequirementIfIsTrue(
                    isVerifiedR162,
                    CdataShortName,
                    162,
                    @"[In RecipientRow Structure] EmailAddress (optional) (variable): This field MUST be specified in Unicode characters if the U flag of the RecipientsFlags field is set and in the 8-bit character set.");
            }

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R115. The RecipientFlags is {0}.", recipientRows[0].RecipientRow.RecipientFlags);

            // Verify MS-OXCDATA requirement: MS-OXCDATA_R115
            bool isFieldTypeExist = Convert.ToBoolean(recipientRows[0].RecipientRow.RecipientFlags & 0x0007);

            Site.CaptureRequirementIfIsTrue(
                isFieldTypeExist,
                CdataShortName,
                115,
                @"[In RecipientFlags Field] Type (3 bits): (mask 0x0007).");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R117. The value of Type is {0}.", (int)recipientRows[0].RecipientRow.RecipientFlags & 0x0007);

            // Verify MS-OXCDATA requirement: MS-OXCDATA_R117
            int valueOfTypeField = (int)recipientRows[0].RecipientRow.RecipientFlags & 0x0007;
            bool isTypeValid = (valueOfTypeField & 0x0) == 0x0
                || (valueOfTypeField & 0x1) == 0x1
                || (valueOfTypeField & 0x2) == 0x2
                || (valueOfTypeField & 0x3) == 0x3
                || (valueOfTypeField & 0x4) == 0x4
                || (valueOfTypeField & 0x5) == 0x5
                || (valueOfTypeField & 0x6) == 0x6
                || (valueOfTypeField & 0x7) == 0x7;

            Site.CaptureRequirementIfIsTrue(
                isTypeValid,
                CdataShortName,
                117,
                @"[In  RecipientFlags Field] Type (3 bits):The valid types are: [NoType (0x0), X500DN (0x1), MsMail (0x2), SMTP (0x3), Fax (0x4), ProfessionalOfficeSystem (0x5), PersonalDistributionList1 (0x6), PersonalDistributionList2 (0x7)].");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R120.");

            // Verify MS-OXCDATA requirement: MS-OXCDATA_R108
            Site.CaptureRequirementIfAreEqual<int>(
                0x0000,
                (int)recipientRows[0].RecipientRow.RecipientFlags & 0x7800,
                CdataShortName,
                120,
                @"[In  RecipientFlags Field] Reserved (4 bits):  (mask 0x7800) The server MUST set this to b'0000'.");

            bool isFieldIExist = Convert.ToBoolean(recipientRows[0].RecipientRow.RecipientFlags & 0x0400);

            if (isFieldIExist)
            {
                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R121. The RecipientFlags is {0}.", recipientRows[0].RecipientRow.RecipientFlags);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R121
                // I flag exists if RecipientFlags & 0x0400 is not 0.
                Site.CaptureRequirement(
                    CdataShortName,
                    121,
                    @"[In  RecipientFlags Field] I (1 bit): (mask 0x0400).");

                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R122. The SimpleDisplayName is {0}.", recipientRows[0].RecipientRow.SimpleDisplayName);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R122
                Site.CaptureRequirementIfIsNotNull(
                    recipientRows[0].RecipientRow.SimpleDisplayName,
                    CdataShortName,
                    122,
                    @"[In RecipientFlags Field] I (1 bit): If this flag is b'1', the SimpleDisplayName field is included.");

                  int lengthOfSimpleDisplayName = recipientRows[0].RecipientRow.SimpleDisplayName.Length;

                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R168. The SimpleDisplayName is {0}.", recipientRows[0].RecipientRow.SimpleDisplayName);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R168
                Site.CaptureRequirementIfAreEqual<ushort>(
                    0,
                    recipientRows[0].RecipientRow.SimpleDisplayName[lengthOfSimpleDisplayName - 1],
                    CdataShortName,
                    168,
                    @"[In RecipientRow Structure] SimpleDisplayName (optional) (variable): A null-terminated string.");

                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R169. The SimpleDisplayName is {0}.", recipientRows[0].RecipientRow.SimpleDisplayName);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R169
                Site.CaptureRequirementIfIsNotNull(
                    recipientRows[0].RecipientRow.SimpleDisplayName,
                    CdataShortName,
                    169,
                    @"[In RecipientRow Structure] SimpleDisplayName (optional) (variable): This field [SimpleDisplayName (optional) (variable)] MUST be present when the I flag of the RecipientsFlags field is set.");

                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R170. The SimpleDisplayName is {0}.", recipientRows[0].RecipientRow.SimpleDisplayName);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R170
                bool isVerifiedR170 = Common.IsUtf16LEString(recipientRows[0].RecipientRow.SimpleDisplayName);
                Site.CaptureRequirementIfIsTrue(
                    isVerifiedR170,
                    CdataShortName,
                    170,
                    @"[In RecipientRow Structure] SimpleDisplayName (optional) (variable): This field MUST be specified in Unicode characters if the U flag of the RecipientsFlags field is set and in the 8-bit character set.");
            }

            bool isFieldUExist = Convert.ToBoolean(recipientRows[0].RecipientRow.RecipientFlags & 0x0200);

            if (isFieldUExist)
            {
                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R123. The RecipientFlags is {0}.", recipientRows[0].RecipientRow.RecipientFlags);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R123
                // U flag exists if RecipientFlags & 0x0200 is not 0.
                Site.CaptureRequirement(
                    CdataShortName,
                    123,
                    @"[In  RecipientFlags Field] U (1 bit): (mask 0x0200).");
            }

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R2764. The DisplayType is {0}.", recipientRows[0].RecipientRow.DisplayType);

            // Verify MS-OXCDATA requirement: MS-OXCDATA_R2764
            bool isDisplayTypeValid = (recipientRows[0].RecipientRow.DisplayType & 0x00) == 0x00
                || (recipientRows[0].RecipientRow.DisplayType & 0x01) == 0x01
                || (recipientRows[0].RecipientRow.DisplayType & 0x02) == 0x02
                || (recipientRows[0].RecipientRow.DisplayType & 0x03) == 0x03
                || (recipientRows[0].RecipientRow.DisplayType & 0x04) == 0x04
                || (recipientRows[0].RecipientRow.DisplayType & 0x05) == 0x05
                || (recipientRows[0].RecipientRow.DisplayType & 0x06) == 0x06;

            Site.CaptureRequirementIfIsTrue(
                isDisplayTypeValid,
                CdataShortName,
                2764,
                @"[In RecipientRow Structure] Valid values [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06] for this field [DisplayType (optional) (1 byte)] are specified in the following table.");

            if (((int)(recipientRows[0].RecipientRow.RecipientFlags & 0x0007) != 0x6) && ((int)(recipientRows[0].RecipientRow.RecipientFlags & 0x0007) != 0x7))
            {
                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R142. The EntryIdSize is {0}.", recipientRows[0].RecipientRow.EntryIdSize);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R142
                Site.CaptureRequirementIfAreEqual<ushort>(
                    0,
                    recipientRows[0].RecipientRow.EntryIdSize,
                    CdataShortName,
                    142,
                    @"[In RecipientRow Structure] EntryIdSize (optional) (2 bytes): This field MUST NOT be present otherwise. This value specifies the size of the EntryID field.");

                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R145. The EntryId is {0}.", recipientRows[0].RecipientRow.EntryId);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R145
                Site.CaptureRequirementIfIsNull(
                    recipientRows[0].RecipientRow.EntryId,
                    CdataShortName,
                    145,
                    @"[In RecipientRow Structure] EntryID (optional) (variable): This field [EntryID (optional) (variable)] MUST NOT be present otherwise.");

                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R150. The SearchKeySize is {0}.", recipientRows[0].RecipientRow.SearchKeySize);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R150
                Site.CaptureRequirementIfAreEqual<ushort>(
                    0,
                    recipientRows[0].RecipientRow.SearchKeySize,
                    CdataShortName,
                    150,
                    @"[In RecipientRow Structure] SearchKeySize (optional) (2 bytes): This field MUST NOT be present otherwise. This value specifies the size of the SearchKey field.");

                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R153. The SearchKey is {0}.", recipientRows[0].RecipientRow.SearchKey);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R150
                Site.CaptureRequirementIfIsNull(
                    recipientRows[0].RecipientRow.SearchKey,
                    CdataShortName,
                    153,
                    @"[In RecipientRow Structure] SearchKey (optional) (variable): This field [SearchKey (optional) (variable)] MUST NOT be present otherwise.");
            }

            bool isFieldOExist = Convert.ToBoolean(recipientRows[0].RecipientRow.RecipientFlags & 0x8000);

            if (!((int)(recipientRows[0].RecipientRow.RecipientFlags & 0x0007) == 0x0) || !isFieldOExist)
            {
                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R158. The AddressType is {0}.", recipientRows[0].RecipientRow.AddressType);

                // Verify MS-OXCDATA requirement: MS-OXCDATA_R158
                Site.CaptureRequirementIfIsNull(
                    recipientRows[0].RecipientRow.AddressType,
                    CdataShortName,
                    158,
                    @"[In RecipientRow Structure] AddressType (optional) (variable):  This field [AddressType (optional) (variable)] MUST NOT be present otherwise.");
            }
        }