Example #1
0
        public void Match_PatternExpressionsInCalls(string patternData, params int[] matchMethodNumbers)
        {
            var     processor   = new DslProcessor();
            var     patternNode = (PatternNode)processor.Deserialize(patternData, LanguageExt.AllPatternLanguages);
            Pattern pattern     = new Pattern
            {
                Data      = patternNode,
                DebugInfo = patternData
            };

            patternsRep.Add(patternsConverter.ConvertBack(new List <Pattern>()
            {
                pattern
            }));
            WorkflowResult workflowResult = workflow.Process();

            MatchingResultDto[] matchingResults = workflowResult.MatchingResults.ToDto(workflow.SourceCodeRepository);
            patternsRep.Clear();

            Assert.AreEqual(matchMethodNumbers.Contains(0) ? 1 : 0, matchingResults.Count(r => r.MatchedCode.StartsWith("test_call_0")));
            Assert.AreEqual(matchMethodNumbers.Contains(1) ? 1 : 0, matchingResults.Count(r => r.MatchedCode.StartsWith("test_call_1")));
            Assert.AreEqual(matchMethodNumbers.Contains(2) ? 1 : 0, matchingResults.Count(r => r.MatchedCode.StartsWith("test_call_2")));
            Assert.AreEqual(matchMethodNumbers.Contains(3) ? 1 : 0, matchingResults.Count(r => r.MatchedCode.StartsWith("test_call_3")));
            Assert.AreEqual(matchMethodNumbers.Contains(4) ? 1 : 0, matchingResults.Count(r => r.MatchedCode.StartsWith("test_call_4")));
        }
Example #2
0
        public static MatchingResultDto[] GetMatchings(string code, string pattern, LanguageFlags analyzedLanguages,
                                                       LanguageFlags?patternLanguages = null)
        {
            var sourceCodeRep = new MemoryCodeRepository(code);
            var patternsRep   = new MemoryPatternsRepository();
            var workflow      = new Workflow(sourceCodeRep, analyzedLanguages, patternsRep)
            {
                Logger = new LoggerMessageCounter()
            };

            var processor   = new DslProcessor();
            var patternNode = (PatternNode)processor.Deserialize(pattern, patternLanguages ?? LanguageExt.AllPatternLanguages);
            var p           = new Pattern
            {
                Data      = patternNode,
                DebugInfo = pattern
            };
            var patternsConverter = new PatternConverter(
                new JsonUstNodeSerializer(typeof(UstNode), typeof(PatternVarDef)));

            patternsRep.Add(patternsConverter.ConvertBack(new List <Pattern>()
            {
                p
            }));
            WorkflowResult workflowResult = workflow.Process();

            MatchingResultDto[] matchingResults = workflowResult.MatchingResults.ToDto(workflow.SourceCodeRepository)
                                                  .OrderBy(r => r.PatternKey)
                                                  .ToArray();

            return(matchingResults);
        }
Example #3
0
        public static MatchResultDto[] GetMatches(TextFile source, string pattern,
                                                  IEnumerable <Language> analyzedLanguages,
                                                  IEnumerable <Language> patternLanguages = null)
        {
            var sourceRep = new MemorySourceRepository(source.Data, source.FullName)
            {
                Languages = new HashSet <Language>(analyzedLanguages)
            };
            var patternsRep = new MemoryPatternsRepository();
            var logger      = new TestLogger();
            var workflow    = new Workflow(sourceRep, patternsRep)
            {
                Logger = logger
            };

            var         processor   = new DslProcessor();
            PatternRoot patternNode = processor.Deserialize(new TextFile(pattern)
            {
                PatternKey = pattern
            });

            patternNode.Languages = new HashSet <Language>(patternLanguages ?? LanguageUtils.PatternLanguages);
            patternNode.DebugInfo = pattern;
            var patternsConverter = new PatternConverter();

            patternsRep.Add(patternsConverter.ConvertBack(new List <PatternRoot> {
                patternNode
            }));
            workflow.Process();
            MatchResultDto[] matchResults = logger.Matches.ToDto()
                                            .OrderBy(r => r.PatternKey)
                                            .ToArray();

            return(matchResults);
        }
Example #4
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);
        }
