From 25c5c27a6e7c6de6b83c9a34368f1e99c485c3da Mon Sep 17 00:00:00 2001 From: Aditya Bist Date: Fri, 24 Feb 2017 15:49:45 -0800 Subject: [PATCH] Fix batch parser test (#239) * fixed batch parser test * fix batch parser test * fix batch parser test * fixed baseline tests for parser and fixed trace output logic * Update RunEnvironmentInfo.cs * checking error logs on AppVeyor * checking error logs on app veyor * changed file reading encoding * adding logs to app veyor build * changed encoding of baseline files * added error logs for app veyor * changed error logs for app veyor * changed how file stream works in batch parser tests * changed baseline and testscript encodings * cleaned code for necessary batch parser tests --- .../BatchParser/BatchParserTests.cs | 516 +++++----- .../Baselined/BaselinedTest.cs | 902 +++++++++--------- .../RunEnvironmentInfo.cs | 185 ++-- .../Baselines/BL-err-blockComment.txt | Bin 754 -> 376 bytes .../Baselines/BL-err-blockComment2.txt | Bin 756 -> 377 bytes .../BatchParser/Baselines/BL-err-cycle1.txt | Bin 1618 -> 789 bytes .../Baselines/BL-err-varDefinition.txt | Bin 1124 -> 561 bytes .../Baselines/BL-err-varDefinition2.txt | Bin 2374 -> 1162 bytes .../Baselines/BL-err-varDefinition3.txt | Bin 1240 -> 605 bytes .../Baselines/BL-err-varDefinition4.txt | Bin 1364 -> 661 bytes .../Baselines/BL-err-varDefinition5.txt | Bin 1478 -> 738 bytes .../Baselines/BL-err-varDefinition6.txt | Bin 1638 -> 801 bytes .../Baselines/BL-err-varDefinition7.txt | Bin 1622 -> 793 bytes .../Baselines/BL-err-varDefinition8.txt | Bin 1606 -> 785 bytes .../Baselines/BL-err-varDefinition9.txt | Bin 1606 -> 785 bytes .../Baselines/BL-err-variableRef.txt | Bin 1072 -> 522 bytes .../Baselines/BL-err-variableRef2.txt | Bin 1116 -> 544 bytes .../Baselines/BL-err-variableRef3.txt | Bin 1420 -> 691 bytes .../Baselines/BL-err-variableRef4.txt | Bin 974 -> 486 bytes .../BatchParser/Baselines/BL-input.txt | Bin 22614 -> 10759 bytes .../BatchParser/Baselines/BL-input2.txt | Bin 31594 -> 15374 bytes .../Baselines/BL-pass-blockComment.txt | Bin 3170 -> 1540 bytes .../Baselines/BL-pass-command-and-comment.txt | Bin 17180 -> 8427 bytes .../Baselines/BL-pass-lineComment.txt | Bin 2836 -> 1374 bytes .../Baselines/BL-pass-lineComment2.txt | Bin 834 -> 399 bytes .../Baselines/BL-pass-noBlockComments.txt | Bin 1428 -> 685 bytes .../Baselines/BL-pass-noLineComments.txt | Bin 1298 -> 618 bytes .../Baselines/BL-pass-varDefinition.txt | Bin 1296 -> 631 bytes .../Baselines/BL-pass-varDefinition2.txt | Bin 1854 -> 901 bytes .../Baselines/BL-pass-varDefinition3.txt | Bin 1362 -> 664 bytes .../Baselines/BL-pass-varDefinition4.txt | Bin 4652 -> 2275 bytes .../BatchParser/TestScripts/TS-input.txt | 2 +- .../TestServiceProvider.cs | 2 +- 33 files changed, 834 insertions(+), 773 deletions(-) diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/BatchParser/BatchParserTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/BatchParser/BatchParserTests.cs index 1d4dae0d..e3a680ac 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/BatchParser/BatchParserTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/BatchParser/BatchParserTests.cs @@ -1,244 +1,272 @@ -// -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -// - -using System; -using System.Globalization; -using System.IO; -using System.Text; -using Microsoft.SqlTools.ServiceLayer.BatchParser; -using Microsoft.SqlTools.ServiceLayer.QueryExecution; -using Microsoft.SqlTools.ServiceLayer.Test.Common; -using Microsoft.SqlTools.ServiceLayer.Test.Common.Baselined; -using Xunit; - -namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.BatchParser -{ - public class BatchParserTests : BaselinedTest - { - private bool testFailed = false; - - public BatchParserTests() - { - InitializeTest(); - } - - public void InitializeTest() - { - CategoryName = "BatchParser"; - this.TraceOutputDirectory = RunEnvironmentInfo.GetTestDataLocation(); - TestInitialize(); - } - - [Fact] - public void VerifyThrowOnUnresolvedVariable() - { - string script = "print '$(NotDefined)'"; - StringBuilder output = new StringBuilder(); - - TestCommandHandler handler = new TestCommandHandler(output); - IVariableResolver resolver = new TestVariableResolver(new StringBuilder()); - Parser p = new Parser( - handler, - resolver, - new StringReader(script), - "test"); - p.ThrowOnUnresolvedVariable = true; - - handler.SetParser(p); - - Assert.Throws(() => p.Parse()); - } - - public void TokenizeWithLexer(string filename, StringBuilder output) - { - - using (Lexer lexer = new Lexer(new StreamReader(File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.Read)), filename)) - { - - string inputText = File.ReadAllText(filename); - inputText = inputText.Replace("\r\n", "\n"); - StringBuilder roundtripTextBuilder = new StringBuilder(); - StringBuilder outputBuilder = new StringBuilder(); - StringBuilder tokenizedInput = new StringBuilder(); - bool lexerError = false; - - Token token = null; - try - { - do - { - lexer.ConsumeToken(); - token = lexer.CurrentToken; - roundtripTextBuilder.Append(token.Text); - outputBuilder.AppendLine(GetTokenString(token)); - tokenizedInput.Append('[').Append(GetTokenCode(token.TokenType)).Append(':').Append(token.Text).Append(']'); - } while (token.TokenType != LexerTokenType.Eof); - } - catch (BatchParserException ex) - { - lexerError = true; - outputBuilder.AppendLine(string.Format(CultureInfo.CurrentCulture, "[ERROR: code {0} at {1} - {2} in {3}, message: {4}]", ex.ErrorCode, GetPositionString(ex.Begin), GetPositionString(ex.End), GetFilenameOnly(ex.Begin.Filename), ex.Message)); - } - output.AppendLine("Lexer tokenized input:"); - output.AppendLine("======================"); - output.AppendLine(tokenizedInput.ToString()); - output.AppendLine("Tokens:"); - output.AppendLine("======="); - output.AppendLine(outputBuilder.ToString()); - - if (lexerError == false) - { - // Verify that all text from tokens can be recombined into original string - Assert.Equal(inputText, roundtripTextBuilder.ToString().Replace("\r\n", "\n")); - } - } - } - - private string GetTokenCode(LexerTokenType lexerTokenType) - { - switch (lexerTokenType) - { - case LexerTokenType.Text: - return "T"; - case LexerTokenType.Whitespace: - return "WS"; - case LexerTokenType.NewLine: - return "NL"; - case LexerTokenType.Comment: - return "C"; - default: - return lexerTokenType.ToString(); - } - } - - [Fact] - public void BatchParserTest() - { - Start("err-blockComment"); - Start("err-blockComment2"); - Start("err-varDefinition"); - Start("err-varDefinition2"); - Start("err-varDefinition3"); - Start("err-varDefinition4"); - Start("err-varDefinition5"); - Start("err-varDefinition6"); - Start("err-varDefinition7"); - Start("err-varDefinition8"); - Start("err-varDefinition9"); - Start("err-variableRef"); - Start("err-variableRef2"); - Start("err-variableRef3"); - Start("err-variableRef4"); - Start("err-cycle1"); - Start("input"); - Start("input2"); - Start("pass-blockComment"); - Start("pass-lineComment"); - Start("pass-lineComment2"); - Start("pass-noBlockComments"); - Start("pass-noLineComments"); - Start("pass-varDefinition"); - Start("pass-varDefinition2"); - Start("pass-varDefinition3"); - Start("pass-varDefinition4"); - Start("pass-command-and-comment"); - Assert.False(testFailed, "At least one of test cases failed. Check output for details."); - } - - public void TestParser(string filename, StringBuilder output) - { - try - { - TestCommandHandler commandHandler = new TestCommandHandler(output); - - Parser parser = new Parser( - commandHandler, - new TestVariableResolver(output), - new StreamReader(File.Open(filename, FileMode.Open)), - filename); - - commandHandler.SetParser(parser); - - parser.Parse(); - } - catch (BatchParserException ex) - { - output.AppendLine(string.Format(CultureInfo.CurrentCulture, "[PARSER ERROR: code {0} at {1} - {2} in {3}, token text: {4}, message: {5}]", ex.ErrorCode, GetPositionString(ex.Begin), GetPositionString(ex.End), GetFilenameOnly(ex.Begin.Filename), ex.Text, ex.Message)); - } - } - - private string GetPositionString(PositionStruct pos) - { - return string.Format(CultureInfo.InvariantCulture, "{0}:{1} [{2}]", pos.Line, pos.Column, pos.Offset); - } - - private string GetTokenString(Token token) - { - if (token == null) - { - return "(null)"; - } - else - { - string tokenText = token.Text; - if (tokenText != null) - { - tokenText = tokenText.Replace("\n", "\\n").Replace("\r", "\\r").Replace("\t", "\\t"); - } - string tokenFilename = token.Filename; - tokenFilename = GetFilenameOnly(tokenFilename); - return string.Format(CultureInfo.CurrentCulture, "[Token {0} at {1}({2}:{3} [{4}] - {5}:{6} [{7}]): '{8}']", - token.TokenType, - tokenFilename, - token.Begin.Line, token.Begin.Column, token.Begin.Offset, - token.End.Line, token.End.Column, token.End.Offset, - tokenText); - } - } - - internal static string GetFilenameOnly(string fullPath) - { - return fullPath != null ? Path.GetFileName(fullPath) : null; - } - - public override void Run() - { - string inputFilename = GetTestscriptFilePath(CurrentTestName); - StringBuilder output = new StringBuilder(); - - TokenizeWithLexer(inputFilename, output); - TestParser(inputFilename, output); - - string baselineFilename = GetBaselineFilePath(CurrentTestName); - string baseline; - - try - { - baseline = GetFileContent(baselineFilename); - } - catch (FileNotFoundException) - { - baseline = string.Empty; - } - - string outputString = output.ToString(); - - Console.WriteLine(baselineFilename); - - if (string.Compare(baseline, outputString, StringComparison.Ordinal) != 0) - { - DumpToTrace(CurrentTestName, outputString); - string outputFilename = Path.Combine(TraceFilePath, GetBaselineFileName(CurrentTestName)); - Console.WriteLine(":: Output does not match the baseline!"); - Console.WriteLine("code --diff \"" + baselineFilename + "\" \"" + outputFilename + "\""); - Console.WriteLine(); - Console.WriteLine(":: To update the baseline:"); - Console.WriteLine("copy \"" + outputFilename + "\" \"" + baselineFilename + "\""); - Console.WriteLine(); - testFailed = true; - } - } - } -} +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using System; +using System.Globalization; +using System.IO; +using System.Text; +using Microsoft.SqlTools.ServiceLayer.BatchParser; +using Microsoft.SqlTools.ServiceLayer.Test.Common; +using Microsoft.SqlTools.ServiceLayer.Test.Common.Baselined; +using Xunit; +using Microsoft.SqlTools.ServiceLayer.QueryExecution; + +namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.BatchParser +{ + public class BatchParserTests : BaselinedTest + { + private bool testFailed = false; + + public BatchParserTests() + { + InitializeTest(); + } + + public void InitializeTest() + { + CategoryName = "BatchParser"; + this.TraceOutputDirectory = RunEnvironmentInfo.GetTraceOutputLocation(); + TestInitialize(); + } + + [Fact] + public void VerifyThrowOnUnresolvedVariable() + { + string script = "print '$(NotDefined)'"; + StringBuilder output = new StringBuilder(); + + TestCommandHandler handler = new TestCommandHandler(output); + IVariableResolver resolver = new TestVariableResolver(new StringBuilder()); + using (Parser p = new Parser( + handler, + resolver, + new StringReader(script), + "test")) + { + p.ThrowOnUnresolvedVariable = true; + handler.SetParser(p); + + Assert.Throws(() => p.Parse()); + } + } + + private static Stream GenerateStreamFromString(string s) + { + MemoryStream stream = new MemoryStream(); + StreamWriter writer = new StreamWriter(stream); + writer.Write(s); + writer.Flush(); + stream.Position = 0; + return stream; + } + + public void TokenizeWithLexer(string filename, StringBuilder output) + { + // Create a new file by changing CRLFs to LFs and generate a new steam + // or the tokens generated by the lexer will always have off by one errors + string input = File.ReadAllText(filename).Replace("\r\n", "\n"); + var inputStream = GenerateStreamFromString(input); + using (Lexer lexer = new Lexer(new StreamReader(inputStream), filename)) + { + + string inputText = File.ReadAllText(filename); + inputText = inputText.Replace("\r\n", "\n"); + StringBuilder roundtripTextBuilder = new StringBuilder(); + StringBuilder outputBuilder = new StringBuilder(); + StringBuilder tokenizedInput = new StringBuilder(); + bool lexerError = false; + + Token token = null; + try + { + do + { + lexer.ConsumeToken(); + token = lexer.CurrentToken; + roundtripTextBuilder.Append(token.Text.Replace("\r\n", "\n")); + outputBuilder.AppendLine(GetTokenString(token)); + tokenizedInput.Append('[').Append(GetTokenCode(token.TokenType)).Append(':').Append(token.Text.Replace("\r\n", "\n")).Append(']'); + } while (token.TokenType != LexerTokenType.Eof); + } + catch (BatchParserException ex) + { + lexerError = true; + outputBuilder.AppendLine(string.Format(CultureInfo.CurrentCulture, "[ERROR: code {0} at {1} - {2} in {3}, message: {4}]", ex.ErrorCode, GetPositionString(ex.Begin), GetPositionString(ex.End), GetFilenameOnly(ex.Begin.Filename), ex.Message)); + } + output.AppendLine("Lexer tokenized input:"); + output.AppendLine("======================"); + output.AppendLine(tokenizedInput.ToString()); + output.AppendLine("Tokens:"); + output.AppendLine("======="); + output.AppendLine(outputBuilder.ToString()); + + if (lexerError == false) + { + // Verify that all text from tokens can be recombined into original string + Assert.Equal(inputText, roundtripTextBuilder.ToString()); + } + } + } + + private string GetTokenCode(LexerTokenType lexerTokenType) + { + switch (lexerTokenType) + { + case LexerTokenType.Text: + return "T"; + case LexerTokenType.Whitespace: + return "WS"; + case LexerTokenType.NewLine: + return "NL"; + case LexerTokenType.Comment: + return "C"; + default: + return lexerTokenType.ToString(); + } + } + + private static void CopyToOutput(string sourceDirectory, string filename) + { + File.Copy(Path.Combine(sourceDirectory, filename), filename, true); + FileUtilities.SetFileReadWrite(filename); + } + + [Fact] + public void BatchParserTest() + { + CopyToOutput(FilesLocation, "TS-err-cycle1.txt"); + CopyToOutput(FilesLocation, "cycle2.txt"); + + Start("err-blockComment"); + Start("err-blockComment2"); + Start("err-varDefinition"); + Start("err-varDefinition2"); + Start("err-varDefinition3"); + Start("err-varDefinition4"); + Start("err-varDefinition5"); + Start("err-varDefinition6"); + Start("err-varDefinition7"); + Start("err-varDefinition8"); + Start("err-varDefinition9"); + Start("err-variableRef"); + Start("err-variableRef2"); + Start("err-variableRef3"); + Start("err-variableRef4"); + Start("err-cycle1"); + Start("input"); + Start("input2"); + Start("pass-blockComment"); + Start("pass-lineComment"); + Start("pass-lineComment2"); + Start("pass-noBlockComments"); + Start("pass-noLineComments"); + Start("pass-varDefinition"); + Start("pass-varDefinition2"); + Start("pass-varDefinition3"); + Start("pass-varDefinition4"); + Start("pass-command-and-comment"); + Assert.False(testFailed, "At least one of test cases failed. Check output for details."); + } + + public void TestParser(string filename, StringBuilder output) + { + try + { + // Create a new file by changing CRLFs to LFs and generate a new steam + // or the tokens generated by the lexer will always have off by one errors + TestCommandHandler commandHandler = new TestCommandHandler(output); + string input = File.ReadAllText(filename).Replace("\r\n", "\n"); + var inputStream = GenerateStreamFromString(input); + StreamReader streamReader = new StreamReader(inputStream); + + using (Parser parser = new Parser( + commandHandler, + new TestVariableResolver(output), + streamReader, + filename)) + { + commandHandler.SetParser(parser); + parser.Parse(); + } + } + catch (BatchParserException ex) + { + output.AppendLine(string.Format(CultureInfo.CurrentCulture, "[PARSER ERROR: code {0} at {1} - {2} in {3}, token text: {4}, message: {5}]", ex.ErrorCode, GetPositionString(ex.Begin), GetPositionString(ex.End), GetFilenameOnly(ex.Begin.Filename), ex.Text, ex.Message)); + } + } + + private string GetPositionString(PositionStruct pos) + { + return string.Format(CultureInfo.InvariantCulture, "{0}:{1} [{2}]", pos.Line, pos.Column, pos.Offset); + } + + private string GetTokenString(Token token) + { + if (token == null) + { + return "(null)"; + } + else + { + string tokenText = token.Text; + if (tokenText != null) + { + tokenText = tokenText.Replace("\r\n", "\\n").Replace("\n", "\\n").Replace("\r", "\\r").Replace("\t", "\\t"); + } + string tokenFilename = token.Filename; + tokenFilename = GetFilenameOnly(tokenFilename); + return string.Format(CultureInfo.CurrentCulture, "[Token {0} at {1}({2}:{3} [{4}] - {5}:{6} [{7}]): '{8}']", + token.TokenType, + tokenFilename, + token.Begin.Line, token.Begin.Column, token.Begin.Offset, + token.End.Line, token.End.Column, token.End.Offset, + tokenText); + } + } + + internal static string GetFilenameOnly(string fullPath) + { + return fullPath != null ? Path.GetFileName(fullPath) : null; + } + + public override void Run() + { + string inputFilename = GetTestscriptFilePath(CurrentTestName); + StringBuilder output = new StringBuilder(); + + TokenizeWithLexer(inputFilename, output); + TestParser(inputFilename, output); + + string baselineFilename = GetBaselineFilePath(CurrentTestName); + string baseline; + + try + { + baseline = GetFileContent(baselineFilename).Replace("\r\n", "\n"); + } + catch (FileNotFoundException) + { + baseline = string.Empty; + } + + string outputString = output.ToString().Replace("\r\n", "\n"); + + Console.WriteLine(baselineFilename); + + if (string.Compare(baseline, outputString, StringComparison.Ordinal) != 0) + { + DumpToTrace(CurrentTestName, outputString); + string outputFilename = Path.Combine(TraceFilePath, GetBaselineFileName(CurrentTestName)); + Console.WriteLine(":: Output does not match the baseline!"); + Console.WriteLine("code --diff \"" + baselineFilename + "\" \"" + outputFilename + "\""); + Console.WriteLine(); + Console.WriteLine(":: To update the baseline:"); + Console.WriteLine("copy \"" + outputFilename + "\" \"" + baselineFilename + "\""); + Console.WriteLine(); + testFailed = true; + } + } + } +} diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/Baselined/BaselinedTest.cs b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/Baselined/BaselinedTest.cs index f358488a..0afa62c8 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/Baselined/BaselinedTest.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/Baselined/BaselinedTest.cs @@ -1,454 +1,448 @@ -// -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -// - -using System; -using System.Diagnostics; -using System.IO; -using System.Text; -using Xunit; - -namespace Microsoft.SqlTools.ServiceLayer.Test.Common.Baselined -{ - /// - /// This class serves as the base class for all baselined tests - /// It will provide easy services for you to interact with your test files and their baselines - /// - public abstract class BaselinedTest - { - /// - /// Holds the extension for the TestScripts - /// - private string _testScriptExtension; - - /// - /// Holds the extensionf or the Baseline files - /// - private string _baselineExtension; - - /// - /// Holds the path to the base location of both TestScripts and Baselines - /// - private string _testCategoryName; - - /// - /// Holds the ROOT Dir for trace output - /// - private string _traceOutputDir; - - /// - /// Holds the prefix for the baseline - /// - private string _baselinePrefix; - - /// - /// Holds the prefix for the Testscript - /// - private string _testscriptPrefix; - - /// - /// Holds the name of the current test - /// - private string _currentTestname; - - private string _baselineSubDir = string.Empty; - - public const string TestScriptDirectory = @"Testscripts\"; - public const string BaselineDirectory = @"Baselines\"; - - /// - /// Gets/Sets the extension for the Testscript files - /// - public string TestscriptFileExtension - { - get - { - return _testScriptExtension; - } - set - { - if (string.IsNullOrEmpty(value)) - throw new ArgumentException("TestscriptFileExtension needs a value"); - _testScriptExtension = value; - } - } - - /// - /// Gets/Sets the extension for the Baseline files - /// - public string BaselineFileExtension - { - get - { - return _baselineExtension; - } - set - { - if (string.IsNullOrEmpty(value)) - throw new ArgumentException("BaselineFileExtension needs a value"); - _baselineExtension = value; - } - } - - /// - /// Gets/Sets the path to the base location of both test scripts and baseline files - /// - /// - /// Just use the SubDir name - /// TestScripts should be in FileBaseLocation\Testscripts; and Baselines should be in FileBaseLocation\Baselines - /// The value of this will be appended to ROOT_DIR (QA\SrcUTest\Common) - /// - public string CategoryName - { - get - { - return _testCategoryName; - } - set - { - if (string.IsNullOrEmpty(value)) - throw new ArgumentException("FileBaseLocation needs a value"); - _testCategoryName = value; - } - } - - /// - /// Gets/Sets the output base directory for trace output (null = no trace output) - /// - public string TraceOutputDirectory - { - get - { - return _traceOutputDir; - } - set - { - _traceOutputDir = value; - } - } - - /// - /// Gets the full path of where the files will be pulled from - /// - public string FilesLocation - { - get - { - return Path.Combine(RunEnvironmentInfo.GetTestDataLocation(), CategoryName, TestScriptDirectory); - } - } - - /// - /// Gets or Sets the sub directory in Baselines where the exected baseline results are located - /// - public string BaselinesSubdir - { - get - { - if (this._baselineSubDir == null) - this._baselineSubDir = string.Empty; - return this._baselineSubDir; - } - set { this._baselineSubDir = value; } - } - - /// - /// Gets the full path of where the baseline files will be pulled from - /// - public string BaselineFilePath - { - get - { - return Path.Combine(RunEnvironmentInfo.GetTestDataLocation(), CategoryName, Path.Combine( BaselineDirectory, BaselinesSubdir )); - } - } - - /// - /// Gets the full path of where the Trace will output - /// - public string TraceFilePath - { - get - { - return Path.Combine(Path.GetFullPath(TraceOutputDirectory), this.CategoryName, this.BaselinesSubdir); - } - } - - /// - /// Gets/Sets the prefix used for baseline files - /// - public string BaselinePrefix - { - get - { - return _baselinePrefix; - } - set - { - if (string.IsNullOrEmpty(value)) - throw new ArgumentException("BaselinePrefix needs a value"); - _baselinePrefix = value; - } - } - - /// - /// Gets/Sets the prefix used for testscript files - /// - public string TestscriptPrefix - { - get - { - return _testscriptPrefix; - } - set - { - if (string.IsNullOrEmpty(value)) - throw new ArgumentException("TestscriptPrefix needs a value"); - _testscriptPrefix = value; - } - } - - /// - /// Gets/Sets the name of the current test - /// - public string CurrentTestName - { - get - { - return _currentTestname; - } - } - - /// - /// Constructor - /// - public BaselinedTest() - { - Initialize(); - } - - /// - /// Initializes the class - /// - private void Initialize() - { - _testScriptExtension = _baselineExtension = "txt"; //default to txt - _testCategoryName = null; - string projectPath = Environment.GetEnvironmentVariable(Constants.ProjectPath); - if (projectPath != null) - { - _traceOutputDir = Path.Combine(projectPath, "trace"); - } - else - { - _traceOutputDir = Environment.ExpandEnvironmentVariables(@"%SystemDrive%\trace\"); - } - _baselinePrefix = "BL"; - _testscriptPrefix = "TS"; - } - - /// - /// This method should be called whenever you do a [TestInitialize] - /// - public virtual void TestInitialize() - { - - if (string.IsNullOrEmpty(_testCategoryName)) - throw new ArgumentException("Set CategoryName to the name of the directory containing your Testscripts and Baseline files"); - - if (!Directory.Exists(FilesLocation)) - throw new FileNotFoundException(string.Format("Path to Testscripts ([{0}]) does not exist.", FilesLocation)); - if (!Directory.Exists(BaselineFilePath)) - throw new FileNotFoundException(string.Format("Path to Baseline Files [{0}] does not exist.", BaselineFilePath)); - if (!string.IsNullOrEmpty(TraceFilePath) && !Directory.Exists(TraceFilePath)) //if this does not exist, then we want it (pronto) - Directory.CreateDirectory(TraceFilePath); - - } - - /// - /// Compares two strings and gives appropriate output - /// - /// Actual string - /// Expected string - /// Fails test if strings do not match; comparison is done using an InvariantCulture StringComparer - public void CompareActualWithBaseline(string actualContent, string baselineContent) - { - - int _compareResult = string.Compare(actualContent, baselineContent, StringComparison.OrdinalIgnoreCase); - if (_compareResult != 0) - { - Trace.WriteLine("Debug Info:"); - Trace.WriteLine("========BEGIN=EXPECTED========"); - Trace.WriteLine(baselineContent); - Trace.WriteLine("=========END=EXPECTED========="); - Trace.WriteLine("=========BEGIN=ACTUAL========="); - Trace.WriteLine(actualContent); - Trace.WriteLine("==========END=ACTUAL=========="); - Assert.True(false, string.Format("Comparison failed! (actualContent {0} baselineContent)", (_compareResult < 0 ? "<" : ">"))); //we already know it is not equal - } - else - { - Trace.WriteLine("Compare match! All is fine..."); - } - } - - /// - /// Gets the name of the testscript with the provided name - /// - /// Name of the test - /// the path to the baseline file - /// Asserts that file exists - public string GetTestscriptFilePath(string name) - { - string retVal = Path.Combine(FilesLocation, string.Format("{0}-{1}.{2}", TestscriptPrefix, name, TestscriptFileExtension)); - Assert.True(File.Exists(retVal), string.Format("TestScript [{0}] does not exist", retVal)); - return retVal; - } - - /// - /// Gets the name of the test script with the provided name and the provided index - /// - /// Name of the test - /// File index - /// the path to the baseline file - /// Asserts that file exists - public string GetTestscriptFilePath(string name, int index) - { - string retVal = Path.Combine(FilesLocation, string.Format("{0}-{1}{2}.{3}", TestscriptPrefix, name, index.ToString(), TestscriptFileExtension)); - Assert.True(File.Exists(retVal), string.Format("TestScript [{0}] does not exist", retVal)); - return retVal; - } - - /// - /// Gets the formatted baseline file name - /// - /// Name of the test - public string GetBaselineFileName(string name) - { - return string.Format("{0}-{1}.{2}", BaselinePrefix, name, BaselineFileExtension); - } - - /// - /// Gets the file path to the baseline file for the named case - /// - /// Name of the test - /// the path to the baseline file - /// Asserts that file exists - public string GetBaselineFilePath(string name, bool assertIfNotFound) - { - string retVal = Path.Combine(BaselineFilePath, GetBaselineFileName(name)); - - if (assertIfNotFound) - { - Assert.True(File.Exists(retVal), string.Format("Baseline [{0}] does not exist", retVal)); - } - return retVal; - } - - public string GetBaselineFilePath(string name) - { - return GetBaselineFilePath(name, true); - } - - /// - /// Gets the contents of a file - /// - /// Path of the file to read - /// The contents of the file - public string GetFileContent(string path) - { - Trace.WriteLine(string.Format("GetFileContent for [{0}]", Path.GetFullPath(path))); - - using (StreamReader sr = new StreamReader(File.Open(path, FileMode.Open), Encoding.Unicode)) - { - return sr.ReadToEnd(); - } - } - - /// - /// Dumps the text to a Trace file - /// - /// Test name used to create file name - /// Text to dump to the trace file - /// Overwrites whatever is already in the file (if anything) - public string DumpToTrace(string testName, string text) - { - if (string.IsNullOrEmpty(TraceFilePath)) - { - return string.Empty; //nothing to do - } - - string traceFile = Path.Combine(TraceFilePath, GetBaselineFileName(testName)); - - if (File.Exists(traceFile)) - { - Trace.Write(string.Format("Overwriting existing trace file [{0}]", traceFile)); - File.Delete(traceFile); - } - else - { - Trace.Write(string.Format("Dumping to trace file [{0}]", traceFile)); - } - - if (Directory.Exists(TraceFilePath) == false) - { - Directory.CreateDirectory(TraceFilePath); - } - WriteTraceFile(traceFile, text); - return traceFile; - } - - /// - /// Writes the context to the trace file - /// - /// The file name for the trace output - /// The content for the trace file - public void WriteTraceFile(string traceFile, string text) - { - Stream traceStream = GetStreamFromString(traceFile); - using (StreamWriter sw = new StreamWriter(traceStream, Encoding.Unicode)) - { - sw.Write(text); - sw.Flush(); - sw.Dispose(); - } - } - - /// - /// Converts a string to a stream - /// - /// - /// - private Stream GetStreamFromString(string s) - { - MemoryStream stream = new MemoryStream(); - StreamWriter writer = new StreamWriter(stream); - writer.Write(s); - writer.Flush(); - stream.Position = 0; - return stream; - } - - /// - /// Starts the actual running of the test after nicely initializing - /// - /// Name of the test - public void Start(string testname) - { - Trace.WriteLine(string.Format("Starting test named [{0}]", testname)); - _currentTestname = testname; - - Run(); - - Trace.WriteLine("Test Completed"); - } - - /// - /// Runs the actual test - /// - /// Override this method to put in your test logic - public abstract void Run(); - - } -} +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using System; +using System.Diagnostics; +using System.IO; +using System.Text; +using Xunit; + +namespace Microsoft.SqlTools.ServiceLayer.Test.Common.Baselined +{ + /// + /// This class serves as the base class for all baselined tests + /// It will provide easy services for you to interact with your test files and their baselines + /// + public abstract class BaselinedTest + { + /// + /// Holds the extension for the TestScripts + /// + private string _testScriptExtension; + + /// + /// Holds the extensionf or the Baseline files + /// + private string _baselineExtension; + + /// + /// Holds the path to the base location of both TestScripts and Baselines + /// + private string _testCategoryName; + + /// + /// Holds the ROOT Dir for trace output + /// + private string _traceOutputDir; + + /// + /// Holds the prefix for the baseline + /// + private string _baselinePrefix; + + /// + /// Holds the prefix for the Testscript + /// + private string _testscriptPrefix; + + /// + /// Holds the name of the current test + /// + private string _currentTestname; + + private string _baselineSubDir = string.Empty; + + public const string TestScriptDirectory = @"Testscripts\"; + public const string BaselineDirectory = @"Baselines\"; + + /// + /// Gets/Sets the extension for the Testscript files + /// + public string TestscriptFileExtension + { + get + { + return _testScriptExtension; + } + set + { + if (string.IsNullOrEmpty(value)) + throw new ArgumentException("TestscriptFileExtension needs a value"); + _testScriptExtension = value; + } + } + + /// + /// Gets/Sets the extension for the Baseline files + /// + public string BaselineFileExtension + { + get + { + return _baselineExtension; + } + set + { + if (string.IsNullOrEmpty(value)) + throw new ArgumentException("BaselineFileExtension needs a value"); + _baselineExtension = value; + } + } + + /// + /// Gets/Sets the path to the base location of both test scripts and baseline files + /// + /// + /// Just use the SubDir name + /// TestScripts should be in FileBaseLocation\Testscripts; and Baselines should be in FileBaseLocation\Baselines + /// The value of this will be appended to ROOT_DIR (QA\SrcUTest\Common) + /// + public string CategoryName + { + get + { + return _testCategoryName; + } + set + { + if (string.IsNullOrEmpty(value)) + throw new ArgumentException("FileBaseLocation needs a value"); + _testCategoryName = value; + } + } + + /// + /// Gets/Sets the output base directory for trace output (null = no trace output) + /// + public string TraceOutputDirectory + { + get + { + return _traceOutputDir; + } + set + { + _traceOutputDir = value; + } + } + + /// + /// Gets the full path of where the files will be pulled from + /// + public string FilesLocation + { + get + { + return Path.Combine(RunEnvironmentInfo.GetTestDataLocation(), CategoryName, TestScriptDirectory); + } + } + + /// + /// Gets or Sets the sub directory in Baselines where the exected baseline results are located + /// + public string BaselinesSubdir + { + get + { + if (this._baselineSubDir == null) + this._baselineSubDir = string.Empty; + return this._baselineSubDir; + } + set { this._baselineSubDir = value; } + } + + /// + /// Gets the full path of where the baseline files will be pulled from + /// + public string BaselineFilePath + { + get + { + return Path.Combine(RunEnvironmentInfo.GetTestDataLocation(), CategoryName, Path.Combine( BaselineDirectory, BaselinesSubdir )); + } + } + + /// + /// Gets the full path of where the Trace will output + /// + public string TraceFilePath + { + get + { + return Path.Combine(Path.GetFullPath(TraceOutputDirectory), this.CategoryName, this.BaselinesSubdir); + } + } + + /// + /// Gets/Sets the prefix used for baseline files + /// + public string BaselinePrefix + { + get + { + return _baselinePrefix; + } + set + { + if (string.IsNullOrEmpty(value)) + throw new ArgumentException("BaselinePrefix needs a value"); + _baselinePrefix = value; + } + } + + /// + /// Gets/Sets the prefix used for testscript files + /// + public string TestscriptPrefix + { + get + { + return _testscriptPrefix; + } + set + { + if (string.IsNullOrEmpty(value)) + throw new ArgumentException("TestscriptPrefix needs a value"); + _testscriptPrefix = value; + } + } + + /// + /// Gets/Sets the name of the current test + /// + public string CurrentTestName + { + get + { + return _currentTestname; + } + } + + /// + /// Constructor + /// + public BaselinedTest() + { + Initialize(); + } + + /// + /// Initializes the class + /// + private void Initialize() + { + _testScriptExtension = _baselineExtension = "txt"; //default to txt + _testCategoryName = null; + string projectPath = Environment.GetEnvironmentVariable(Constants.ProjectPath); + if (projectPath != null) + { + _traceOutputDir = Path.Combine(projectPath, "trace"); + } + else + { + _traceOutputDir = Environment.ExpandEnvironmentVariables(@"%SystemDrive%\trace\"); + } + _baselinePrefix = "BL"; + _testscriptPrefix = "TS"; + } + + /// + /// This method should be called whenever you do a [TestInitialize] + /// + public virtual void TestInitialize() + { + + if (string.IsNullOrEmpty(_testCategoryName)) + throw new ArgumentException("Set CategoryName to the name of the directory containing your Testscripts and Baseline files"); + + if (!Directory.Exists(FilesLocation)) + throw new FileNotFoundException(string.Format("Path to Testscripts ([{0}]) does not exist.", FilesLocation)); + if (!Directory.Exists(BaselineFilePath)) + throw new FileNotFoundException(string.Format("Path to Baseline Files [{0}] does not exist.", BaselineFilePath)); + if (!string.IsNullOrEmpty(TraceFilePath) && !Directory.Exists(TraceFilePath)) //if this does not exist, then we want it (pronto) + Directory.CreateDirectory(TraceFilePath); + + } + + /// + /// Compares two strings and gives appropriate output + /// + /// Actual string + /// Expected string + /// Fails test if strings do not match; comparison is done using an InvariantCulture StringComparer + public void CompareActualWithBaseline(string actualContent, string baselineContent) + { + + int _compareResult = string.Compare(actualContent, baselineContent, StringComparison.OrdinalIgnoreCase); + if (_compareResult != 0) + { + Trace.WriteLine("Debug Info:"); + Trace.WriteLine("========BEGIN=EXPECTED========"); + Trace.WriteLine(baselineContent); + Trace.WriteLine("=========END=EXPECTED========="); + Trace.WriteLine("=========BEGIN=ACTUAL========="); + Trace.WriteLine(actualContent); + Trace.WriteLine("==========END=ACTUAL=========="); + Assert.True(false, string.Format("Comparison failed! (actualContent {0} baselineContent)", (_compareResult < 0 ? "<" : ">"))); //we already know it is not equal + } + else + { + Trace.WriteLine("Compare match! All is fine..."); + } + } + + /// + /// Gets the name of the testscript with the provided name + /// + /// Name of the test + /// the path to the baseline file + /// Asserts that file exists + public string GetTestscriptFilePath(string name) + { + string retVal = Path.Combine(FilesLocation, string.Format("{0}-{1}.{2}", TestscriptPrefix, name, TestscriptFileExtension)); + Assert.True(File.Exists(retVal), string.Format("TestScript [{0}] does not exist", retVal)); + return retVal; + } + + /// + /// Gets the name of the test script with the provided name and the provided index + /// + /// Name of the test + /// File index + /// the path to the baseline file + /// Asserts that file exists + public string GetTestscriptFilePath(string name, int index) + { + string retVal = Path.Combine(FilesLocation, string.Format("{0}-{1}{2}.{3}", TestscriptPrefix, name, index.ToString(), TestscriptFileExtension)); + Assert.True(File.Exists(retVal), string.Format("TestScript [{0}] does not exist", retVal)); + return retVal; + } + + /// + /// Gets the formatted baseline file name + /// + /// Name of the test + public string GetBaselineFileName(string name) + { + return string.Format("{0}-{1}.{2}", BaselinePrefix, name, BaselineFileExtension); + } + + /// + /// Gets the file path to the baseline file for the named case + /// + /// Name of the test + /// the path to the baseline file + /// Asserts that file exists + public string GetBaselineFilePath(string name, bool assertIfNotFound) + { + string retVal = Path.Combine(BaselineFilePath, GetBaselineFileName(name)); + + if (assertIfNotFound) + { + Assert.True(File.Exists(retVal), string.Format("Baseline [{0}] does not exist", retVal)); + } + return retVal; + } + + public string GetBaselineFilePath(string name) + { + return GetBaselineFilePath(name, true); + } + + /// + /// Gets the contents of a file + /// + /// Path of the file to read + /// The contents of the file + public string GetFileContent(string path) + { + Trace.WriteLine(string.Format("GetFileContent for [{0}]", Path.GetFullPath(path))); + + using (StreamReader sr = new StreamReader(File.Open(path, FileMode.Open), Encoding.UTF8)) + { + return sr.ReadToEnd(); + } + } + + /// + /// Dumps the text to a Trace file + /// + /// Test name used to create file name + /// Text to dump to the trace file + /// Overwrites whatever is already in the file (if anything) + public string DumpToTrace(string testName, string text) + { + if (string.IsNullOrEmpty(TraceFilePath)) + { + return string.Empty; //nothing to do + } + + string traceFile = Path.Combine(TraceFilePath, GetBaselineFileName(testName)); + + if (File.Exists(traceFile)) + { + Trace.Write(string.Format("Overwriting existing trace file [{0}]", traceFile)); + File.Delete(traceFile); + } + else + { + Trace.Write(string.Format("Dumping to trace file [{0}]", traceFile)); + } + + if (Directory.Exists(TraceFilePath) == false) + { + Directory.CreateDirectory(TraceFilePath); + } + WriteTraceFile(traceFile, text); + return traceFile; + } + + /// + /// Writes the context to the trace file + /// + /// The file name for the trace output + /// The content for the trace file + public void WriteTraceFile(string traceFile, string text) + { + File.WriteAllText(traceFile, text); + } + + /// + /// Converts a string to a stream + /// + /// + /// + private Stream GetStreamFromString(string s) + { + MemoryStream stream = new MemoryStream(); + StreamWriter writer = new StreamWriter(stream); + writer.Write(s); + writer.Flush(); + stream.Position = 0; + return stream; + } + + /// + /// Starts the actual running of the test after nicely initializing + /// + /// Name of the test + public void Start(string testname) + { + Trace.WriteLine(string.Format("Starting test named [{0}]", testname)); + _currentTestname = testname; + + Run(); + + Trace.WriteLine("Test Completed"); + } + + /// + /// Runs the actual test + /// + /// Override this method to put in your test logic + public abstract void Run(); + + } +} diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/RunEnvironmentInfo.cs b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/RunEnvironmentInfo.cs index 2889214e..4e6119de 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/RunEnvironmentInfo.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/RunEnvironmentInfo.cs @@ -1,73 +1,112 @@ - -// -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -// - -using System; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Runtime.InteropServices; - -namespace Microsoft.SqlTools.ServiceLayer.Test.Common -{ - /// - /// Contains environment information needed when running tests. - /// - public class RunEnvironmentInfo - { - private static string cachedTestFolderPath; - - public static bool IsLabMode() - { - string bvtLabRoot = Environment.GetEnvironmentVariable(Constants.BVTLocalRoot); - if (string.IsNullOrEmpty(bvtLabRoot)) - { - return false; - } - return true; - } - - /// - /// Location of all test data (baselines, etc). - /// - /// The full path to the test data directory - public static string GetTestDataLocation() - { - string testFolderPath; - string testPath = Path.Combine("test", "Microsoft.SqlTools.ServiceLayer.Test.Common", "TestData"); - string projectPath = Environment.GetEnvironmentVariable(Constants.ProjectPath); - - if (projectPath != null) - { - testFolderPath = Path.Combine(projectPath, testPath); - } - else - { - if (cachedTestFolderPath != null) - { - testFolderPath = cachedTestFolderPath; - } - else - { - // We are running tests locally, which means we expect to be running inside the bin\debug\netcoreapp directory - // Test Files should be found at the root of the project so go back the necessary number of directories for this - // to be found. We are manually specifying the testFolderPath here for clarity on where to expect this - - string assemblyDir = Path.GetDirectoryName(typeof(Scripts).GetTypeInfo().Assembly.Location); - string defaultPath = Path.Combine(assemblyDir, GoUpNDirectories(4)); - testFolderPath = Path.Combine(defaultPath, "Microsoft.SqlTools.ServiceLayer.Test.Common", "TestData"); - - cachedTestFolderPath = testFolderPath; - } - } - return testFolderPath; - } - private static string GoUpNDirectories(int n) - { - string up = ".." + (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "\\" : "/"); - return string.Concat(Enumerable.Repeat(up, n)); - } - } -} + +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using System; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.InteropServices; + +namespace Microsoft.SqlTools.ServiceLayer.Test.Common +{ + /// + /// Contains environment information needed when running tests. + /// + public class RunEnvironmentInfo + { + private static string cachedTestFolderPath; + private static string cachedTraceFolderPath; + + public static bool IsLabMode() + { + string bvtLabRoot = Environment.GetEnvironmentVariable(Constants.BVTLocalRoot); + if (string.IsNullOrEmpty(bvtLabRoot)) + { + return false; + } + return true; + } + + /// + /// Location of all test data (baselines, etc). + /// + /// The full path to the test data directory + public static string GetTestDataLocation() + { + string testFolderPath; + string testPath = Path.Combine("test", "Microsoft.SqlTools.ServiceLayer.Test.Common", "TestData"); + string projectPath = Environment.GetEnvironmentVariable(Constants.ProjectPath); + + if (projectPath != null) + { + testFolderPath = Path.Combine(projectPath, testPath); + } + else + { + if (cachedTestFolderPath != null) + { + testFolderPath = cachedTestFolderPath; + } + else + { + // We are running tests locally, which means we expect to be running inside the bin\debug\netcoreapp directory + // Test Files should be found at the root of the project so go back the necessary number of directories for this + // to be found. We are manually specifying the testFolderPath here for clarity on where to expect this + + string assemblyDir = Path.GetDirectoryName(typeof(Scripts).GetTypeInfo().Assembly.Location); + string defaultPath = Path.Combine(assemblyDir, GoUpNDirectories(4)); + testFolderPath = Path.Combine(defaultPath, "Microsoft.SqlTools.ServiceLayer.Test.Common", "TestData"); + + cachedTestFolderPath = testFolderPath; + } + } + return testFolderPath; + } + + /// + /// Location of all trace data (expected output) + /// + /// The full path to the trace data directory + public static string GetTraceOutputLocation() + { + string traceFolderPath; + string testPath = @"test\Microsoft.SqlTools.ServiceLayer.Test.Common\Trace"; + string projectPath = Environment.GetEnvironmentVariable(Constants.ProjectPath); + + if (projectPath != null) + { + traceFolderPath = Path.Combine(projectPath, testPath); + } + else + { + if (cachedTraceFolderPath != null) + { + traceFolderPath = cachedTraceFolderPath; + } + else + { + // We are running tests locally, which means we expect to be running inside the bin\debug\netcoreapp directory + // Test Files should be found at the root of the project so go back the necessary number of directories for this + // to be found. We are manually specifying the testFolderPath here for clarity on where to expect this + + string assemblyDir = Path.GetDirectoryName(typeof(Scripts).GetTypeInfo().Assembly.Location); + string defaultPath = Path.Combine(assemblyDir, GoUpNDirectories(4)); + traceFolderPath = Path.Combine(defaultPath, "Microsoft.SqlTools.ServiceLayer.Test.Common", "TestData"); + + cachedTraceFolderPath = traceFolderPath; + } + } + return traceFolderPath; + } + + private static string GoUpNDirectories(int n) + { + string up = ".." + (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "\\" : "/"); + return string.Concat(Enumerable.Repeat(up, n)); + + } + } +} diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-err-blockComment.txt b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-err-blockComment.txt index 5f18e60ca67dcd50b37c155e6294ce22077b4e4d..0096e7d9503e8b8b54dac3f066123cb2d738006f 100644 GIT binary patch literal 376 zcmcJLy$ZrW5QO_c-eI~xFltP9U?GyuKhAU^MKp^X@$Teqh2Ya0gP6v~!mYNLo%v=r z)R6<*mW+B(17&V^7GbdbI$;n7#Y^i)Nf?y5lzS;~whduzwI;(m%LO^DOwGM(%}7Ox za$X_nw`_qjORGK%#W5l0lGD|m+xO{|JDxz3_w|JYw#s{DE+EtN34=Lw?OH_fESgp? gr1G$m$6Vqc9K&nC)Um)U#@+B(YoPu>#lJv50UCjJT>t<8 literal 754 zcmdUty=wwN5XD~|@PF7Ya2TVp6D)$HOQNXVVR3#Sq9#F45dV1f_s-}c+E`e~FgqW+ z^Y-oR?6#j8X^k!vl z-T^g3I0QBD=7@Qv`X)+2G~;>3E+IZ}wHH*OzJiTaRuB8~pR4LE%U0QS-Y*LvbvR+P z1-7pl_yf9derpNjHCm*?OqNKZF`l`8f#r-5$HZpp-uVqVb5|zZGG*skkzQF#FgbQ9 pR!i@^zLRw#JWN0GsqqAPnmj9k_eHF$?ANaSR^IE&PDOX?^d1k2cv=7e diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-err-blockComment2.txt b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-err-blockComment2.txt index 9ea67865aafccabf31c5a7e75de7cda3fec8d2a7..29f584c4a45a608737676814785c165ef654fb2d 100644 GIT binary patch literal 377 zcmcJLI}5@<5QO_c{=;-aF!9wLScs(a#hETxM6-k=-ksd75d8ICf@ou7;Z{@3&VI8S z>d1j@OGZ7YhBCK1i#S?-oj8i4qWAibC63Bm%Doi0*qX4mT9e_O<$|16rs9xVF=k?h za(Y4<)FQ}5(8{1VrsQ0DzS>LsTAgRy@fe!CuNo5AD({tPK&B2ShIHu4wHPInQFiK? e%EL+?bBVuz49@{m#{!cCcf+4z1NWQi7w9KyAa;`g literal 756 zcmdUtOKSo_5QOV2(N@ z^6r?N2^fOju$G8%CHlZisA$B?6kUve#cC_4Mt+SwQdL9tmn_!EqKz!>&H|PC+;Fum z`$%8ZAH%}!t96yBeL$bdF_s+?YldaC9gsNUnlpT3HGA$N$L`FScNUx!RZ@ku490Js oB6ZcG|9;9v_(zQ7ljAA!M0s8U9hO-4>CfH!v7GPUTs?~E3$ns^kN^Mx diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-err-cycle1.txt b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-err-cycle1.txt index 99ccebc2c311e224287725ba080ebd6aaa931361..ce03634793c4086cf1047c31e59a0d9ccb775b84 100644 GIT binary patch literal 789 zcmaKq!D_-l5Qgu0ior`-Q8CfeKo6x@D2OdF;34iIY{t4Yjk4La+NbYiw{~eY=Cp+Q zzJF(S=5!zpX7@&w`l13hw68O>ygtA}d-~UhvbxWx)xu{Dk?5>3v%5qtx`2kn;t literal 1618 zcmbtUO-}+b5PfG8|3kxN)rfHcFC-p}!Ni21K@tuNhYcS}L?sI-`s39%?e4Zf6I@Kw z-RZQQ_vWMX^WDSRSgZ#(b?`x)= z+?zRd+uSpDna_$$B^JUl*53|s%hV+tWd}9PQI8PPcE}qM&WWpdPNh1d4YmH5r^It# z93&FkTw28aV00vEBi=2_$VE4-Dml}TaqA=F)T4JjqWF2N=cEXaO+3q@N`E3osphbd zT>BYxb-gSYg*oFFGY`e$Av|0}%cGX^xNvw#mVEixr#1xH#jwcYyTqUZ7u#3Yem17k zi)X_{-NhzDmfAegL*X7*X!BJx_?3#@td243b*l4Ia^8!5r6tp3>lkB~4J?Dt=NJ+FedA0&?wgR3J?&49xn-jcqHD&iTtZc6yvLl*T^9w;-!08 z80LNR-pnJ9>>>RdJNwNmST}5h^6d7{muI?W`81v=q`%S2n$YCgVn+zS!q}Ng*!RN- z7In$qmr;GsuhvZu~M{fhD8Jhy$9QtzEci;9vWY1I|9x@_V`jyk`<2ZvxfCOo*d_mLv literal 1124 zcmd6mK}*9x5QX1a@IUM=3Ra9BtOXB(9t1(L6%V0@(rOKAl_a&*AFqBhTbl@8ikGq^ zyE8jG@9mq}ug?qJY0g(DsM3obSx=PfgL#B6$9mP2y^c1uq2m>X#b@f0snVMUV00K| z!|tStk6OH%Jz|GcbSD3*6}egbKtG^#&TU`X9HNN6qcXxwRYI zf@(fzx@KJRnYu&Rjhw{|_bynOXWXcDlYdmvG^sIa+*AjSoNC{-vL0Do^BvASyFw)j zjaeDbb8;CotDJGPYL`+{g=IL1z>ZtTQ_ m+Q*KI9d)G>l;&P?R9M()D12-c)rm^;a|qPgzk9YH ze;eSb07Tx05}i|13s<##-`GKFIDXn$ACy z6IROPuOwi!XsPLU89!x43naDMSc$Xdy}gCrzVjZ+0q-fAuCa$*qj~O%dqWf&ODg|} zCc`tKS9S5;Vcp^xG8Pf3vP|%#vaw+8eH6N6{jNi6&-6-j{GvKO{xB;lXc2*vf!W4e zLz5A$mh1GL{-x7?z?=a%L#fLa_Jpe{F?ccWp2;V;L@rwOZ9Csrd>iy4sc^S?S90d6 z^z>Ute1U5)GB8u8Kp(3tyTBx{+i~o+4LfD%wJb7f!$2b~%OW5K7BQNsayy1cvV_Mv zl(G1hmH(bP8ou7T^@;N=@~Df+tD$60Vo)04m4o}0%HtQzvgDb+0G z_iE1R#Zj$JZH=nP-^bOMsomss4*TR~wS5gKbF$6jzRYH-j;}^X@=cDZIQ!fqcR!Y& z*jg?6e{iaLY`+(n_V(!E@G8&E1ri z!1luVf52MVYgN@aG_Q;Gf6VL@uV%f@yyvMa>wNuN7`v)?LvQ+Dkh-0FMZdxu73#6C FUC;Y`ZTJ8H diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-err-varDefinition3.txt b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-err-varDefinition3.txt index af42b18f4747320c346cc6e4a85ad82d4722c256..fac12a566588f12e6bd441c491485a15ea2e9554 100644 GIT binary patch literal 605 zcmaiyPfr3d5XJBP6mwfhSmN$pw223UYhtnivv8|D)Mda%X-PZC>Zf;DKobAaOOr|8 z?@ixKg)Igk|ANkb;2f-5Z%B&kUyo2DnWo@8yqRFl(<{Op7uK<^X9&v4U0~5_}zmQtYc0Tb7FH~26kzcLQ5inymO)-R&wYNL6CF@-=q?US_%s^deNFkF& z4ywp>UqW)GpF|%`#<;Dx)pI5XG~47m!y@lo9^DDF|JwhYqqf6bGUlqo9O5{!IF@su zz4{x72|_*G)YGztvaTn!gvQSix;)EvjScZoIL}=E(DRJ{j(M=(1t4rm!T?qnqgkSa md)N37m<#dUk!fLTA|Mwxjxey<_Sy12tWAj4Eg?yUT6_Y}6}|5O literal 1240 zcmbu9T}uK{5Qg9Dp#QLU8lX|*OyM`394CiZR z&dfV=X3qClT|=!Ib9st1)eHNHLVdD6!3#Ofv_w|Zv5s_k0GWPA*W4^Y9+sxe@9N_% zWPa2uUOfB^HHtkspG9O5{6J0J>O?)PG*nLz*y({AQDUhEe~~$xJiyZkelNz{-o~{^ zZ0ttiaHd)wn5TM!EEk5v;c4Ty1aA(N67M&h9rh5-kb4vPDzjfRimKqTf`yLGK;y-E zFrKe!%=MA>h_S}0fHY5@3Q4>jWn*c8a7Fg)B`w?eV%f#*;;C+9^oc8trc0i>c-@aH z`-XW?{q~+>x`;D;9%p`&;oVxrZ*FWxsEieCLa2;;;4z2A|P^3SG?d>PAf5MZ=ta}zvUt@O0y`vT^ y0_z`#*F*jRH$rQT#)@^pYJF##%UEU|=OSC_nL2jA#thv#+E&+N?i8SM(g8n6Bf&5L diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-err-varDefinition4.txt b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-err-varDefinition4.txt index 6525f508dd98162d611c8d884b675dc835ae092b..3785dafcdce96fc0ccbe853bbac5d8ade6379ad5 100644 GIT binary patch literal 661 zcma*lQBT4!5C`!0eu{gWCX6s!M>u=pICu5n{D9i=H$o348yx}ocs8fVmjeWiZM@9Fc#=atLHa_3YXeo zb+|9=l1nyk9`Q$;iFg2e5>$ZsEJf#1Qtq019kex9{ZNOCjAtMQ5>m+c2*kC# z5_yoOxSPRtRwvMZLjApe3MLw0-W{M4R#ZfO`84f`E14 vza9Nnf%r3t-R1 literal 1364 zcmb`H!A=4(5J2Z_;y?6;CSn9kR1yycIhYVN$PGBG2)I#!z#{0!t8Y5XE~|tDFwJ(` zPN(x`I@9m3nsjB(Hx?(64CRIKKtlQC|HN9zY$Q`;W!aZKx!j=X{-!)|QY7yZV53Z% zEX~`1KWt+NW_Jk4QuNN;)}+K=*zrh}?0Jx3g@Pl%m?oXRodIp2X4uvb90DJQTv?~|^b`?WLH4w*U0 z(J#j&7n3)!y0{NVl)5q_QhFa6h26MP2IDFwtQSjMExc`EZ#7W`x;L8Ui^gbsqOA3l zs3;{Ls}gZcqqRwPtS0}zSSopz(&$S`JWKeHvagS*W$rGK{B3tV%_2Hh1NU+zb@IGQ z?|fgEJI0!$9qwA|PAg%NlU4G3#9D{jx3|JFAe-aqZCWj8e%Y(CO;sJC8zlrf*4Inl zCg-bN<(iQbS|EK!D!Cy;)dQ_w<8{bCeBK7=J1Q$+#UZtwQ!mqcH_vABOy$}8Gh*+U R-CBu#baLKuj>@+e=La}8)HwhE diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-err-varDefinition5.txt b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-err-varDefinition5.txt index bda188ad8055e3f08d8abcbe447473f0a23e74b4..b8b4484a66289506cebfb99acc260af7f617007b 100644 GIT binary patch literal 738 zcmcJN!AiqG5Qgu8yu;w73Z^6!v0d;W*qf*%ksg*DmUP-IHJiFSk>Jxi*;Jc@QbF9y z&My4l%=|O=*r5e#c4+iFu0fl9OCk(zzCB?eGo&|Vg>e2Z`HgS;*-1WXReCdC(ORcS)ES0$dp zd5Fg?K+Zi5MxY!!I)(5;k4R#W3(rs^#_x+6^aG0fOyW^J%QSsV1(eMiAtS5J_MxF1 zZLN(Wo($W@<_s!Nm~lK~tF-yq&r7J$IkiOr&!&879D`olhE(r3)XMHaZK&UX3Zbl& oRb~HjKL3>cX2+jy(`=c-Kh@_~4~WMg;H)*A{j=erh(CAm0k&i7dH?_b literal 1478 zcmdUvK}!QM5QX1a@INeGs$h$yh;6}xpf^#ml^%+RrPa37R_(4*{PF5H$<{=x2Q4BJ zvOAec@?Iuy^74GFE6wRMCCYWHG4@m=J@N138!@`m1F@#owWj@VG@IX5i=A>kDg~oS z%cAim@eVVZAer69N}UzFwoChsS;mZI9v&&oO5UL+?3shm##;t`Mk^PL4jEs&Q;wK3 z0%xjSRj}vuO;y3GvbL)ocqOb$oUiVDd-%2-`x4*yWF;cYtU4Nkk%O6$)l@yKRoMk5 zfnCF~t4Hh-ea@&213T%eECOO+Q6*=Vxkkhz{es7DWG2RsS^4|4Xt=#NKSw&JozhL0 zJv7mG_tYX!GpCh-PVnX^%G5M*KGT@58Lu|4oER%`s1=&36{@l-`-wicSv3JQqoo>P z8RH9f>*)rDrbw&edn(xY8Z)nPTW1wHCYn+K#@)XGLo7S>(8W!oi&%!WIDe(kx7YZY m4#-wZmbt`z|4;tHt7k8uuLjHF205D+Xa9J^aVGx$4qgH0EbVsy diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-err-varDefinition6.txt b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-err-varDefinition6.txt index 47a16c602e7a2e1131cac291c65fa4519782df41..f6648d8b8d83df3c36b7b4810822ffd9a7a68a44 100644 GIT binary patch literal 801 zcmbV~PfG(a5XJBNDTcjNp)HLEZ37+z_aKxiy9+(U9O8D`1~t1Rsa^f_PLtLJ|5eN- zAuzvr^X5&lMGL-uM5Etu0opVh&y&kQx3ho zfSx>%=4|o35ao^LB}bv^~VUIE)duV#3Ue8hxogcSRP3(0&b_tQl^n+8niqMFio_cE+>l(7owEw9(%kIuw3l5FrtFS9y`;kmdPp&Y`Lo z2q6kt+hFA>fRqK=_}7^znLmf59}^6ow#Q*VdLN$AIkiF#H>Rqsr3T<$jaMyfl>?;D Yjqzxy>vpZ55E^BjHY?~I%p1z&9Wr(Hpa1{> literal 1638 zcmcJQ%}WA76u{p(=zkczSdh_nC>1&cc?iV9gbwOq^Q)yYao4o|`0Dp&R(Do3D2ZWq zXWqQ^{pNl7^;wsJESOUB6bs*aaNUm*^`T34ApPT9lw;wn}pb? zGGcGv<@_FvDwcHJVinrey0jn3`afDkq{=+lAeV@w3Q%|$#{kMODG>e>7pT@;65I>jl)v-Bp4I($EX0)Pr&!Rwl z4##)8%Kac0!w&V+!Rlr%SGl|7)4JWCX_geO2i(e~G^z6%Ph+1=xnZp}+M^Qt)>m0g z*2w+|vYxF}WZObbTPrXVIkgVrgq@yCP^7X&s0F%5)jiNB{3!=pq+vf+QSVKFi)BT~+T z5{A$wHOJjdo1@KP5g_br-*z?%)}3h~n&8aVV=LLRf^f zsj>95e6$HP@2?fnR{p#qy|}&LX?7e!;XQal=hPZGT${48mUwV4#;XQ)$^p{l)_An^ U=5C`O5o%?fHf!j{#tmfh1_?Cvh5!Hn literal 1622 zcmcJQ-Ae*N5Wwd-=zmyxu^^)h$`9xv$cI2IOz1&- zyEC)SZ)bMK@2|3SWXdxVBdNT}GxLG;<&$q4S)bKV#^{Q&FMD$NhoSa$x#yQsd6yU; zMMe^=o9G{~DB?-yHDXVv z(BMCXriL^N>4=e?(OEmZ0IXPiI&&Z%`y5 zgJU~e-1~@n@NsHTI}N<9=W#@YmA0lhniqy{ND$&(^cuO|r%k|R#be3bhr9o%Vo}hK8tUmi{^@=88#L{D?`Wxb} z=g~gq=neW0q$yTYEGB#tzS{TIa%^?l`P@Ii#P*>VR>txH^cyZfn|kAUa{29-h#dWkvYfkcN-@tlNKtUr{yua%Qp~12ks_^@ zTqea1cOPaV!UaSMl!qekqqTj4uW_l3_PR3Tfp7c?;|#=5LLV3(gSe2V9J>3*yYe8- z*V?12Rf)&6U<7RfVjMJRodO$wObBs7U_%g-K&Y1Zdnz$JN>n5p{wEt2Bcn1RZM@uhm T*ZK*eR@P~=g6^(q1DU)7yIJyJ literal 1606 zcmcJPO;5r=5QgV$;(yq9sU~8q9}!4An8?9|pg|H3z@dU5QIXIh=#N*Q*)4P-V4{uL zw4I%u_I*0LGhd%od5{^`Sd1j{Do@x$8OR6EF1`V?kxW=C%eHLE`7egXH|3TuCGsW_ z8f8Z8&D*Ts5m81-?FLq4tyS;6>@YN@CRL*J+d8Yj++*Ihp2p%2;xuNN*AZn=W{J+A zoj}sSTYz%RD5T_<%zHK)17Zf~45cUs*fXwO3DFCAw<(9P7~V71SG2w}e0xL~3AppQNa z#hDM~)T3%qH!W1xbGeGmbBvD~)wb`KpyEa!@Emk=7 zBYYiOjoJ}ik8t(wpO8&^<$CB}y2?IkiPsghA7~9KtJ`^vc)=SpBI#r4+7-Fif6@Ns y$PMf7coU*#L`-?cJhj(rhxH^cyZfn|kAUa{29-h#dWkvYfkcN-@tlNKtUr{&qSKQp~12ks_^@ zTqea1cOPaV!UaSMl!qekqqTj4uW_l3_PR2Yfp7c?;|#=5LLV3(gSe2V9J>3*yYe8- z*V?12Rf)&6U<7RfVjMJRodO$wObBs7U_%g-K&Y1Zdnz$JN>n5p{wEt2Bcn1RZM@uhm T*ZK*eR@P~=g6^(q1DU)7#T4>r literal 1606 zcmcJPO;5r=5QgV$;(yq1K@&07j|e0lOypof&|nh}z@dU5QIXIh=#N*Q*)4P-V4{R< z+Rn~S`#zoBneVTvJj#@7Bt{Z>lV|LK^yQOh2VbArP{yp4Wmk6O;txaP8*;~&5_y*h zjWQ$l<}KFmi72C_c8C>OYuTHVoIKc-npBC>Z|fTsn7hnd))UVEAWmZzc^y#}WftfR z+6g2f-U5^(Mj<7?V&1jc=o8aNXCNgx#GZ2PNq}C!yA3&l#qgf7zM}P=JoFGm3zmY352E zN3@1x8=3L-eJZz~x|;3Yw(}FDr^u=LG^aL4ft+|Wt}0gVSdATZXb6YA#o?o1CL%-QQ_u6t4DfdvTR*Mx* z{SaTin|cfLR*Xx3j;1(WKjrF(%>e}VoYAz!FEz6(^$QvOMkTb_?Va#$e|=t_iAQC%dfpH$RbJ{2hHlCUrbwbA9! zBjL?@IG4QU@bFtq)UnFxrDsD|&{l&j*4n}y+tS)m3{rn49K~KU!6ol{n6>~5tBtR@6>LwmMa3CRQO2cK{!`ePzBW%fbq19jSD^N|0lDNlB zX1+HwQ>w_p=Wk@q2W2pJxA!7=`1J)c5ew~%e%%lpEyJy1QK)8 zd*{x~?VK}@ug|8&TJZ&P6ltMnW%Y^BQZqwmw+1XG-1`aM z&YDx0`TS&%W6YU5;I)iIL>eS}NB63r3s{vbZo#CDWulsn@U>SZRf$vObyvq=aCqY+ zI!|Yb*3&8aGG30{f6R=VWxy&>uxo)gCSO)ptHbUbfAUFr*4ErTYE-c7k-Hudf5((o zY*#FsG5VKk3{?O&T z*yw>;qW9kX@db=)=`cF2ojQcX_#wU`a_uxSZd15J_4W-N@8_3;?VIy}@n+6b=| ox0o~JOeb=|)SE4xQJcb;+4QsdUE&+yZ49Q^+-xpgCLx`?Z$cif5C8xG diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-err-variableRef3.txt b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-err-variableRef3.txt index 53d8180f34f3d7ccf639cbe1c8838ecb50c49b3e..cabbdfb72948e258aa0fa53a5151bb965af38388 100644 GIT binary patch literal 691 zcma))OHYG96ovQvin}nOO-duBK01jD7c81I)lhVUvl!u0CzhcZrUm`=US2l7YS}T& z{m$Xsv%m^9nEVx$e8&W&+U^XqZhn2NC}a=Hpw6TchHmeLmg0GXpfN>_DnuQOTsf$<)58Nyy|Jmxz-2B(=NuexnKy&T zyXHd%_Gyl6-peepTu6n-l{!9YO=?wd)<`|61Li-s{ak~%f@pftAlf_*m=oMgSUXN6 zuQoHi{9%T2J@!BS*f#>Xu%i3hVC4tk2fpx%C0>W7w+z literal 1420 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 literal 22614 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 diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-input2.txt b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-input2.txt index c36560e562bd24a54c975b20be837702f385abec..97c741cb5982e911247bab43294693afc3909cb3 100644 GIT binary patch literal 15374 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 hBKG1a95{s%f%zEA)F diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-pass-blockComment.txt b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-pass-blockComment.txt index 107771e549f2fac761743ceb8b08a312b219746c..c6a0a85485b841f8729099a70517f2afb4ed27a4 100644 GIT binary patch literal 1540 zcmbW1O>e?542JLd6}|zLSV>#hh_uTPH^gPVl^#l$X^7FH5wvQ*e$IzipcT+n{jiew z>1)T%LRRt%RJoPK=10E4rq~~qV9%`=OJ>6NJU_KxGJp)vSg|mlHTE+yD(5CyM25aIyg@8~?GSmR=h&GYRxCY)6Y9Jg0fuRm{Y_s1fRB|+o01Ink zMYZ%%H+7+KG$cn_-D6YTJ!vCfgVD$*%37nBy9tbpK%^mgtOZX0Cy;y*GZ7p)oKqJ# zg{vZW2gPZJ;mLBfl51FljDa%G^I%@d{HP?XGnIcppAXoJu@v^3VET~3N58O*(84#~ Y?4pXX_}nSVS~eXijXc+5Cr2e?zl__&mjD0& literal 3170 zcmchZ%TB{E5JhK=#6M)mLnu?MIb&NxYv`!o-|E?wkUF& zI3CaO+{xHqpGR^f?`SU)$ylD`4)>38DmYUHuFx}S+WA}s!{mIAm}iVp z7ig1n7WSOi+7|1LWGMHTBSTE9GfZ1Yy)ENt3A}wD9lv%WJb9i#CFYQNSE{7U|3uP&=?soIgrc zzadT6QFe@S%~i6V(th)QkDaoHRGu~w?N1G@R%%lqiNFBvV1GVYZ6rg-nG*|PPm z`t>yYBAJD|_(DC;&vvcl#*oaGPN_R(40p|U+Z@A1Wnb01XDV2GMp@?G>^*$BktDOF zQ|h#gWY6pv{}aiocV+52COreh$jPt@PR6nz%_`@Q>ASF=bpBp_>iA}p7y9z##4{{& zqVG=3nL8D8FB!VsB$FH5^CYx^u?IolINuBP1kG4*mHJ=Y>E5M%dau9q+g!70qfIUN XM5~`w0*<8h>`bp8$=*5*+0XV3zYVxDI`yP+fai5FVVr8o3x1wD9SIo_#e0r{2=eM1II+JVnv|5yvNv4x8 zpIv7vm_$@865E`thf)SI%q*!a3{`mLYy@zlTd^y9vXcYfmiroFZM2ix%A zQQz9A_VYe-a*A;M<{KaGKg-$U^Sp3w<$vZ3>e>(0YvuoO%UV*}l*Mah9v5X{UKWp! zrdX|(D`cQ~%2(?GNJ+6>FKKx48X0&|o)N*hWhpHG{^E53Yg*}5!}rb+uXoHmTi&{9 z=bBc|x>+z-A@mRCnmo%ZbA8o)%GYaN8+keJ(tnzIWck~~C1%o_nyyLQ$V{^7J7-RG ziJeSq+Lz+xGezkjAY%ZugdQ>Q@6xl*mxo|aa6FYXZf8qa`1%w+P#8!?N*cGqcj)@+Q|vIE zNdr8N*~eDG1qji1LXd#rxi7Rvh%`zFgil!D4oHZBERXi8l}+%F#a0s-hFUNXF?9R% z28Jmzpy~t^Q^$CWR%GC0x;WbdN`jcjo0bSgh=|`%;un!F2%gLr7P4??Ibph8Z(hI} z15X&>4N2OeRF*htYXZZl%!{8#N;~9@hxec%X_HA6jfh@7U7Up|nFQ~~$1W`E;IL4H zi1=j^zbNBKTFhsbMOhdPS=x>Bptm$Y<)Kp?&>5*bk~J5na!p_uR31yUKT_q4R0fKv zP z!HTm^<}=HJoAkuIW()CV1|(qSY8JpF%D|*2M#iOJgJ2vICrL!(Ba?7MNk}Z_B8`$H zTIms`A5Fn*zCL7q1=?SvJgiHyVNv(@WP|y^hj#F-B64HlQ(aCw`D3x+7lX%7%$yo}5 z@X{fDk;_8*X@|&LA5f%VdJU&nakInrWO+qqLcEE4}HEk)d5uuLAjM=wdK=RUHf{6 zeAIe~5XojM;<%MJGBB8yyENbk6!p()=O-qVmfJJ{sM9FUR=4CpQOeL#!G`XlbtXx0_1=ofi)gBJD3$OW@uvdf+2Vc~0o3UXIQ>*?l7br7aWO>z6i9gP zR9XFcY!?RY$sbf08i*3HQ>HyV8r0VS-q^qb0l4y%j-5B{#UBsAQ-boa=2Gpg(+!0; zG-PdnsvM!x88Ouw-iYSWA&X$ZoehE!n)^@bj!GUPSOZZa1=z~EYVK{kv4Mg~!-#lF zr*Nmy?LhKa3Cg2DYf;}6EZk5#X#iUlB1o#i>8~m1XmBZv(A=O(cNBEo zh#jhc~r6Ems|d2vjMPU*c}hs_-NcQ>VZf7^vu3v z2F{*5hwgAW(trJad3AQ_OudiYF5vx})`8_sr!$d3=IrwF0z+rZd13gP^X&Dhm{s_{ z25>QnEmHR$Qngj-ai6>A7W6$#qDxa&*EA)I_L=wQd$C^UcLiIxT&?gvv;McN@>lbc euT4?Tmd|BXtYE~;J=soo$0X&+2Iu6%wDUh8PDV5U literal 17180 zcmc(nT~Av_5Qg`Q69IFWM-oDn+46kaCf5VVjRYXh7f;+8^I`-W`u; z=A8Axu6_2%0^@V+-DhX#o&E3*|NiqjoP|gFxeG;@g`4o1{{9j!!{79LO4lyw)ou7n z_YT9i;hXT&8V|hxLpY{S-ctD}X+|Y>!UqI%_c25>}d>{NqB-3zBap#ou10CHZTcgow zFLc8X-=KGBojLzs zYpRU4MZU}LiXj$MlLv zrhB?p9fxG3k#`j|>PQccV?Q3#*svG->7M#Y$Cfc!?UY{2v$uxW|2rB7FcuW#!#@&J zL7%`#b{G!gwSBtwoL&`Sr!>~>%v*qQQ0d+f-2;t)@L%}W_866i8M_PakzxEue)Ey) zPSasD-WHRuUzvK*Zk;&3isdl=r-@z?kL*;&HdO#iYiEg2K{ z7Jb|$ZuP``y<8?xE}5Mdrm^$5}I>2aYl(8Ruu^Wbl5lZIR!z4i9L#pZFpjtK)JZ@`!Rk$9dVlUL@-(! zWn_!?UDR3TiQ69GKxOM!szKC8pJrIvqst;+Gx`9VrBJrc{QAJrRrS%!st@);CT21w z9xU`RAX}?7>m#*Yk!)-1E0ZW6&me}*2mLxW9T}Tc3}`Kv(vG5U4qfl(QVghU{YurL zD1*7;(2d9AB|g}+$gVu5>EvsnX^>!{l1eL8{sYEyX!LIKnEvT6LnPUpmSW4E= zzVpSL))N&ofs%FS^NEogOP23H=F~PU>iL*^f1&M>i{1H0=rW1&v4-HC*o%<4Y}@Jv zuP0Mt))$DepDx6?d=zA!K*>boc((J~(-u_DJrq%kGV zH8z3F6DXOge&A+t7cHos`&?AdJeE`x=XV8jT2W_8cK;9Dvg*KSY3CoyPYk3r-{h`Q zic{^YF~RT8NSMuF5nC)Ie{%D$_v78dO4&1Dy z?TE_Mp3PEAOgnHMk;`A1&NEm#+~;|~ftx{JwGdgQ|2>hXmFRlld^N8%HNG;1CB!$9 zuqVE~w`=I zamV^hKCcFyXRvheWcF!{d^$7avvp}dZE}VH{bAJdRGygkIABk^FOb)wdXk4JJfXyi zu3I1Qsl>ERo6q`pU*iqKUaODgejwVVe18i?rQRVTZydnjw-^(rMJ)|w%>@0)XJ)x)P zHFJ+*gSB)%KW0Kt;R*S>2oT!2kYtRct=iOx!nB^q(#jqx=9u=o@T%_8+)a%U;4ZTX zH=p6*Xwh@gtR1~oc|56jbKm(xHP0w*;b!$_&qHBMhR1q(@pM0P&Zjpf^c0>@yxV^_ zRj;=kR`pz-ndi~)-c_PlQ_+EK>sc(P%$vb!$BMS21Gvj@B1IgSjsNz8GZQhrYnkWKfT-usKWHlueVKpe5USP!fK_#DnhXQ`_9$Mx-w<0zq7wu9lX1$%#yFHe*Sy-IlQHQd_}*J z|5;wqos&0k-#?3f!T(FaW-C9Nd-sQ6%YuU5(&K1e?v#80xzNaLl{`{t>^7Ot>v z9x1*bSZCEDSBu z{Qa@dM%3aPWcekE{8xNHURU~j)B?nU}a=h9Hu_3nFBo6Szec)EG4m0uWrU9(G##TdcY;bJ9^<&MNg>ROh3t5 zPCVv8GEad5juw!3Q95NXb^?ym7P%EaI(a|RfDq~{ytmNI_rhXgQOiE9woW5_L_BK* zw}b)Nd}b;QWDZHthI8-7Vh7|ytYINHQ2B!UeEVZAMRnns=u6pFYY@5yCM8&%0VxBO z5-W`jjzdGSZ^hyUq(djeKwhZQh0D9!85;^iWW;HF!YOr|g>%pr4TSswU~#1C literal 2836 zcmchZO;5r=5QgW9iT`15hzW)Qt!Uy!!;N^6gadFW6(bQpVrwM+c=er~rQK}`Rld?R zEZd!(XWw@_-JkCsO=*GqofIYXN>6CN(2TzDdyl>u{=Lx$o?X&09nsZ4E*?Lm8${M| zDeCFjrf5aT^o)yhB{asUTRfEv{I8F8sQZ`E6GVkHrx=mkDxYIOcbG*vv-~xx;zX6v zE*bN)E3@vh_%7D;0M@ZqxSzTZ8%12rMb&JSg2J|%tWJV;_p$yuybGaOjMm(!?~Xph z*ahwr@{r9#+>ja|VRmKu0^RG8kN%q0v}#ti%F(J>3p=^oQwknW>C@T;+i==U!rDyv zJvz5YN7&mV?6YE~KA3p@o2r)2nz1yEY8{IuTtVS_vJH!!)n;jEnid5X4ZoFT?^UsC zyK$1WYht(Yo)a=5ZlzAP$X0K?lLLCh4o~1`tap8c)}~742{JCxw?!A0j%u&2GK-xx zWARLX+o6$K>(-oox+q!+p^yk+J9W`V9my)k;atoUWL!e)LqD4<*{hFCW9Q9iJX3cA zM<@32a4w2gQvZcR`25tx0Pm=+*1D>?n|hYdoe?#Sk{xPWOhr4NWB5yUI3=0doDDXuWBHuxNtRWDPZ+2AQqn+=^{d{Rr<_O!`N%9kLxdg nPvtBp+OIk#aGp^6Q}z|&k;P8(lZu|hb(s5$oL@Z)NAUd%K$~5!=$`z{TQLTy#5cs5N3yuf;|z{(A3@s)M4243EJ3crOL@ zbOvq?Wa=Ajp*HP>rI>ykp>m0+)uNC>4|?A0q!ud&=$<~I`~mXjbRxr0GOU)^mR*O( z+R$)L#@url%NW!|141lQP>CK%2oMAPfGp@*Skn)Pw^~TzaH)r^%?t8RlELaB7MHyx rv0cBWNL+!;RT-44Vl#*+ieTPTbzy={$<-dhcqC?CG4=N0h;GFl?V5F? literal 834 zcmb`FO-}+b5Qg8giT|NDg=CGahJ%S04L8C?ZVLy+B@$GKEP?pr)n}%{R)Z#fWU||K zI_>*(W?o;qDz)Z&Qc$ItrpzBT(KF*Mz6qaqP3hrzF_jQHxoYex$bnoveKSk#{B6`hts1|xH z&KEj{C2%IV@5FsMz6KFN2kd10BX6OUr3b}|ms;*hV*kQY>qeG*%XgZv45;4#wcR}b zm79;+HBV%0Cp=&0Cf51)IWdM>?>mM~F05CYZb2RI^^y0pRp!QPGtwP%t9^smi^Nw^ QKkJLw`}QikZ8O^Z4QF3@HUIzs diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-pass-noBlockComments.txt b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-pass-noBlockComments.txt index 24d436f6a1889a8166b69689e2c98ac05105d796..2bbe59a643dc8fdcfe0588574869cd501e39e9a7 100644 GIT binary patch literal 685 zcmbW#O;3X`7{KxS^C_O&wkEX}%r={N*|HniMQ*hR#4aOqWsxotKfUe4koc0Iav;2< zKmK`2W?TD$zCKu2z1b(M-0AEU-2Hff&XquhOc=e*6d1i$oTFf$Zily@F~8@hqG`CRSI>2MSl7p+b-uast)EIIQC}P6DAfY>+{_eCx`K)6p{;$* zDrd(n5`vXPbwSpH8=T9R$DGS*a^|RILJ*B%uzuN;s7?r28lzQB&NfBN4Sxo#n zE2XSuocj%B-G0joTRS$We(4t_)Bs})H?1wt-r{57%RNrz3|4gI!+)Wm+hm}z#xoND F@DBPM$oT*O literal 1428 zcmchXO-}+b5Qg8giT|NDWD~?)6pe`&2sgsTy#WVYF%mx@vPR>NSKpa#w_PMevxYS7 zcKR`W`tEeTK8Kj&o%IC@O#U#1+5icId_Re9N_8?Mb?jza%Y>KBCTyq zIX1$u@F!NE{T7Six@hNo#1%jH56FE-A5$ev%Ui6AGpfvv%H7qFP&CMS{!H5x*Q8m| zTC=pMz!E(?vdySZpWi1I(JANrFw#nehEN`N*=iZB%ZqPvZ7&$hi(F!}WtjKGtB+!D$=?yn)o<6$&Sn4r diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-pass-noLineComments.txt b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-pass-noLineComments.txt index c9b21fefcea175948a348a2a78496f1e88074a0d..ce562f3d7cc4a9b2c1353606070acd8fc3ab9b50 100644 GIT binary patch literal 618 zcma))!A`?442JK13g5Ox3Z+|t5s3@aZq+XImgZ235fv<*s3$6(9=BbXM5m3MqB!}! z-&Rs;=@YqrCtrQj3s!!&X9Eu>7uc1F6oS_1YsLaUDo}4LF+_jp53n z8cOT>)i}sHU-PR0+aKU+AYs9nJ?UN1G}_mxI1Yv8id&w>CPsVh#IP_6wDYB#8JtM2 z+@B1VdlgMwaBS$SBVKR>vPhCnH^1*Cxj%w3YGnjxlZK}QWr;Sq?J=Y29I5|{C*Xl5 y>ih4 z%_S=u%(x%*j-02A-X|_WP-=9<%qeSJBXReOmGUfAnw9GLKl4Vcf5+UZ)=n$7g{xiX zX3>8~88Qj+33}m>;)Y08vqqfpz=|CGsP4t%2pyC~p{|P7$5>6t|fR5~cY;tc4)bD&w)V03Ek^pue6vS3S~c_#cw{C$+ZyqD4;ZTX*RY+sp_ tOFV#A*I7A=vb-6^19`TZ(5^8w+l#)1F< literal 1296 zcmcJP!A`JVijWuY1&R_ zr~7|1yR#qfR~l;0{Vb^%-wb==nTKllc`nIm#H@WElYV75 z#aGWK5LZ!dh2EiEqLAV}peh-;OtC_47wC_?wo&CM6*|P4bMGlZFX7*=j$m>8<-D)u zeP{UgiEwK2j4RY!kXvn*tK+EI*ylbZ);I>f9-GlsBo$rT)3qWxBMh}%B}yT%OgF7j zrC3oU)XXZ^jySSkIJQxlSU;u;>uICa>TSC|$zm4;)j)IX_g1LUiB2P$^ZbAUl}Y(tTV$&V!c)9o*fbTET}V4<3s9eqjM}V2im`&cb~Wc=MP6x;;!)$dWrOIbEOKt8@*a8FgjJXKI)?<%-@{1gqx=< zw`(+dF<0XB-Bma1nd))2-zp>0Q|{tBrO^BWVkWQz>2h$eMKK78A8_luBe(a-HI>wr zN`f957=Tn0(6^?ipmUb%mW@){HuI!0>K2g{tCAdT(#20Qn7)JmA literal 1854 zcmcJQK~KU!5QX2_#Q(4d6Tn1cX@WrF#mJ3tv55yHrhsUpR%20#KVE$^+p=3kf&tPL zc4wzM-@M(O{r>9W7BjxDFqq;Q4{WDM@X7x%Z3%lXc;i?b``E+TKOXV#dTZ`5{8B)$8q)$o}Yj2Dj3~7ro;+V|QLzlBi>|(|PROwS= z|Mz%@IZx<6&@ZC70$DysIbWNR^D?FE3@N6}B%<|*s>RGTW6S1#LB5HSC-h1fDMcN} zY|r>s5inxFulqP5jp27jZB4bE(pIB~L507*hLxOM)GOA{P}O_J5WO-b5p_1_b1aUp zrF>0~PZ+J9Wu}M>lI!LiE~euMsGF$Q@<`%8NOq%+PvCReRh3bv+Ok zr+P`L_0HGwb?tFoKX~e-R%~OJl?g3*eSSJZ=H+y}=Gnhy+~s83*>Q`p9Z^GfT!@B8 z3q7s;bGce8TM0Kin~RZG^A!3>RkgQ-)WsBcRMpnZgf(=C$9z}W y8%oajdb@SNc@On5=;$ps(wj{7=um6*h*i>P?XA)G+_OpLlv-tP61S$pTD(7vcpUox diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-pass-varDefinition3.txt b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-pass-varDefinition3.txt index a59b0d0c501b410858e39deef90fd5d88454d0bd..fea3cd099586fdf162636cc7ce1aac42652444a8 100644 GIT binary patch literal 664 zcmbW#u};G<5C-7gPjT{67=q$3&{|@nTht|yIvgIH#s!PYiE0B8PtVnEYY8Dm;Kf#? z`~2t5wVBKj!tiFC{W3jRH@*kS9)Dd78xubCQA!_oh1*7g!dB{hzKQ%k0B zJ?y1o?db}Cl^MnlkU-D@+NKz__XYV+W^bJhc5wH1VG1`w3cyl90YWYTAJnac#W}-5 zU8wD=4aSdpXJ)yGL~aGRj2vXBHB*=+Vqqji3Al=e&c+|Yr20hBe~R*7c|>2Z6+!-Ut_)cmNI+L>mnnTb20m>NmTEZ4pfjlBUb- zbe8${-<|pV=<7xc-e*NB^r(C6xiY=;JH?kVd(sQvdfHP%XMcDseyB_SsnDxZa`bre z%6!cCDRL^ni5sVk7C%s*6_&?l7x2%RkDVu3?Itf{>g=8_L`5~y z2#x}(1n(gVq;Th0ejn%TVdk{Sh|0(`*NKj>7rgt5$r!VGsAFg%)g^%&=-pm&Ex<8 diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-pass-varDefinition4.txt b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/Baselines/BL-pass-varDefinition4.txt index c6d63cdf369236a2028d502f6f664b1c0cbcca56..a636e0df85b8bcde5998c7321bc1ac54d74718bb 100644 GIT binary patch literal 2275 zcmbuBO>dh(5QgvjD@I(BAh|Itj>$^BG|kP*#g=j)9I&%)P#ti?x_0~P`|ge@s9$`P z3&`+3JM+%$tQY#E-^i4ob&-G9&y*MYgHhuBA1{$CwfUO8DOI_9nmjHQrO8TV&7~l}CiV{zip9(k?HwBLBKp^a|G# zSmD0hs#L7357p1~MdE%S#!zNxwVdp;s+z!rk9wOIxyj2SdS_1NGEe~})08F@sF;#@ zdZp;%Y}7?sqaI&!qpN+k(VaL4akyJbVuzy!w9+TjiEu)P2&RfPhWkO2&XSCYLNw&{RjDPv~9@F=j8tZB}Ef#j5QgU*ssF*^k|t8x+J+V*_0lxAD3>DjkZ=G3tyKzbAtmjPZ~M*;%gkB^ zDYXr<4D0pBJUjEwc-MdbT+@UevHzfmRL>ccf(y1F| zj;nH5np2xzp#6ybImNITp*EExhTqtGnIReOAZf-smcVjJRQasNuz4TF z8#Ret%ab}k#grHx&g}B2-5_df)FiHxb!aFiYhSpMt@dN&gnH=?74;5w%gJnQtfr}= zeWen`C-9|G9Vh>o(b6cRWJ40fvsryHi?ymOJ_iy+Sv|HZ59`#H#87I0SQn~vtF44O zhUrk+D%w{niDnwa?Ks+EMoXiN66G|AX0zI27Hd^mytdMyM(om7{WV@9DGCz?%O+Jm z4K&ugr+k$cyOyWps(c!}54p-8rqYYAEQ7GMx7pYZYU=)Myu{4rD>k0FSDil;36zV8 zcm~l8$m*WimcPsDtb{zma4a&$&er$cAfNa9zP`6?(Y{hi?a6`}(s3#wGg=yDl$w+U z+GsYvnZ;UF7GDXo;N5Y!N+^-^^KG6-S~kg|EYMiOyN?BhsmweISnl(7U9lTq?e~ARCC3c_ diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/TestScripts/TS-input.txt b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/TestScripts/TS-input.txt index 3f2bacc7..1254f3b0 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/TestScripts/TS-input.txt +++ b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestData/BatchParser/TestScripts/TS-input.txt @@ -1,4 +1,4 @@ -GO 2 +GO 2 BEGIN :r input-2.txt :r "input-2.txt" diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestServiceProvider.cs b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestServiceProvider.cs index a9f1e4f7..607b5f3f 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestServiceProvider.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestServiceProvider.cs @@ -135,7 +135,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Test.Common } TestServiceProvider.hasInitServices = true; - const string hostName = "SQ Tools Test Service Host"; + const string hostName = "SQL Tools Test Service Host"; const string hostProfileId = "SQLToolsTestService"; Version hostVersion = new Version(1, 0);