public static void RunRulesTest(string rule, string testFileName, Type ruleType, List <RuleViolation> expectedRuleViolations) { // arrange var path = Path.GetFullPath(Path.Combine(TestContext.CurrentContext.TestDirectory, $@"UnitTests/LintingRules/{rule}/test-files/{testFileName}.sql")); var fileStream = File.OpenRead(path); var ruleViolations = new List <RuleViolation>(); void ErrorCallback(string ruleName, string ruleText, int startLine, int startColumn) { ruleViolations.Add(new RuleViolation(ruleName, startLine, startColumn)); } var visitor = GetVisitor(ruleType, ErrorCallback); var compareer = new RuleViolationComparer(); var fragmentBuilder = new FragmentBuilder(120); var textReader = new StreamReader(fileStream); var sqlFragment = fragmentBuilder.GetFragment(textReader, out _); // act sqlFragment.Accept(visitor); ruleViolations = ruleViolations.OrderBy(o => o.Line).ToList(); expectedRuleViolations = expectedRuleViolations.OrderBy(o => o.Line).ToList(); // assert CollectionAssert.AreEqual(expectedRuleViolations, ruleViolations, compareer); Assert.AreEqual(expectedRuleViolations.Count, ruleViolations.Count); }
public void Test(string description, string sql, int expectedOverrideCount) { var fragmentBuilder = new FragmentBuilder(Constants.DefaultCompatabilityLevel); var overrideFider = new OverrideFinder(); var sqlStream = ParsingUtility.GenerateStreamFromString(sql); var overrides = overrideFider.GetOverrideList(sqlStream); var fragment = fragmentBuilder.GetFragment(new StreamReader(sqlStream), out var errors, overrides); Assert.AreEqual(expectedOverrideCount, overrides.Count()); Assert.IsEmpty(errors); Assert.IsNotNull(fragment); }
public void ShouldIgnore(string description, string testString) { var stream = ParsingUtility.GenerateStreamFromString(testString); void DynamicCallback(string dynamicSQL, int dynamicStartLine, int dynamicStartColumn) { Assert.Fail("should not perform callback"); } var visitor = new DynamicSQLParser(DynamicCallback); var fragmentBuilder = new FragmentBuilder(); var textReader = new StreamReader(stream); var sqlFragment = fragmentBuilder.GetFragment(textReader, out var errors); sqlFragment.Accept(visitor); CollectionAssert.IsEmpty(errors, "parsing errors were generated"); }
public void ShouldParse(string description, string executeStatement, string innerSql, bool expectCallback = true) { var stream = ParsingUtility.GenerateStreamFromString(executeStatement); var receivedCallback = false; void DynamicCallback(string dynamicSQL, int dynamicStartLine, int dynamicStartColumn) { Assert.AreEqual(innerSql, dynamicSQL); receivedCallback = true; } var visitor = new DynamicSQLParser(DynamicCallback); var fragmentBuilder = new FragmentBuilder(); var textReader = new StreamReader(stream); var sqlFragment = fragmentBuilder.GetFragment(textReader, out var errors); CollectionAssert.IsEmpty(errors, "parsing errors were generated"); sqlFragment.Accept(visitor); Assert.AreEqual(receivedCallback, expectCallback); }