65.9K
CodeProject is changing. Read more.
Home

Aubergine (BDD for .NET) v0.06 : Support for Parameter Tables in given/when/then

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0 vote)

Nov 12, 2009

CPOL
viewsIcon

8221

Ok, we keep on going; now we support parameter tables for given/when/then, which are parsed as array members. I am now getting very close to full cucumber-like support !!! Oh, I forgot to mention that the "And" keyword is also supported now !!

Context    Be.Corebvba.Aubergine.Examples.Website.Contexts.BrowserContext
ContextDLL Be.Corebvba.Aubergine.Examples.DLL

Story: Make sure my website gets enough visibility. As a website owner. I want to make sure that I get enough visibility. So that I can get enough traffic.

Scenario Search results for 'keywords' on searchengine should contain 'my url':

  • Given the current url is 'search url'
  • When searching for 'keywords'
  • Then the result should contain 'my url'
        Example
        +--------------+--------------------------------+------------------+-----------------+
        | searchengine | search url                     | keywords         | my url          |
        +--------------+--------------------------------+------------------+-----------------+
        | google       | http://www.google.be/search?q= | BDD .Net         | www.corebvba.be |
        | bing         | http://www.bing.com/search?q=  | core bvba tom    | www.corebvba.be |
        | bing         | http://www.bing.com/search?q=  | Quantum physics  | www.corebvba.be |
        | faulty link  | http://www.googleaaa           | core bvba tom    | www.corebvba.be |
        +--------------+--------------------------------+------------------+-----------------+

    Scenario Search results on google for keywords should contain 'www.corebvba.be' 
        Given the current url is 'http://www.google.be/search?q=' 
        When searching for the following keywords
            +-----------+
            | keywords  |
            +-----------+
            | Aubergine |
            | BDD       |
            +-----------+
        Then the result should contain 'www.corebvba.be' and the following markup elements
            +------------------+
            | type | inner     |
            +------------------+
            | em   | BDD       |
            | em   | Aubergine |
            +------------------+

And the context:

    public class BrowserContext
    {
        public string Url { get; set; }
        public string Result { get; set; }

        private WebClient wc = new WebClient();
            
        [DSL("the current url is '(?<url>.*)'")]
        void SetUrl(string url)
        {
            Url = url;
        }

        [DSL("searching for '(?<keywords>.*)'")]
        void SearchForKeyWords(string keywords)
        {
            Result = wc.DownloadString(Url + HttpUtility.UrlEncode(keywords));
        }

        [DSL("searching for the following keywords")]
        void SearchForKeyWords(string[] keywords)
        {
            Result = wc.DownloadString(Url + HttpUtility.UrlEncode(string.Join(" ",keywords)));
        }


        [DSL("the result should contain '(?<myurl>.*)'")]
        bool ResultShouldContain(string myurl)
        {
            return (Result??"").Contains(myurl);
        }

        [DSL("the result should contain '(?<avalue>.+)' and the following markup elements")]
        bool ResultShouldContain(string avalue,string[] type,string[]inner)
        {
            if (string.IsNullOrEmpty(Result) ||type.Length==0) 
                return false;
            if (!Result.Contains(avalue)) return false;
            for (var i = 0;i < type.Length ; i++)
            {
                var searchstring = string.Format("<{0}>{1}</{0}>", type[i], inner[i]);
                if (!Result.Contains(searchstring))
                    return false;
            }
            return true;
        }
    }

It looks a bit messy, but that's because it is a stupid example. A good example would be loading a repository with some products.

Enjoy !!