Example #5
0
        public void Match_Reduce_CorrectMatchingPosition()
        {
            var         processor   = new DslProcessor();
            string      pattern     = "<[ \"\\d+\" ]>";
            PatternRoot patternNode = processor.Deserialize(new TextFile(pattern)
            {
                PatternKey = pattern
            });

            patternsRepository.Add(patternsConverter.ConvertBack(new List <PatternRoot> {
                patternNode
            }));
            var logger   = new TestLogger();
            var workflow = new Workflow(sourceRep, patternsRepository)
            {
                Logger = logger
            };

            workflow.Process();
            List <MatchResultDto> matchResults = logger.Matches.ToDto().ToList();

            patternsRepository.Clear();

            Assert.AreEqual(2, matchResults.Count);

            LineColumnTextSpan textSpan = matchResults[1].LineColumnTextSpan;

            Assert.AreEqual(15, textSpan.BeginLine);
            Assert.AreEqual(12, textSpan.BeginColumn);
            Assert.AreEqual(17, textSpan.EndLine);
            Assert.AreEqual(7, textSpan.EndColumn);
        }
Example #6
0
        public void Match_PatternVarWithRegex(string patternData)
        {
            var         processor   = new DslProcessor();
            PatternRoot patternNode = processor.Deserialize(new TextFile(patternData)
            {
                PatternKey = patternData
            });

            patternNode.DebugInfo = patternData;
            patternsRepository.Add(patternsConverter.ConvertBack(new List <PatternRoot>()
            {
                patternNode
            }));
            var logger   = new TestLogger();
            var workflow = new Workflow(sourceRep, patternsRepository)
            {
                Logger = logger
            };

            workflow.Process();
            IEnumerable <MatchResultDto> matchResults = logger.Matches.ToDto();

            patternsRepository.Clear();

            int expectedMatchingCount = patternData.Contains("password") ? 1 : 0;

            Assert.AreEqual(expectedMatchingCount, matchResults.Count());
        }
Example #7
0
        //[TestCase("#(#*, <[~e]>, #*)", new[] { 0, 1, 3 })]
        public void Match_PatternExpressionsInCalls(string patternData, params int[] matchMethodNumbers)
        {
            var         processor   = new DslProcessor();
            PatternRoot patternNode = processor.Deserialize(new TextFile(patternData)
            {
                PatternKey = patternData
            });

            patternNode.DebugInfo = patternData;
            patternsRepository.Add(patternsConverter.ConvertBack(new List <PatternRoot> {
                patternNode
            }));
            var logger   = new TestLogger();
            var workflow = new Workflow(sourceRep, patternsRepository)
            {
                Logger = logger
            };

            workflow.Process();
            IEnumerable <MatchResultDto> matchResults = logger.Matches.ToDto();

            patternsRepository.Clear();

            Assert.AreEqual(matchMethodNumbers.Contains(0) ? 1 : 0, matchResults.Count(r => r.MatchedCode.StartsWith("test_call_0")));
            Assert.AreEqual(matchMethodNumbers.Contains(1) ? 1 : 0, matchResults.Count(r => r.MatchedCode.StartsWith("test_call_1")));
            Assert.AreEqual(matchMethodNumbers.Contains(2) ? 1 : 0, matchResults.Count(r => r.MatchedCode.StartsWith("test_call_2")));
            Assert.AreEqual(matchMethodNumbers.Contains(3) ? 1 : 0, matchResults.Count(r => r.MatchedCode.StartsWith("test_call_3")));
            Assert.AreEqual(matchMethodNumbers.Contains(4) ? 1 : 0, matchResults.Count(r => r.MatchedCode.StartsWith("test_call_4")));
        }
Example #8
0
 public void ProcessDsl_PatternVarAlreadyDefined_HandleErrors(string data)
 {
     Assert.Throws(typeof(ConversionException), () =>
     {
         var processor  = new DslProcessor();
         UstNode result = processor.Deserialize(data, LanguageExt.AllPatternLanguages);
     });
 }
