diff --git a/src/Microsoft.SqlTools.ServiceLayer/Utility/TextUtilities.cs b/src/Microsoft.SqlTools.ServiceLayer/Utility/TextUtilities.cs index f06c654c..f4b5cb60 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Utility/TextUtilities.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Utility/TextUtilities.cs @@ -11,17 +11,17 @@ namespace Microsoft.SqlTools.ServiceLayer.Utility /// Find the position of the cursor in the SQL script content buffer and return previous new line position /// /// - /// - /// - /// + /// parameter is 0-based + /// parameter is 0-based + /// parameter is 0-based public static int PositionOfCursor(string sql, int startRow, int startColumn, out int prevNewLine) - { + { prevNewLine = 0; if (string.IsNullOrWhiteSpace(sql)) { return 1; } - + for (int i = 0; i < startRow; ++i) { while (prevNewLine < sql.Length && sql[prevNewLine] != '\n') @@ -39,8 +39,8 @@ namespace Microsoft.SqlTools.ServiceLayer.Utility /// SQL Parser may have similar functionality in which case we'll delete this method. /// /// - /// - /// + /// parameter is 0-based + /// parameter is 0-based /// public static int PositionOfPrevDelimeter(string sql, int startRow, int startColumn) { @@ -67,8 +67,8 @@ namespace Microsoft.SqlTools.ServiceLayer.Utility /// Find the position of the next delimeter for autocomplete token replacement. /// /// - /// - /// + /// parameter is 0-based + /// parameter is 0-based public static int PositionOfNextDelimeter(string sql, int startRow, int startColumn) { int prevNewLine; diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test/Utility/TextUtilitiesTests.cs b/test/Microsoft.SqlTools.ServiceLayer.Test/Utility/TextUtilitiesTests.cs new file mode 100644 index 00000000..3d67da8b --- /dev/null +++ b/test/Microsoft.SqlTools.ServiceLayer.Test/Utility/TextUtilitiesTests.cs @@ -0,0 +1,40 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using Microsoft.SqlTools.ServiceLayer.Utility; +using Xunit; + +namespace Microsoft.SqlTools.Test.Utility +{ + /// + /// Tests for the TextUtilitiesTests class + /// + public class TextUtilitiesTests + { + [Fact] + public void PositionOfCursorFirstLine() + { + string sql = "EXEC sys.fn_isrolemember "; + + int prevNewLine; + int cursorPosition = TextUtilities.PositionOfCursor(sql, 0, sql.Length, out prevNewLine); + + Assert.Equal(prevNewLine, 0); + Assert.Equal(cursorPosition, sql.Length); + } + + [Fact] + public void PositionOfCursorSecondLine() + { + string sql = "--lineone\nEXEC sys.fn_isrolemember "; + + int prevNewLine; + int cursorPosition = TextUtilities.PositionOfCursor(sql, 1, 15, out prevNewLine); + + Assert.Equal(prevNewLine, 10); + Assert.Equal(cursorPosition, 25); + } + } +}