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); }
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); }
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)); }
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); }
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())); }
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); }
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()))); }