Example #9
0
        public void Preprocess_MultiMultiPattern_RemovedDuplicates()
        {
            UstNode patternWithDuplicateMultiStatementsExpressions = new PatternStatements
            {
                Statements = new List <Statement>()
                {
                    new ExpressionStatement(
                        new InvocationExpression
                    {
                        Target    = new IdToken("test_call"),
                        Arguments = new PatternExpressions
                        {
                            Collection = new List <Expression>
                            {
                                new IdToken("a"),
                                new IdToken("b"),
                                new PatternMultipleExpressions(),
                                new PatternMultipleExpressions(),
                                new IdToken("z")
                            }
                        }
                    }),

                    new PatternMultipleStatements(),
                    new PatternMultipleStatements(),

                    new ExpressionStatement(
                        new VariableDeclarationExpression
                    {
                        Type      = new TypeToken("int"),
                        Variables = new List <AssignmentExpression>()
                        {
                            new AssignmentExpression
                            {
                                Left  = new IdToken("a"),
                                Right = new IntLiteral {
                                    Value = 42
                                }
                            }
                        }
                    }
                        )
                }
            };
            var             logger       = new LoggerMessageCounter();
            var             processor    = new DslProcessor();
            UstPreprocessor preprocessor = new UstPreprocessor()
            {
                Logger = logger
            };
            UstNode result = preprocessor.Preprocess(patternWithDuplicateMultiStatementsExpressions);

            Assert.AreEqual(1, result.GetAllDescendants().Count(child => child.NodeType == NodeType.PatternMultipleStatements));
            Assert.AreEqual(1, result.GetAllDescendants().Count(child => child.NodeType == NodeType.PatternMultipleExpressions));
        }
Example #10
0
        public void JsonSerialize_PatternWithVar_JsonEqualsToDsl()
        {
            var pwdVar = new PatternVarDef {
                Id = "pwd", Values = new List <Expression>()
                {
                    new PatternIdToken("password")
                }
            };
            var patternNode = new PatternNode
            {
                Vars = new List <PatternVarDef>()
                {
                    pwdVar
                },
                Node = new PatternStatements(
                    new ExpressionStatement
                {
                    Expression = new AssignmentExpression
                    {
                        Left  = new PatternVarRef(pwdVar),
                        Right = new PatternExpression()
                    }
                },
                    new PatternMultipleStatements(),
                    new ExpressionStatement
                {
                    Expression = new InvocationExpression
                    {
                        Target    = new PatternExpression(),
                        Arguments = new PatternExpressions(
                            new PatternMultipleExpressions(),
                            new PatternVarRef(pwdVar),
                            new PatternMultipleExpressions())
                    }
                }
                    )
            };

            var jsonSerializer = new JsonUstNodeSerializer(typeof(UstNode), typeof(PatternVarDef));

            jsonSerializer.Indented         = true;
            jsonSerializer.IncludeTextSpans = false;

            string  json         = jsonSerializer.Serialize(patternNode);
            UstNode nodeFromJson = jsonSerializer.Deserialize(json, LanguageExt.AllPatternLanguages);

            var dslSeializer = new DslProcessor()
            {
                PatternExpressionInsideStatement = false
            };
            var nodeFromDsl = dslSeializer.Deserialize("<[@pwd:password]> = #; ... #(#*, <[@pwd]>, #*);", LanguageExt.AllPatternLanguages);

            Assert.IsTrue(nodeFromJson.Equals(patternNode));
            Assert.IsTrue(nodeFromJson.Equals(nodeFromDsl));
        }
Example #11
0
 public void ProcessDsl_PatternVarAlreadyDefined_HandleErrors(string data)
 {
     Assert.Throws(typeof(ConversionException), () =>
     {
         var processor      = new DslProcessor();
         PatternRoot result = processor.Deserialize(new CodeFile(data)
         {
             IsPattern = true
         });
     });
 }
