ExtractionRules.cs 2.88 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using Microsoft.VisualStudio.TestTools.WebTesting;
using Microsoft.VisualStudio.TestTools.LoadTesting;
using System.IO;
using System.ComponentModel;

namespace LIL_VSTT_Plugins
{
    /// <summary>
    /// Nästlad extraction rule
    /// Kombination av två extractions rules i en. Den andra söker i resultatet av den första.
    /// </summary>
    [DisplayName("Nested Extraction")]
    [Description("(C) Copyright 2011 LIGHTS IN LINE AB\r\nKombination av två extractions där den andra söker i resultatet av den första.")]
    public class NestedExtractionRule : ExtractionRule
    {
        // Indata
        private string start1;
        [DisplayName("Extraction 1 Starts With")]
        [Description("")]
        public string Start1
        {
            get { return start1; }
            set { start1 = value; }
        }

        private string end1;
        [DisplayName("Extraction 1 Ends With")]
        [Description("")]
        public string End1
        {
            get { return end1; }
            set { end1 = value; }
        }

        private string start2;
        [DisplayName("Extraction 2 Starts With")]
        [Description("")]
        public string Start2
        {
            get { return start2; }
            set { start2 = value; }
        }

        private string end2;
        [DisplayName("Exctration 2 Ends With")]
        [Description("")]
        public string End2
        {
            get { return end2; }
            set { end2 = value; }
        }

        public override void Extract(object sender, ExtractionEventArgs e)
        {
            // Find the first extraction
            // TODO: Du behöver spola fram till att börja sökningen av end1 EFTER start1!
            string extraction1;
            int s1, s2, e1, e2;

            s1 = e.Response.BodyString.IndexOf(start1) + start1.Length;
            e1 = e.Response.BodyString.IndexOf(end1);

            // Validate
            if (s1 > e.Response.BodyString.Length || (e1 - s1 < 1))
            {
                // Error
                e.Success = false;
                return;
            }

            extraction1 = e.Response.BodyString.Substring(s1, e1 - s1);

            // Find the second extraction
            // TODO: Du behöver spola fram till att börja sökningen av end2 EFTER start2!
            string extraction2;

            s2 = extraction1.IndexOf(start2) + start2.Length;
            e2 = extraction1.IndexOf(end2);

            // Validate
            if (s2 > extraction1.Length || (e2 - s2 < 1))
            {
                // Error
                e.Success = false;
                return;
            }

            extraction2 = extraction1.Substring(s2, e2 - s2);


            e.WebTest.Context.Add(this.ContextParameterName, extraction2);
            e.Success = true;
        }
    }
}