/// <summary>
        /// Verify RopExpandRow Failure Response
        /// </summary>
        /// <param name="ropExpandRowResponse">The response of RopExpandRow request</param>
        /// <param name="inputHandleIndex">The field of InputHandleIndex in RopExpandRow request</param>
        private void VerifyRopExpandRowFailureResponse(RopExpandRowResponse ropExpandRowResponse, byte inputHandleIndex)
        {
            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R1561");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R1561
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte),
                ropExpandRowResponse.RopId.GetType(),
                1561,
                @"[In RopExpandRow ROP Failure Response Buffer] RopId (1 byte): An unsigned integer.");

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

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R1563
            Site.CaptureRequirementIfAreEqual<byte>(
                (byte)RopId.RopExpandRow,
                ropExpandRowResponse.RopId,
                1563,
                @"[In RopExpandRow ROP Failure Response Buffer] RopId (1 byte): For this operation[RopExpandRow], this field[RopId (1 byte)] is set to 0x59.");

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

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R1564
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte),
                ropExpandRowResponse.InputHandleIndex.GetType(),
                1564,
                @"[In RopExpandRow ROP Failure Response Buffer] InputHandleIndex (1 byte): An unsigned integer.");

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

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R1565
            Site.CaptureRequirementIfAreEqual<byte>(
                inputHandleIndex,
                ropExpandRowResponse.InputHandleIndex,
                1565,
                @"[In RopExpandRow ROP Failure Response Buffer] InputHandleIndex (1 byte): This index MUST be set to the value specified in the InputHandleIndex field in the request.");

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

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R1566
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(uint),
                ropExpandRowResponse.ReturnValue.GetType(),
                1566,
                @"[In RopExpandRow ROP Failure Response Buffer] ReturnValue (4 bytes): An unsigned integer.");

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

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R1568
            Site.CaptureRequirementIfAreNotEqual<uint>(
                SuccessReturnValue,
                ropExpandRowResponse.ReturnValue,
                1568,
                @"[In RopExpandRow ROP Failure Response Buffer] ReturnValue (4 bytes): For this response[Failure Response], this field is set to a value other than 0x00000000.");
        }
        /// <summary>
        /// Verify ropExpandRow
        /// </summary>
        /// <param name="expandRowResponse">RopExpandRowResponse structure data that needs verification</param>
        /// <param name="theValueMaxRowCountInExpandRowrequest">The value of the MaxRowCount field in the ROP request buffer</param>
        private void VerifyRopExpandRowResponse(RopExpandRowResponse expandRowResponse, ushort theValueMaxRowCountInExpandRowrequest)
        {
            this.VerifyRPCLayerRequirement();

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

            // Verify MS-OXCTABL requirement: MS-OXCTABL_R278
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(ushort),
                expandRowResponse.RowCount.GetType(),
                278,
                @"[In RopExpandRow ROP Response Buffer] ExpandedRowCount (4 bytes): An unsigned integer that specifies the total number of rows that are in the expanded category.");

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

            // Verify MS-OXCTABL requirement: MS-OXCTABL_R279
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(ushort),
                expandRowResponse.RowCount.GetType(),
                279,
                @"[In RopExpandRow ROP Response Buffer] RowCount (2 bytes): An unsigned integer that specifies the number of PropertyRow structures, as specified in [MS-OXCDATA] section 2.8.1, that are contained in the RowData field.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCTABL_R280: the value of the RowCount field in the response for RopExpandRow is set to {0}", expandRowResponse.RowCount);

            // Verify MS-OXCTABL requirement: MS-OXCTABL_R280
            bool isVerifyR280 = expandRowResponse.RowCount <= theValueMaxRowCountInExpandRowrequest;

            Site.CaptureRequirementIfIsTrue(
                isVerifyR280,
                280,
                @"[In RopExpandRow ROP Response Buffer] The value of this field [RowCount] MUST be less than or equal to the value of the MaxRowCount field in the ROP request buffer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCTABL_R281: the value of the RowCount field is:{0}, and ExpandedRowCount is:{1}", expandRowResponse.RowCount, expandRowResponse.ExpandedRowCount);

            // Verify MS-OXCTABL requirement: MS-OXCTABL_R281
            bool isVerifyR281 = expandRowResponse.RowCount <= expandRowResponse.ExpandedRowCount;

            Site.CaptureRequirementIfIsTrue(
                isVerifyR281,
                281,
                @"[In RopExpandRow ROP Response Buffer] The value of this field [RowCount] MUST be less than or equal to the value of the ExpandedRowCount field in the ROP response buffer.");
        }
        /// <summary>
        /// Verify RopExpandRow Success Response
        /// </summary>
        /// <param name="ropExpandRowResponse">The response of RopExpandRow request</param>
        /// <param name="inputHandleIndex">The field of InputHandleIndex in RopExpandRow request</param>
        /// <param name="propertyTags">Array of PropertyTag structures specifies the property values that are visible in table rows, set by a RopSetColumns request</param>
        private void VerifyRopExpandRowSuccessResponse(RopExpandRowResponse ropExpandRowResponse, byte inputHandleIndex, PropertyTag[] propertyTags)
        {
            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R1545");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R1545
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte),
                ropExpandRowResponse.RopId.GetType(),
                1545,
                @"[In RopExpandRow ROP Success Response Buffer] RopId (1 byte): An unsigned integer.");

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

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R1547
            Site.CaptureRequirementIfAreEqual<byte>(
                (byte)RopId.RopExpandRow,
                ropExpandRowResponse.RopId,
                1547,
                @"[In RopExpandRow ROP Success Response Buffer] RopId (1 byte): For this operation[RopExpandRow], this field[RopId (1 byte)] is set to 0x59.");

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

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R1548
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte),
                ropExpandRowResponse.InputHandleIndex.GetType(),
                1548,
                @"[In RopExpandRow ROP Success Response Buffer] InputHandleIndex (1 byte): An unsigned integer.");

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

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R1549
            Site.CaptureRequirementIfAreEqual<byte>(
                inputHandleIndex,
                ropExpandRowResponse.InputHandleIndex,
                1549,
                @"[In RopExpandRow ROP Success Response Buffer] InputHandleIndex (1 byte): This index MUST be set to the value specified in the InputHandleIndex field in the request.");

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

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R1550
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(uint),
                ropExpandRowResponse.ReturnValue.GetType(),
                1550,
                @"[In RopExpandRow ROP Success Response Buffer] ReturnValue (4 bytes): An unsigned integer.");

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

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R1552
            Site.CaptureRequirementIfAreEqual<uint>(
                SuccessReturnValue,
                ropExpandRowResponse.ReturnValue,
                1552,
                @"[In RopExpandRow ROP Success Response Buffer] ReturnValue (4 bytes): For this response[Success Response], this field is set to 0x00000000.");

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

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R1553
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(uint),
                ropExpandRowResponse.ExpandedRowCount.GetType(),
                1553,
                @"[In RopExpandRow ROP Success Response Buffer] ExpandedRowCount (4 bytes): An unsigned integer.");

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

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R1555
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(ushort),
                ropExpandRowResponse.RowCount.GetType(),
                1555,
                @"[In RopExpandRow ROP Success Response Buffer] RowCount (2 bytes): An unsigned integer.");

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

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R1558
            Site.CaptureRequirementIfAreEqual<ushort>(
                ropExpandRowResponse.RowCount,
                (ushort)ropExpandRowResponse.RowData.Count,
                1558,
                @"[In RopExpandRow ROP Success Response Buffer] RowData (variable): The number of structures contained in this field is specified by the RowCount field.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R1560,the actual value of the RowData is {0}", ropExpandRowResponse.RowData);

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R1560
            // Assume the result is true. If one of rows element's count not equal columns count, then false.
            bool isVerifyR1560 = true;
            foreach (PropertyRow propertyRow in ropExpandRowResponse.RowData.PropertyRows)
            {
                isVerifyR1560 = isVerifyR1560 && (propertyRow.PropertyValues.Count == propertyTags.Length);

                // If one row element's count not equal columns count then break the iteration
                if (!isVerifyR1560)
                {
                    break;
                }
            }

            Site.CaptureRequirementIfIsTrue(
                isVerifyR1560,
                1560,
                @"[In RopExpandRow ROP Success Response Buffer] RowData (variable): The columns used for these rows were those previously set on this table by a RopSetColumns ROP request (section 2.2.5.1).");

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

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R1557
            Site.CaptureRequirementIfAreEqual<Type>(
                ropExpandRowResponse.RowData.PropertyRows.GetType(),
                typeof(List<PropertyRow>),
                1557,
                @"[In RopExpandRow ROP Success Response Buffer] RowData (variable): A list of PropertyRow structures.");

            foreach (PropertyRow propertyRow in ropExpandRowResponse.RowData.PropertyRows)
            {
                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCDATA_R76");

                // Verify MS-OXCROPS requirement: MS-OXCDATA_R76
                Site.CaptureRequirementIfAreEqual<Type>(
                    typeof(byte),
                    propertyRow.Flag.GetType(),
                    "MS-OXCDATA",
                    76,
                    @"[In FlaggedPropertyRow Structure] Flag (1 byte): An unsigned integer.");

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

                // Verify MS-OXCROPS requirement: MS-OXCDATA_R80
                Site.CaptureRequirementIfAreEqual<Type>(
                    typeof(List<PropertyValue>),
                    propertyRow.PropertyValues.GetType(),
                    "MS-OXCDATA",
                    80,
                    @"[In FlaggedPropertyRow Structure] ValueArray (variable):  An array of variable-sized structures.");
            }
        }