Example #12
0
        public void JsonSerialize_PatternWithVar_JsonEqualsToDsl()
        {
            var patternRoot = new PatternRoot
            {
                Node = new PatternStatements
                {
                    Statements = new List <PatternUst>
                    {
                        new PatternAssignmentExpression
                        {
                            Left = new PatternVar("pwd")
                            {
                                Value = new PatternIdRegexToken("password")
                            },
                            Right = new PatternAny()
                        },

                        new PatternInvocationExpression
                        {
                            Target    = new PatternAny(),
                            Arguments = new PatternArgs(
                                new PatternMultipleExpressions(),
                                new PatternVar("pwd"),
                                new PatternMultipleExpressions())
                        }
                    }
                }
            };

            var jsonSerializer = new JsonPatternSerializer
            {
                Indented         = true,
                IncludeTextSpans = false
            };

            string      json         = jsonSerializer.Serialize(patternRoot);
            PatternRoot nodeFromJson = jsonSerializer.Deserialize(new TextFile(json)
            {
                PatternKey = "PatternWithVar"
            });

            var dslSeializer = new DslProcessor()
            {
                PatternExpressionInsideStatement = false
            };
            var nodeFromDsl = dslSeializer.Deserialize(
                new TextFile("<[@pwd:password]> = #; ... #(#*, <[@pwd]>, #*);")
            {
                PatternKey = "PatternWithVar2"
            });

            Assert.IsTrue(nodeFromJson.Node.Equals(patternRoot.Node));
            Assert.IsTrue(nodeFromJson.Node.Equals(nodeFromDsl.Node));
        }
Example #13
0
        public void Parse_Dsl_WithoutErrors(string fileName)
        {
            var data      = File.ReadAllText(Path.Combine(TestHelper.TestsDataPath, fileName));
            var logger    = new LoggerMessageCounter();
            var processor = new DslProcessor()
            {
                Logger = logger
            };
            UstNode result = processor.Deserialize(data, LanguageExt.AllPatternLanguages);

            Assert.AreEqual(0, logger.ErrorCount);
        }
Example #14
0
        public void ProcessDsl_SampleWithSyntaxError_HandleErrors()
        {
            var logger    = new LoggerMessageCounter();
            var data      = "(?i)password(?-i)]> = <[\"\\w*\" || null]>";
            var processor = new DslProcessor()
            {
                Logger = logger
            };
            UstNode result = processor.Deserialize(data, LanguageExt.AllPatternLanguages);

            Assert.AreEqual(5, logger.ErrorCount);
        }
Example #15
0
        public void Parse_Dsl_WithoutErrors(string fileName)
        {
            string data      = File.ReadAllText(Path.Combine(TestUtility.TestsDataPath, fileName));
            var    logger    = new TestLogger();
            var    processor = new DslProcessor {
                Logger = logger
            };
            PatternRoot result = processor.Deserialize(new TextFile(data)
            {
                PatternKey = fileName
            });

            Assert.AreEqual(0, logger.ErrorCount, logger.ErrorsString);
        }
Example #16
0
        public void ProcessDsl_SampleWithSyntaxError_HandleErrors()
        {
            var logger    = new TestLogger();
            var data      = "(?i)password(?-i)]> = <[\"\\w*\" || null]>";
            var processor = new DslProcessor()
            {
                Logger = logger
            };
            PatternRoot result = processor.Deserialize(new TextFile(data)
            {
                PatternKey = "ErrorneousPattern"
            });

            Assert.AreEqual(5, logger.ErrorCount);
        }
Example #17
0
        public void ProcessDsl_SampleWithSyntaxError_HandleErrors()
        {
            var logger    = new LoggerMessageCounter();
            var data      = "(?i)password(?-i)]> = <[\"\\w*\" || null]>";
            var processor = new DslProcessor()
            {
                Logger = logger
            };
            PatternRoot result = processor.Deserialize(new CodeFile(data)
            {
                IsPattern = true
            });

            Assert.AreEqual(5, logger.ErrorCount);
        }
Example #18
0
        public Workflow(ISourceCodeRepository sourceCodeRepository, LanguageFlags languages,
                        IPatternsRepository patternsRepository = null, Stage stage = Stage.Match)
            : base(stage)
        {
            SourceCodeRepository = sourceCodeRepository;
            PatternsRepository   = patternsRepository ?? new DefaultPatternRepository();
            ParserConverterSets  = ParserConverterBuilder.GetParserConverterSets(languages);
            UstPatternMatcher    = new BruteForcePatternMatcher();
            IUstNodeSerializer jsonNodeSerializer = new JsonUstNodeSerializer(typeof(UstNode), typeof(PatternVarDef));
            IUstNodeSerializer dslNodeSerializer  = new DslProcessor();

            PatternConverter = new PatternConverter(new IUstNodeSerializer[] { jsonNodeSerializer, dslNodeSerializer });
            Stage            = stage;
            ThreadCount      = 1;
        }
