コード例 #1
0
 public void Should_not_add_tag_thats_only_an_at_char()
 {
     // GurkBurk bug?
     var l = new GherkinEventListener();
     l.Tag(new Token("@", new LineInFile(1)));
     Assert.AreEqual(0, l.Events.Count);
 }
コード例 #2
0
 public void Should_add_tag_event()
 {
     var l = new GherkinEventListener();
     l.Tag(new Token("@tag", new LineInFile(1)));
     Assert.AreEqual(GherkinTokenType.Tag, l.Events[0].GherkinTokenType);
     Assert.AreEqual("@tag", l.Events[0].Tokens[0].Content);
 }
コード例 #3
0
ファイル: TokenParser.cs プロジェクト: gpolunin/NBehave
        private Tuple <List <GherkinParseEvent>, List <Feature> > Parse(string content)
        {
            var features              = new List <Feature>();
            var nBehaveConfiguration  = NBehaveConfiguration.New.DontIsolateInAppDomain().SetDryRun(true);
            var gherkinScenarioParser = new GherkinScenarioParser(nBehaveConfiguration);

            gherkinScenarioParser.FeatureEvent += (s, e) => features.Add(e.EventInfo);
            var       gherkinEventListener = new GherkinEventListener();
            IListener listener             = new CompositeGherkinListener(gherkinEventListener, gherkinScenarioParser);
            var       newEvents            = new List <GherkinParseEvent>();
            var       parser = new Parser(listener);

            try
            {
                parser.Scan(content);
            }
            catch (Exception e)
            {
                var match = new Regex(@"^Line: (?<lineNumber>\d+). (\w+\s*)+ '(?<lineText>.*)'$").Match(e.Message);
                if (match.Success && (e is ParseException))
                {
                    var line       = int.Parse(match.Groups["lineNumber"].Value);
                    var lineInFile = new LineInFile(line - 1);
                    var text       = match.Groups["lineText"].Value;
                    var token      = new Token(text, lineInFile);
                    var error      = new Token(e.Message, lineInFile);
                    newEvents.Add(new GherkinParseEvent(GherkinTokenType.SyntaxError, token, error));
                }
            }
            finally
            {
                newEvents.AddRange(ToZeroBasedLines(gherkinEventListener).ToList());
            }
            return(new Tuple <List <GherkinParseEvent>, List <Feature> >(newEvents, features));
        }
コード例 #4
0
 public void Should_add_tag_events_following_each_other_to_the_same_event()
 {
     var l = new GherkinEventListener();
     l.Tag(new Token("@tag1", new LineInFile(1)));
     l.Tag(new Token("@tag2", new LineInFile(1)));
     Assert.AreEqual(1, l.Events.Count);
     Assert.AreEqual(GherkinTokenType.Tag, l.Events[0].GherkinTokenType);
     Assert.AreEqual("@tag1", l.Events[0].Tokens[0].Content);
     Assert.AreEqual("@tag2", l.Events[0].Tokens[1].Content);
 }
コード例 #5
0
ファイル: TokenParser.cs プロジェクト: smhabdoli/NBehave-1
 private IEnumerable<GherkinParseEvent> ToZeroBasedLines(GherkinEventListener gherkinEventListener)
 {
     return gherkinEventListener.Events
         .Select(_ => new GherkinParseEvent(_.GherkinTokenType, _.Tokens.Select(t => new Token(t.Content, new LineInFile(t.LineInFile.Line - 1))).ToArray()));
 }
コード例 #6
0
ファイル: TokenParser.cs プロジェクト: smhabdoli/NBehave-1
 private Tuple<List<GherkinParseEvent>, List<Feature>> Parse(string content)
 {
     var features = new List<Feature>();
     var nBehaveConfiguration = NBehaveConfiguration.New.DontIsolateInAppDomain().SetDryRun(true);
     var gherkinScenarioParser = new GherkinScenarioParser(nBehaveConfiguration);
     gherkinScenarioParser.FeatureEvent += (s, e) => features.Add(e.EventInfo);
     var gherkinEventListener = new GherkinEventListener();
     IListener listener = new CompositeGherkinListener(gherkinEventListener, gherkinScenarioParser);
     var newEvents = new List<GherkinParseEvent>();
     var parser = new Parser(listener);
     try
     {
         parser.Scan(content);
     }
     catch (Exception e)
     {
         var match = new Regex(@"^Line: (?<lineNumber>\d+). (\w+\s*)+ '(?<lineText>.*)'$").Match(e.Message);
         if (match.Success && (e is ParseException))
         {
             var line = int.Parse(match.Groups["lineNumber"].Value);
             var lineInFile = new LineInFile(line - 1);
             var text = match.Groups["lineText"].Value;
             var token = new Token(text, lineInFile);
             var error = new Token(e.Message, lineInFile);
             newEvents.Add(new GherkinParseEvent(GherkinTokenType.SyntaxError, token, error));
         }
     }
     finally
     {
         newEvents.AddRange(ToZeroBasedLines(gherkinEventListener).ToList());
     }
     return new Tuple<List<GherkinParseEvent>, List<Feature>>(newEvents, features);
 }
コード例 #7
0
ファイル: TokenParser.cs プロジェクト: gpolunin/NBehave
 private IEnumerable <GherkinParseEvent> ToZeroBasedLines(GherkinEventListener gherkinEventListener)
 {
     return(gherkinEventListener.Events
            .Select(_ => new GherkinParseEvent(_.GherkinTokenType, _.Tokens.Select(t => new Token(t.Content, new LineInFile(t.LineInFile.Line - 1))).ToArray())));
 }