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 List <Seat> MapToList(string map, int VenueID) { char[] seperator = { '\n' }; Console.Out.Write(map); string[] FileArr = map.Split(seperator); Console.Out.WriteLine(FileArr); int LineIndex = 0; int CharIndex = 0; List <Seat> VenueLayout = new List <Seat>(); foreach (string LineInFile in FileArr) { char[] CharArr = LineInFile.Trim().ToCharArray(); CharIndex = 0; foreach (char CharInLine in CharArr) { if (CharInLine != '0') { Seat temp = new Seat(); temp.SeatCatergory = CharInLine - '0'; temp.SeatXCordinate = CharIndex; temp.SeatYCordinate = LineIndex; temp.VenueId = VenueID; VenueLayout.Add(temp); } CharIndex++; } LineIndex++; } return(VenueLayout); }
public Venue(string Name, string FileName) { string[] FileArr = { "" }; try { FileArr = System.IO.File.ReadAllLines(FileName); } catch (System.IO.FileNotFoundException) { Console.Out.WriteLine("But it does exist -_-"); } int LineIndex = 0; int CharIndex = 0; VenueLayout = new List <Seat>(); foreach (string LineInFile in FileArr) { char[] CharArr = LineInFile.ToCharArray(); CharIndex = 0; foreach (char CharInLine in CharArr) { if (CharInLine != '0') { VenueLayout.Add(new Seat(CharInLine - '0', CharIndex, LineIndex)); } CharIndex++; } LineIndex++; } }
public void Should_tag_scenario_with_title_spanning_multiple_lines() { var gherkinStepTagger = new GherkinStepTagger(); var line = new LineInFile(0); var evt = new GherkinParseEvent(GherkinTokenType.Scenario, new Token("Scenario", line), new Token("title\n\tbar", line)); ITextSnapshot snapshot = new MockTextSnapshot("bar"); var span = new SnapshotSpan(snapshot, 0, snapshot.Length); var tags = gherkinStepTagger.CreateTags(new[] { evt }, span).ToArray(); Assert.AreEqual(GherkinTokenType.ScenarioTitle, tags[0].Tag.Type); Assert.AreEqual("bar", tags[0].Span.GetText()); }
public void Should_tag_feature_narrative_spanning_multiple_lines() { var gherkinStepTagger = new GherkinStepTagger(); var line = new LineInFile(0); var evt = new GherkinParseEvent(GherkinTokenType.Feature, new Token("Feature", line), new Token("title", line), new Token("foo\r\n\tbar", line)); ITextSnapshot snapshot = new MockTextSnapshot("\tbar\r\n"); var span = new SnapshotSpan(snapshot, 0, snapshot.Length); var tags = gherkinStepTagger.CreateTags(new[] { evt }, span).ToArray(); Assert.AreEqual(GherkinTokenType.FeatureDescription, tags[0].Tag.Type); Assert.AreEqual("bar", tags[0].Span.GetText()); }
public void Table(IList <IList <Token> > rows, LineInFile lineInFile) { if (rows.Any()) { var header = rows.First(); events.Add(new GherkinParseEvent(GherkinTokenType.TableHeader, new Token(string.Join(" | ", header).Trim(), lineInFile))); var cells = rows.Skip(1); var cellLine = lineInFile; foreach (var cell in cells) { cellLine = new LineInFile(cellLine.Line + 1); events.Add(new GherkinParseEvent(GherkinTokenType.TableCell, new Token(string.Join(" | ", cell).Trim(), cellLine))); } } }
public void Should_tag_feature_with_title() { var gherkinStepTagger = new GherkinStepTagger(); var line = new LineInFile(0); var evt = new GherkinParseEvent(GherkinTokenType.Feature, new Token("Feature", line), new Token("title", line), new Token("foo", line)); ITextSnapshot snapshot = new MockTextSnapshot("Feature: title"); var span = new SnapshotSpan(snapshot, 0, snapshot.Length); var tags = gherkinStepTagger.CreateTags(new[] { evt }, span).ToArray(); Assert.AreEqual(GherkinTokenType.Feature, tags[0].Tag.Type); Assert.AreEqual("Feature", tags[0].Span.GetText()); Assert.AreEqual(GherkinTokenType.FeatureTitle, tags[1].Tag.Type); Assert.AreEqual("title", tags[1].Span.GetText()); }
public void Should_tag_tags() { var gherkinStepTagger = new GherkinStepTagger(); var line = new LineInFile(0); var evt = new GherkinParseEvent(GherkinTokenType.Tag, new Token("Tag", line), new Token("@foo", line), new Token("@bar", line), new Token("@baz", line)); ITextSnapshot snapshot = new MockTextSnapshot("@foo @bar @baz"); var span = new SnapshotSpan(snapshot, 0, snapshot.Length); var tags = gherkinStepTagger.CreateTags(new[] { evt }, span).ToArray(); Assert.AreEqual(GherkinTokenType.Tag, tags[0].Tag.Type); Assert.AreEqual("@foo", tags[0].Span.GetText()); Assert.AreEqual(GherkinTokenType.Tag, tags[1].Tag.Type); Assert.AreEqual("@bar", tags[1].Span.GetText()); Assert.AreEqual(GherkinTokenType.Tag, tags[2].Tag.Type); Assert.AreEqual("@baz", tags[2].Span.GetText()); }
public Token(string content, LineInFile lineInFile) { LineInFile = lineInFile; Content = content; }
public void SyntaxError(string state, string @event, IEnumerable <string> legalEvents, LineInFile lineInFile) { }
public void Table(IList <IList <Token> > columns, LineInFile lineInFile) { events.Enqueue(new TableEvent(columns, e => TableEvent.Invoke(this, new EventArgs <IList <IList <Token> > >(columns)))); }
public void SyntaxError(string state, string @event, IEnumerable <string> legalEvents, LineInFile lineInFile) { events.Add(new GherkinParseEvent(GherkinTokenType.SyntaxError, new Token(@event, lineInFile))); }
public void SyntaxError(string state, string @event, IEnumerable <string> legalEvents, LineInFile lineInFile) { listeners.ForEach(_ => _.SyntaxError(state, @event, legalEvents, lineInFile)); }
public void Table(IList <IList <Token> > rows, LineInFile lineInFile) { listeners.ForEach(_ => _.Table(rows, lineInFile)); }