Example #19
0
        public Workflow(SourceRepository sourceRepository      = null,
                        IPatternsRepository patternsRepository = null, Stage stage = Stage.Match)
            : base(stage)
        {
            LogsDir            = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "PT.PM");
            DumpDir            = LogsDir;
            TempDir            = Path.Combine(Path.GetTempPath(), "PT.PM");
            SourceRepository   = sourceRepository;
            PatternsRepository = patternsRepository ?? new DefaultPatternRepository();
            IPatternSerializer jsonNodeSerializer = new JsonPatternSerializer();
            IPatternSerializer dslNodeSerializer  = new DslProcessor();

            PatternConverter = new PatternConverter(jsonNodeSerializer, dslNodeSerializer);
            Stage            = stage;
        }
Example #20
0
 public ArkeCall(ISipApiClient sipApiClient, ISipLineApi sipLineApi, ISipBridgingApi sipBridgeApi,
                 ISipPromptApi sipPromptApi, IRecordingManager recordingmanager)
 {
     _sipApiClient = sipApiClient;
     _sipLineApi   = sipLineApi;
     _sipBridgeApi = sipBridgeApi;
     _logFields    = new Dictionary <string, string>();
     _promptPlayer = new ArkePromptPlayer(this, sipPromptApi);
     _asteriskPhoneInputHandler = new AsteriskPhoneInputHandler(this, _promptPlayer);
     _asteriskRecordingManager  = recordingmanager;
     _dslProcessor      = new DslProcessor(this);
     _arkeBridgeFactory = new ArkeBridgeFactory(_sipBridgeApi);
     _callStateMachine  = new CallStateMachine(this, _promptPlayer);
     _callStateMachine.SetupFiniteStateMachine();
     LanguageSelectionPromptPlayer = new AsteriskLanguageSelectionPromptPlayer(this, sipPromptApi, sipApiClient);
 }
Example #21
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]}");
            }
        }
Example #22
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));
        }
Example #23
0
        public void Process_Dsl_EqualsToHardcoded(string fileName)
        {
            var data      = File.ReadAllText(Path.Combine(TestHelper.TestsDataPath, fileName));
            var logger    = new LoggerMessageCounter();
            var processor = new DslProcessor()
            {
                Logger = logger, PatternExpressionInsideStatement = false
            };
            UstNode result = processor.Deserialize(data, fileName == @"DebugInfo.aipm" ? LanguageFlags.Php : LanguageExt.AllPatternLanguages);

            Assert.AreEqual(0, logger.ErrorCount);

            string  patternName    = Path.GetFileNameWithoutExtension(fileName);
            Pattern defaultPattern = patterns.FirstOrDefault(p => p.DebugInfo.StartsWith(patternName));

            if (defaultPattern == null)
            {
                Assert.Inconclusive($"Pattern {patternName} does not exists in DefaultPatternRepository");
            }

            Assert.IsTrue(result.Equals(defaultPattern.Data));
        }
Example #24
0
        public void Match_PatternVarWithRegex(string patternData)
        {
            var         processor   = new DslProcessor();
            PatternRoot patternNode = processor.Deserialize(new CodeFile(patternData)
            {
                IsPattern = true
            });

            patternNode.DebugInfo = patternData;
            patternsRepository.Add(patternsConverter.ConvertBack(new List <PatternRoot>()
            {
                patternNode
            }));
            WorkflowResult workflowResult             = workflow.Process();
            IEnumerable <MatchResultDto> matchResults = workflowResult.MatchResults.ToDto();

            patternsRepository.Clear();

            int expectedMatchingCount = patternData.Contains("password") ? 1 : 0;

            Assert.AreEqual(expectedMatchingCount, matchResults.Count());
        }
