static bool AddScenario(ParserContext context)
        {
            if (context.Step != null)
            {
                context.Steps.Add(context.Step());
            }

            if (context.Scenario != null)
            {
                context.Scenarios.Add(context.Scenario());
            }

            if (context.Keyword == null || !context.IsWord)
            {
                return(false);
            }

            var steps = new List <Step> ();

            context.Steps    = steps;
            context.Examples = null;
            context.Table    = null;

            var tags = context.Tags;

            context.Tags = new List <string> ();

            var content  = context.RemainingContent;
            var fileName = context.FileName;
            var line     = context.LineNumber;
            var column   = context.Column;
            var keyword  = context.Keyword;

            switch (context.Keyword)
            {
            case "Scenario Outline:":
                context.Scenario = () => {
                    if (context.Examples == null && steps.Count > 0)
                    {
                        context.Errors.Add(new Error(ErrorType.Error, "Expecting Examples for Scenario Outline", new DomRegion(line, column, line, column + keyword.Length)));
                    }

                    Examples examples = null;

                    if (context.Examples != null)
                    {
                        examples = context.Examples();

                        if (examples.Table != null && examples.Table.Header != null)
                        {
                            foreach (var j in steps)
                            {
                                foreach (var k in j.Placeholders)
                                {
                                    if (!examples.Table.Header.Columns.Contains(k.Name))
                                    {
                                        context.Errors.Add(new Error(ErrorType.Warning, "Placeholder does not match column in table", new DomRegion(k.Line, k.Column, line, k.Column + k.Name.Length)));
                                    }
                                }
                            }
                        }
                    }

                    return(new ScenarioOutline(examples, steps, tags, content, fileName, line, column));
                };
                break;

            case "Scenario:":
                context.Scenario = () => new Scenario(steps, tags, content, fileName, line, column);
                break;

            case "Background:":
                context.Scenario = () => new Background(steps, tags, fileName, line, column);
                break;
            }

            return(true);
        }
예제 #2
0
 public ScenarioOutline(Examples examples, IList<Step> actions, IList<string> tags, string name, string file, int line, int column)
     : base(actions, tags, name, file, line, column)
 {
     Examples = examples;
 }
예제 #3
0
 public ScenarioOutline(Examples examples, IList <Step> actions, IList <string> tags, string name, string file, int line, int column) : base(actions, tags, name, file, line, column)
 {
     Examples = examples;
 }