public PatternRoot Deserialize(CodeFile data) { if (string.IsNullOrEmpty(data.Code)) { throw new ParsingException(data, message: "Pattern value can not be empty."); } var parser = new DslAntlrParser() { Logger = Logger }; var converter = new DslUstConverter { Logger = Logger, PatternExpressionInsideStatement = PatternExpressionInsideStatement, Data = data }; DslParser.PatternContext patternContext = parser.Parse(data.Code); PatternRoot patternNode = converter.Convert(patternContext); patternNode.CodeFile = data; var preprocessor = new PatternNormalizer() { Logger = Logger }; patternNode = preprocessor.Normalize(patternNode); return(patternNode); }
public void Process_Dsl_EqualsToHardcoded(string fileName) { string data = File.ReadAllText(Path.Combine(TestUtility.TestsDataPath, fileName)); var logger = new TestLogger(); var processor = new DslProcessor { Logger = logger, PatternExpressionInsideStatement = false }; PatternRoot result = processor.Deserialize(new TextFile(data) { PatternKey = fileName }); if (fileName == "DebugInfo.pattern") { new HashSet <Language> { Language.Php }; } Assert.AreEqual(0, logger.ErrorCount, logger.ErrorsString); string patternName = Path.GetFileNameWithoutExtension(fileName); PatternRoot defaultPattern = patterns.FirstOrDefault(p => p.DebugInfo.StartsWith(patternName)); if (defaultPattern == null) { Assert.Inconclusive($"Pattern {patternName} does not exists in DefaultPatternRepository"); } var patternNormalizer = new PatternNormalizer(); defaultPattern = patternNormalizer.Normalize(defaultPattern); Assert.AreEqual(defaultPattern.Node, result.Node); }
public void Sort_PatternVars_CorrectOrder() { var unsorted = new PatternOr ( new PatternStringLiteral("42"), new PatternIntLiteral(100), new PatternIntLiteral(42), new PatternIntLiteral(0), new PatternStringLiteral("42"), new PatternNot(new PatternStringLiteral("42")), new PatternStringLiteral("Hello World!"), new PatternIdToken("testId"), new PatternIdToken("42"), new PatternNot(new PatternStringLiteral("42")) ); var expectedSorted = new PatternOr ( new PatternIdToken("42"), new PatternIdToken("testId"), new PatternIntLiteral(0), new PatternIntLiteral(42), new PatternIntLiteral(100), new PatternNot(new PatternStringLiteral("42")), new PatternNot(new PatternStringLiteral("42")), new PatternStringLiteral("42"), new PatternStringLiteral("42"), new PatternStringLiteral("Hello World!") ); var logger = new TestLogger(); var processor = new DslProcessor(); var normalizer = new PatternNormalizer() { Logger = logger }; var actualPattern = (PatternOr)normalizer.Visit(unsorted); List <PatternUst> actualAlternatives = actualPattern.Patterns; List <PatternUst> expectedAlternatives = expectedSorted.Patterns; Assert.AreEqual(expectedAlternatives.Count, actualAlternatives.Count); for (int i = 0; i < expectedAlternatives.Count; i++) { Assert.IsTrue(expectedAlternatives[i].Equals(actualAlternatives[i]), $"Not equal at {i} index: expected {expectedAlternatives[i]} not equals to {actualAlternatives[i]}"); } }
public void Simplify_MultiMultiPattern_RemovedDuplicates() { var input = new PatternStatements { Statements = new List <PatternUst>() { new PatternInvocationExpression { Target = new PatternIdToken("test_call"), Arguments = new PatternArgs ( new PatternIdToken("a"), new PatternIdToken("b"), new PatternMultipleExpressions(), new PatternMultipleExpressions(), new PatternIdToken("z") ) }, new PatternVarOrFieldDeclaration { Type = new PatternIdToken("int"), Assignment = new PatternAssignmentExpression { Left = new PatternIdToken("a"), Right = new PatternIntLiteral(42) } } } }; var logger = new LoggerMessageCounter(); var processor = new DslProcessor(); var normalizer = new PatternNormalizer() { Logger = logger }; PatternUst result = normalizer.Visit(input); var statements = ((PatternStatements)result).Statements; var invocation = (PatternInvocationExpression)statements.ElementAt(0); Assert.AreEqual(1, ((PatternArgs)invocation.Arguments).Args.Count(child => child is PatternMultipleExpressions)); }