Example #25
0
        public void Match_PatternVarWithRegex(string patternData)
        {
            var     processor   = new DslProcessor();
            var     patternNode = (PatternNode)processor.Deserialize(patternData, LanguageExt.AllPatternLanguages);
            Pattern pattern     = new Pattern
            {
                Data      = patternNode,
                DebugInfo = patternData
            };

            patternsRep.Add(patternsConverter.ConvertBack(new List <Pattern>()
            {
                pattern
            }));
            WorkflowResult workflowResult = workflow.Process();

            MatchingResultDto[] matchingResults = workflowResult.MatchingResults.ToDto(workflow.SourceCodeRepository);
            patternsRep.Clear();

            int expectedMatchingCount = patternData.Contains("password") ? 1 : 0;

            Assert.AreEqual(expectedMatchingCount, matchingResults.Count());
        }
Example #26
0
        public void Match_Reduce_CorrectMatchingPosition()
        {
            var         processor   = new DslProcessor();
            PatternRoot patternNode = processor.Deserialize(new CodeFile("<[ \"\\d+\" ]>")
            {
                IsPattern = true
            });

            patternsRepository.Add(patternsConverter.ConvertBack(new List <PatternRoot>()
            {
                patternNode
            }));
            WorkflowResult        workflowResult = workflow.Process();
            List <MatchResultDto> matchResults   = workflowResult.MatchResults.ToDto().ToList();

            patternsRepository.Clear();

            LineColumnTextSpan textSpan = matchResults[1].LineColumnTextSpan;

            Assert.AreEqual(14, textSpan.BeginLine);
            Assert.AreEqual(12, textSpan.BeginColumn);
            Assert.AreEqual(16, textSpan.EndLine);
            Assert.AreEqual(7, textSpan.EndColumn);
        }
Example #27
0
        //[TestCase("#(#*, <[~e]>, #*)", new[] { 0, 1, 3 })]
        public void Match_PatternExpressionsInCalls(string patternData, params int[] matchMethodNumbers)
        {
            var         processor   = new DslProcessor();
            PatternRoot patternNode = processor.Deserialize(new CodeFile(patternData)
            {
                IsPattern = true
            });

            patternNode.DebugInfo = patternData;
            patternsRepository.Add(patternsConverter.ConvertBack(new List <PatternRoot>()
            {
                patternNode
            }));
            WorkflowResult workflowResult             = workflow.Process();
            IEnumerable <MatchResultDto> matchResults = workflowResult.MatchResults.ToDto();

            patternsRepository.Clear();

            Assert.AreEqual(matchMethodNumbers.Contains(0) ? 1 : 0, matchResults.Count(r => r.MatchedCode.StartsWith("test_call_0")));
            Assert.AreEqual(matchMethodNumbers.Contains(1) ? 1 : 0, matchResults.Count(r => r.MatchedCode.StartsWith("test_call_1")));
            Assert.AreEqual(matchMethodNumbers.Contains(2) ? 1 : 0, matchResults.Count(r => r.MatchedCode.StartsWith("test_call_2")));
            Assert.AreEqual(matchMethodNumbers.Contains(3) ? 1 : 0, matchResults.Count(r => r.MatchedCode.StartsWith("test_call_3")));
            Assert.AreEqual(matchMethodNumbers.Contains(4) ? 1 : 0, matchResults.Count(r => r.MatchedCode.StartsWith("test_call_4")));
        }
Example #28
0
        public static MatchResultDto[] GetMatches(string code, string pattern,
                                                  IEnumerable <Language> analyzedLanguages,
                                                  IEnumerable <Language> patternLanguages = null)
        {
            var sourceCodeRep = new MemoryCodeRepository(code)
            {
                Languages = new HashSet <Language>(analyzedLanguages)
            };
            var patternsRep = new MemoryPatternsRepository();
            var workflow    = new Workflow(sourceCodeRep, patternsRep)
            {
                Logger = new LoggerMessageCounter()
            };

            var         processor   = new DslProcessor();
            PatternRoot patternNode = processor.Deserialize(new CodeFile(pattern)
            {
                IsPattern = true
            });

            patternNode.Languages = new HashSet <Language>(patternLanguages ?? LanguageUtils.PatternLanguages.Values);
            patternNode.DebugInfo = pattern;
            var patternsConverter = new PatternConverter();

            patternsRep.Add(patternsConverter.ConvertBack(new List <PatternRoot>()
            {
                patternNode
            }));
            WorkflowResult workflowResult = workflow.Process();

            MatchResultDto[] matchResults = workflowResult.MatchResults.ToDto()
                                            .OrderBy(r => r.PatternKey)
                                            .ToArray();

            return(matchResults);
        }
