public static TestSource Read(string rawSource) { var testInput = new TestSource(); var lines = rawSource.Split(new[] { "\n", "\r\n" }, StringSplitOptions.None); for (var i = 0; i < lines.Length; i++) { var line = lines[i]; var markerStartIndex = line.IndexOf(MarkerStart, StringComparison.Ordinal); if (markerStartIndex != -1) { var markerEndIndex = line.IndexOf(MarkerEnd, markerStartIndex, StringComparison.Ordinal); var markerName = line.Substring(markerStartIndex + 2, markerEndIndex - markerStartIndex - 2); var markerLocation = new DiagnosticLocation(i + 1, markerStartIndex + 1); if (testInput.DefaultMarkerLocation == null) { testInput.DefaultMarkerLocation = markerLocation; } testInput.MarkerLocations.Add(markerName, markerLocation); line = line.Substring(0, markerStartIndex) + line.Substring(markerEndIndex + MarkerEnd.Length); } lines[i] = line; } testInput.Source = string.Join(Environment.NewLine, lines); return(testInput); }
public static void DiagnosticLocation(DiagnosticLocation expected, Location actual) { var actualSpan = actual.GetLineSpan(); var actualLinePosition = actualSpan.StartLinePosition; // Only check line position if there is an actual line in the real diagnostic if (actualLinePosition.Line > 0) { if (actualLinePosition.Line + 1 != expected.Line) { throw new DiagnosticLocationAssertException( expected, actual, $"Expected diagnostic to be on line \"{expected.Line}\" was actually on line \"{actualLinePosition.Line + 1}\""); } } // Only check column position if there is an actual column position in the real diagnostic if (actualLinePosition.Character > 0) { if (actualLinePosition.Character + 1 != expected.Column) { throw new DiagnosticLocationAssertException( expected, actual, $"Expected diagnostic to start at column \"{expected.Column}\" was actually on column \"{actualLinePosition.Character + 1}\""); } } }
public DiagnosticLocationAssertException( DiagnosticLocation expected, Location actual, string message) : base(expected, actual) { Message = message; }