Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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]}");
            }
        }
Пример #4
0
        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));
        }