Example #29
0
        public void Sort_PatternVars()
        {
            var unsortedExpressions = new List <Expression>()
            {
                new IntLiteral {
                    Value = 100
                },
                new IntLiteral {
                    Value = 42
                },
                new IntLiteral {
                    Value = 0
                },
                new StringLiteral {
                    Text = "42"
                },
                new StringLiteral {
                    Text = "Hello World!"
                },
                new IdToken {
                    Id = "testId"
                },
                new IdToken {
                    Id = "42"
                },
                new PatternExpression(new StringLiteral {
                    Text = "42"
                }, true),
            };
            var expectedSortedExpressions = new List <Expression>
            {
                new StringLiteral {
                    Text = "42"
                },
                new PatternExpression(new StringLiteral {
                    Text = "42"
                }, true),
                new StringLiteral {
                    Text = "Hello World!"
                },
                new IdToken {
                    Id = "42"
                },
                new IdToken {
                    Id = "testId"
                },
                new IntLiteral {
                    Value = 0
                },
                new IntLiteral {
                    Value = 42
                },
                new IntLiteral {
                    Value = 100
                },
            };
            var patternVarDef = new PatternVarDef
            {
                Id     = "testVarDef",
                Values = unsortedExpressions
            };
            var patternVars = new PatternNode
            {
                Vars = new List <PatternVarDef>()
                {
                    patternVarDef
                },
                Node = new PatternVarRef(patternVarDef)
            };

            var             logger       = new LoggerMessageCounter();
            var             processor    = new DslProcessor();
            UstPreprocessor preprocessor = new UstPreprocessor()
            {
                Logger = logger
            };

            Expression[] resultSortedExpressions = ((PatternNode)preprocessor.Preprocess(patternVars))
                                                   .Vars.First().Values.ToArray();

            Assert.AreEqual(expectedSortedExpressions.Count, resultSortedExpressions.Length);
            for (int i = 0; i < expectedSortedExpressions.Count; i++)
            {
                Assert.IsTrue(expectedSortedExpressions[i].Equals(resultSortedExpressions[i]),
                              $"Not equal at {i} index: expected {expectedSortedExpressions[i]} not equals to {resultSortedExpressions[i]}");
            }
        }
Example #30
0
        public static IPatternsRepository CreatePatternsRepository(string patternsString,
                                                                   IEnumerable <string> patternIds,
                                                                   ILogger logger)
        {
            IPatternsRepository patternsRepository;

            if (string.IsNullOrEmpty(patternsString) || patternsString == "default")
            {
                patternsRepository = new DefaultPatternRepository();
            }
            else if (patternsString.EqualsIgnoreCase("no"))
            {
                patternsRepository = DummyPatternsRepository.Instance;
            }
            else if (patternsString.EndsWith(".json", StringComparison.OrdinalIgnoreCase))
            {
                patternsRepository = new JsonPatternsRepository(FileExt.ReadAllText(patternsString));
            }
            else
            {
                TextFile patternsFile;
                if (patternsString.EndsWith(".pattern", StringComparison.OrdinalIgnoreCase))
                {
                    patternsFile = new TextFile(FileExt.ReadAllText(patternsString))
                    {
                        PatternKey = patternsString,
                        Name       = patternsString
                    };
                }
                else
                {
                    patternsFile = new TextFile(patternsString);
                }

                var processor = new DslProcessor();
                if (logger != null)
                {
                    processor.Logger = logger;
                }

                PatternRoot patternRoot      = processor.Deserialize(patternsFile);
                var         patternConverter = new PatternConverter();
                if (logger != null)
                {
                    patternConverter.Logger = logger;
                }

                List <PatternDto> dtos = patternConverter.ConvertBack(new[] { patternRoot });

                var memoryPatternsRepository = new MemoryPatternsRepository();
                memoryPatternsRepository.Add(dtos);

                patternsRepository = memoryPatternsRepository;
            }

            if (logger != null)
            {
                patternsRepository.Logger = logger;
            }

            patternsRepository.Identifiers = patternIds as List <string> ?? patternIds?.ToList();

            return(patternsRepository);
        }