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));
 }
Exemplo n.º 2
0
        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));
 }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 5
0
        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));
 }
Exemplo n.º 7
0
 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));
        }
Exemplo n.º 9
0
        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
        }
Exemplo n.º 12
0
        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));
 }
Exemplo n.º 14
0
        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));
 }
Exemplo n.º 16
0
        public string ReportPosition()
        {
            var(dslScript, position) = GetPositionInScript();

            return(ScriptPositionReporting.ReportPosition(dslScript.Script, position, dslScript.Path));
        }
Exemplo n.º 17
0
 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"));
 }
Exemplo n.º 18
0
 public void ReportPreviousAndFollowingText()
 {
     Assert.AreEqual(" after: \"01234\",\r\n before: \"56789\".", ScriptPositionReporting.ReportPreviousAndFollowingText("0123456789", 5));
 }