public void PreviousTextTest() { Assert.AreEqual("...c", ScriptPositionReporting.PreviousText("abc", 3, 1)); Assert.AreEqual("ab", ScriptPositionReporting.PreviousText("abc", 2, 2)); Assert.AreEqual("ab", ScriptPositionReporting.PreviousText("abc", 2, 10)); Assert.AreEqual("", ScriptPositionReporting.PreviousText("abc", 0, 10)); }
public string ReportPosition() { DslScript dslScript; int position; if (PositionInTokenList < _tokenList.Count()) { dslScript = CurrentToken.DslScript; position = CurrentToken.PositionInDslScript; } else if (_tokenList.Count > 0) { dslScript = _tokenList.Last().DslScript; position = dslScript.Script.Length; } else { dslScript = new DslScript { Script = "", Name = "", Path = "" }; position = 0; } return(ScriptPositionReporting.ReportPosition(dslScript.Script, position, dslScript.Path)); }
public void FollowingTextTest() { Assert.AreEqual("a...", ScriptPositionReporting.FollowingText("abc", 0, 1)); Assert.AreEqual("bc", ScriptPositionReporting.FollowingText("abc", 1, 2)); Assert.AreEqual("bc", ScriptPositionReporting.FollowingText("abc", 1, 10)); Assert.AreEqual("", ScriptPositionReporting.FollowingText("abc", 3, 10)); }
public string ReportPosition(int index) { if (index < 0 || index > Script.Length) { throw new FrameworkException("Error in DSL script parser. Provided position in script is out of range. Position: " + index + "."); } return(ScriptPositionReporting.ReportPosition(Script, index, Path)); }
public FilePosition(string filePath, string fileContent = "", int positionBegin = 0, int positionEnd = 0) { Path = filePath; if (!string.IsNullOrEmpty(filePath) && !string.IsNullOrEmpty(fileContent)) { (BeginLine, BeginColumn) = ScriptPositionReporting.GetLineColumn(fileContent, positionBegin); (EndLine, EndColumn) = ScriptPositionReporting.GetLineColumn(fileContent, positionEnd); } }
public void LineTest() { Assert.AreEqual(1, ScriptPositionReporting.Line("abc\r\n", 0)); Assert.AreEqual(1, ScriptPositionReporting.Line("abc", 3)); Assert.AreEqual(1, ScriptPositionReporting.Line("abc\n", 3)); Assert.AreEqual(2, ScriptPositionReporting.Line("abc\n", 4)); Assert.AreEqual(2, ScriptPositionReporting.Line("abc\r\n\r\n\r\n", 5)); Assert.AreEqual(4, ScriptPositionReporting.Line("abc\r\n\r\n\r\ndef", 9)); Assert.AreEqual(4, ScriptPositionReporting.Line("abc\r\n\r\n\r\ndef", 12)); }
private string ReportContext(Diagnostic error, string sourceCode, string sourcePath) { if (error.Location.IsInSource && error.Location.SourceTree.FilePath == sourcePath) { var span = error.Location.SourceSpan; return("\r\n" + ScriptPositionReporting.ReportPreviousAndFollowingText(sourceCode, span.Start)); } else { return(""); } }
public void ColumnTest() { Assert.AreEqual(1, ScriptPositionReporting.Column("abc\ndef", 0)); Assert.AreEqual(2, ScriptPositionReporting.Column("abc\ndef", 1)); Assert.AreEqual(3, ScriptPositionReporting.Column("abc\ndef", 2)); Assert.AreEqual(4, ScriptPositionReporting.Column("abc\ndef", 3)); Assert.AreEqual(1, ScriptPositionReporting.Column("abc\ndef", 4)); Assert.AreEqual(2, ScriptPositionReporting.Column("abc\ndef", 5)); Assert.AreEqual(4, ScriptPositionReporting.Column("abc", 3)); Assert.AreEqual(1, ScriptPositionReporting.Column("abc\n", 4)); Assert.AreEqual(1, ScriptPositionReporting.Column("abc\r\n\r\n\r\n", 5)); Assert.AreEqual(1, ScriptPositionReporting.Column("abc\r\n\r\n\r\ndef", 9)); Assert.AreEqual(4, ScriptPositionReporting.Column("abc\r\n\r\n\r\ndef", 12)); }
private void FailOnCompilerErrors(CompilerResults compilerResults, string sourceCode, string sourcePath) { if (compilerResults.Errors.HasErrors) { var errors = (from System.CodeDom.Compiler.CompilerError error in compilerResults.Errors where !error.IsWarning select error).ToList(); var report = new StringBuilder(); report.Append(errors.Count + " errors while compiling '" + Path.GetFileName(sourcePath) + "'"); if (errors.Count > _errorReportLimit.Value) { report.AppendLine(". The first " + _errorReportLimit.Value + " errors:"); } else { report.AppendLine(":"); } foreach (var error in errors.Take(_errorReportLimit.Value)) { report.AppendLine(); report.AppendLine(error.ErrorText); if (error.Line > 0 || error.Column > 0) { report.AppendLine(ScriptPositionReporting.ReportPosition(sourceCode, error.Line, error.Column, sourcePath)); } } if (errors.Count() > _errorReportLimit.Value) { report.AppendLine(); report.AppendLine("..."); } throw new FrameworkException(report.ToString().Trim()); } }
public DslSyntaxException(string message, string errorCode, DslScript dslScript, int positionBegin = 0, int positionEnd = 0, string additionalDetails = null) : base(message) { ErrorCode = errorCode; if (!string.IsNullOrEmpty(dslScript?.Path)) { FilePosition = new FilePosition(dslScript.Path, dslScript.Script, positionBegin, positionEnd); } var detailsList = new List <string>(); if (!string.IsNullOrEmpty(dslScript?.Script)) { detailsList.Add($"Syntax error at \"{ScriptPositionReporting.ReportPreviousAndFollowingTextInline(dslScript.Script, positionBegin)}\""); } if (!string.IsNullOrEmpty(additionalDetails)) { detailsList.Add(additionalDetails); } Details = string.Join("\r\n", detailsList); }
public void PositionTest() { Assert.AreEqual(0, ScriptPositionReporting.Position("ab", 1, 1)); Assert.AreEqual(1, ScriptPositionReporting.Position("ab", 1, 2)); Assert.AreEqual(2, ScriptPositionReporting.Position("ab", 1, 3)); // end of file Assert.AreEqual(0, ScriptPositionReporting.Position("a\nbc", 1, 1)); Assert.AreEqual(1, ScriptPositionReporting.Position("a\nbc", 1, 2)); Assert.AreEqual(2, ScriptPositionReporting.Position("a\nbc", 2, 1)); Assert.AreEqual(3, ScriptPositionReporting.Position("a\nbc", 2, 2)); Assert.AreEqual(4, ScriptPositionReporting.Position("a\nbc", 2, 3)); // end of file Assert.AreEqual(0, ScriptPositionReporting.Position("a\r\nbc", 1, 1)); Assert.AreEqual(1, ScriptPositionReporting.Position("a\r\nbc", 1, 2)); Assert.AreEqual(3, ScriptPositionReporting.Position("a\r\nbc", 2, 1)); Assert.AreEqual(4, ScriptPositionReporting.Position("a\r\nbc", 2, 2)); Assert.AreEqual(5, ScriptPositionReporting.Position("a\r\nbc", 2, 3)); // end of file Assert.AreEqual(0, ScriptPositionReporting.Position("\n\nx\n", 1, 1)); Assert.AreEqual(1, ScriptPositionReporting.Position("\n\nx\n", 2, 1)); Assert.AreEqual(2, ScriptPositionReporting.Position("\n\nx\n", 3, 1)); Assert.AreEqual(4, ScriptPositionReporting.Position("\n\nx\n", 4, 1)); // end of file }
private string ReportErrors(CompilerResults results, string generatedCode, string filePath) { var errors = (from System.CodeDom.Compiler.CompilerError error in results.Errors where !error.IsWarning select error).ToList(); var report = new StringBuilder(); report.Append(errors.Count + " errors while compiling '" + Path.GetFileName(filePath) + "'"); if (errors.Count > _errorReportLimit.Value) { report.AppendLine(". The first " + _errorReportLimit.Value + " errors:"); } else { report.AppendLine(":"); } foreach (var error in errors.Take(_errorReportLimit.Value)) { report.AppendLine(); report.AppendLine(error.ErrorText); if (error.Line > 0 || error.Column > 0) { report.AppendLine(ScriptPositionReporting.ReportPosition(generatedCode, error.Line, error.Column, filePath)); } } if (errors.Count() > _errorReportLimit.Value) { report.AppendLine(); report.AppendLine("..."); } return(report.ToString().Trim()); }
public void FollowingTextTest_RemoveSeparators() { Assert.AreEqual("a b", ScriptPositionReporting.FollowingText("a\r\nb", 0, 5)); Assert.AreEqual("a bbb...", ScriptPositionReporting.FollowingText("a\r\n\r\nbbbbbbbbbbb", 0, 5)); Assert.AreEqual("b c", ScriptPositionReporting.FollowingText("a\t b\t c", 3, 5)); }
private string FollowingText_LineColumn(string script, int line, int column, int maxLength) { int position = ScriptPositionReporting.Position(script, line, column); return(ScriptPositionReporting.FollowingText(script, position, maxLength)); }
public void FollowingTextTest_LineColumn() { Assert.AreEqual("ab...", ScriptPositionReporting.FollowingText("abc\r\ndefgh", 1, 1, 2)); Assert.AreEqual("ef...", ScriptPositionReporting.FollowingText("abc\r\ndefgh", 2, 2, 2)); }
public string ReportPosition() { var(dslScript, position) = GetPositionInScript(); return(ScriptPositionReporting.ReportPosition(dslScript.Script, position, dslScript.Path)); }
public void ReportPosition() { Assert.AreEqual("At line 1, column 6,\r\n after: \"01234\",\r\n before: \"56789\".", ScriptPositionReporting.ReportPosition("0123456789", 5)); Assert.AreEqual("At line 1, column 6, file 'abc.txt',\r\n after: \"01234\",\r\n before: \"56789\".", ScriptPositionReporting.ReportPosition("0123456789", 5, "abc.txt")); }
public void ReportPreviousAndFollowingText() { Assert.AreEqual(" after: \"01234\",\r\n before: \"56789\".", ScriptPositionReporting.ReportPreviousAndFollowingText("0123456789", 5)); }