Example #1
0
        public void TestUpdateIndex()
        {
            using var indexBuilder = new CodeIndexBuilder("ABC", new LucenePoolLight(TempCodeIndexDir), new LucenePoolLight(TempHintIndexDir), Log);

            var fileName = Path.Combine(MonitorFolder, "A.txt");

            File.AppendAllText(fileName, "ABCD Eeee EEEE");
            Assert.AreEqual(IndexBuildResults.Successful, indexBuilder.CreateIndex(new FileInfo(fileName)));
            Assert.AreEqual("ABCD Eeee EEEE", indexBuilder.CodeIndexPool.SearchCode(new MatchAllDocsQuery()).First().Content);
            CollectionAssert.AreEquivalent(new[] { "ABCD", "Eeee", "EEEE" }, indexBuilder.HintIndexPool.SearchWord(new MatchAllDocsQuery()).Select(u => u.Word));

            File.Delete(fileName);
            File.AppendAllText(fileName, "WOWO IT IS NEW CONTENT APPLY ABCD EEEE");
            Assert.AreEqual(IndexBuildResults.Successful, indexBuilder.UpdateIndex(new FileInfo(fileName), CancellationToken.None));
            Assert.AreEqual("WOWO IT IS NEW CONTENT APPLY ABCD EEEE", indexBuilder.CodeIndexPool.SearchCode(new MatchAllDocsQuery()).First().Content);
            CollectionAssert.AreEquivalent(new[] { "WOWO", "ABCD", "CONTENT", "APPLY", "EEEE" }, indexBuilder.HintIndexPool.SearchWord(new MatchAllDocsQuery()).Select(u => u.Word), "Words Been Added And Removed If Needed");

            var fileName2 = Path.Combine(MonitorFolder, "B.txt");

            File.AppendAllText(fileName2, "ABCD Eeee");
            Assert.AreEqual(IndexBuildResults.Successful, indexBuilder.CreateIndex(new FileInfo(fileName2)));
            CollectionAssert.AreEquivalent(new[] { "WOWO", "ABCD", "CONTENT", "APPLY", "Eeee", "EEEE" }, indexBuilder.HintIndexPool.SearchWord(new MatchAllDocsQuery()).Select(u => u.Word), "Words Been Added And Removed If Needed");

            File.Delete(fileName2);
            File.AppendAllText(fileName2, "Eeee");
            CollectionAssert.AreEquivalent(new[] { "WOWO", "ABCD", "CONTENT", "APPLY", "Eeee", "EEEE" }, indexBuilder.HintIndexPool.SearchWord(new MatchAllDocsQuery()).Select(u => u.Word), "Words Been Added And Removed If Needed");
        }
Example #2
0
        public void TestUpdateIndex()
        {
            BuildIndex();
            LucenePool.SaveResultsAndClearLucenePool(Config.LuceneIndexForCode);

            var result = CodeIndexSearcher.Search(Config.LuceneIndexForCode, new TermQuery(new Term(nameof(CodeSource.FilePath) + Constants.NoneTokenizeFieldSuffix, @"D:\DDDD\A new Name.cs")), 10);

            Assert.That(result.Length, Is.EqualTo(1));

            CodeIndexBuilder.UpdateIndex(Config.LuceneIndexForCode, new Term(nameof(CodeSource.FilePath) + Constants.NoneTokenizeFieldSuffix, @"d:\dddd\a new name.cs"), CodeIndexBuilder.GetDocumentFromSource(new CodeSource()
            {
                Content          = "AAA",
                FileExtension    = "CCC",
                FilePath         = "BBB",
                FileName         = "DDD",
                IndexDate        = new DateTime(1999, 12, 31),
                LastWriteTimeUtc = new DateTime(2000, 1, 1)
            }));
            LucenePool.SaveResultsAndClearLucenePool(Config.LuceneIndexForCode);

            result = CodeIndexSearcher.Search(Config.LuceneIndexForCode, new TermQuery(new Term(nameof(CodeSource.FilePath) + Constants.NoneTokenizeFieldSuffix, @"d:\dddd\a new name.cs")), 10);
            Assert.That(result.Length, Is.EqualTo(0));

            result = CodeIndexSearcher.Search(Config.LuceneIndexForCode, new TermQuery(new Term(nameof(CodeSource.FilePath) + Constants.NoneTokenizeFieldSuffix, "BBB")), 10);
            Assert.That(result.Length, Is.EqualTo(1));
            Assert.AreEqual(@"DDD", result[0].Get(nameof(CodeSource.FileName)));
            Assert.AreEqual(@"CCC", result[0].Get(nameof(CodeSource.FileExtension)));
            Assert.AreEqual(@"BBB", result[0].Get(nameof(CodeSource.FilePath)));
            Assert.AreEqual("AAA", result[0].Get(nameof(CodeSource.Content)));
            Assert.AreEqual(new DateTime(1999, 12, 31).Ticks, result[0].GetField(nameof(CodeSource.IndexDate)).GetInt64Value());
            Assert.AreEqual(new DateTime(2000, 1, 1).Ticks, result[0].GetField(nameof(CodeSource.LastWriteTimeUtc)).GetInt64Value());
        }
Example #3
0
        public void TestSearch_ReaderFromWriter()
        {
            CodeIndexBuilder.BuildIndex(Config, true, true, true, new[] { new CodeSource
                                                                          {
                                                                              FileName      = "Dummy File 1",
                                                                              FileExtension = "cs",
                                                                              FilePath      = @"C:\Dummy File 1.cs",
                                                                              Content       = "Test Content" + Environment.NewLine + "A New Line For Test"
                                                                          },
                                                                          new CodeSource
                                                                          {
                                                                              FileName      = "Dummy File 2",
                                                                              FileExtension = "cs",
                                                                              FilePath      = @"C:\Dummy File 2.cs",
                                                                              Content       = "Test Content" + Environment.NewLine + "A New Line For Test"
                                                                          },
                                                                          new CodeSource
                                                                          {
                                                                              FileName      = "Dummy File 2",
                                                                              FileExtension = "xml",
                                                                              FilePath      = @"C:\Dummy File.xml",
                                                                              Content       = "Test Content" + Environment.NewLine + "A New Line For Test"
                                                                          } });

            var results = CodeIndexSearcher.Search(Config.LuceneIndexForCode, new TermQuery(new Term(nameof(CodeSource.FileExtension), "xml")), 10);

            Assert.That(results.Length, Is.EqualTo(1));
        }
        public void TestInitializeIndex()
        {
            Directory.CreateDirectory(MonitorFolder);
            File.WriteAllText(Path.Combine(MonitorFolder, "A.txt"), "I have an apple");

            Directory.CreateDirectory(Path.Combine(MonitorFolder, "Sub"));
            File.WriteAllText(Path.Combine(MonitorFolder, "Sub", "B.txt"), "I have a peach");

            var log         = new DummyLog();
            var initializer = new IndexInitializer(log);

            initializer.InitializeIndex(Config, out _);
            StringAssert.Contains($"Create index folder {Config.LuceneIndexForCode}", log.LogsContent);
            StringAssert.Contains($"Create index folder {Config.LuceneIndexForHint}", log.LogsContent);

            var codeSources = CodeIndexBuilder.GetAllIndexedCodeSource(Config.LuceneIndexForCode);

            Assert.AreEqual(2, codeSources.Count);
            CollectionAssert.AreEquivalent(new[] { Path.Combine(MonitorFolder, "A.txt"), Path.Combine(MonitorFolder, "Sub", "B.txt") }, codeSources.Select(u => u.FilePath));

            File.WriteAllText(Path.Combine(MonitorFolder, "C.txt"), "I have a pear");
            File.AppendAllText(Path.Combine(MonitorFolder, "A.txt"), "Now I have two apples");
            File.Delete(Path.Combine(MonitorFolder, "Sub", "B.txt"));

            initializer.InitializeIndex(Config, out _);

            StringAssert.Contains("Compare index difference", log.LogsContent);
            StringAssert.Contains($"File {Path.Combine(MonitorFolder, "A.txt")} modified", log.LogsContent);
            StringAssert.Contains($"File {Path.Combine(MonitorFolder, "Sub", "B.txt")} deleted", log.LogsContent);
            StringAssert.Contains($"Found new file {Path.Combine(MonitorFolder, "C.txt")}", log.LogsContent);

            codeSources = CodeIndexBuilder.GetAllIndexedCodeSource(Config.LuceneIndexForCode);
            Assert.AreEqual(2, codeSources.Count);
            CollectionAssert.AreEquivalent(new[] { Path.Combine(MonitorFolder, "A.txt"), Path.Combine(MonitorFolder, "C.txt") }, codeSources.Select(u => u.FilePath));
        }
Example #5
0
        void UpdateIndex(string fullPath, PendingRetrySource pendingRetrySource = null)
        {
            if (IsFile(fullPath))
            {
                var fileInfo = new FileInfo(fullPath);
                try
                {
                    Thread.Sleep(WaitMilliseconds); // Wait to let file finished write to disk

                    if (fileInfo.Exists)
                    {
                        var content  = FilesContentHelper.ReadAllText(fullPath);
                        var document = CodeIndexBuilder.GetDocumentFromSource(CodeSource.GetCodeSource(fileInfo, content));
                        CodeIndexBuilder.UpdateIndex(config.LuceneIndexForCode, GetNoneTokenizeFieldTerm(nameof(CodeSource.FilePath), fullPath), document);
                        WordsHintBuilder.UpdateWordsHint(config, WordSegmenter.GetWords(content), log);
                        pendingChanges++;
                    }
                }
                catch (IOException)
                {
                    AddFileChangesToRetrySouce(fullPath, WatcherChangeTypes.Changed, pendingRetrySource);
                }
                catch (Exception ex)
                {
                    log?.Error(ex.ToString());
                }
            }
        }
Example #6
0
        public void TestRenameFolderIndexes()
        {
            using var indexBuilder = new CodeIndexBuilder("ABC", new LucenePoolLight(TempCodeIndexDir), new LucenePoolLight(TempHintIndexDir), Log);

            var oldPath = Path.Combine(MonitorFolder, "ABC");

            Directory.CreateDirectory(oldPath);
            var newPath     = Path.Combine(MonitorFolder, "EFG");
            var oldFileName = Path.Combine(oldPath, "A.txt");
            var newFileName = Path.Combine(newPath, "A.txt");

            File.AppendAllText(oldFileName, "ABCD EEEE");
            Assert.AreEqual(IndexBuildResults.Successful, indexBuilder.CreateIndex(new FileInfo(oldFileName)));
            Assert.AreEqual(oldFileName, indexBuilder.CodeIndexPool.SearchCode(new MatchAllDocsQuery()).First().FilePath);

            Directory.Move(oldPath, newPath);
            Assert.IsTrue(indexBuilder.RenameFolderIndexes(oldPath, newPath, CancellationToken.None));
            Assert.AreEqual(newFileName, indexBuilder.CodeIndexPool.SearchCode(new MatchAllDocsQuery()).First().FilePath);

            var results = indexBuilder.CodeIndexPool.SearchCode(new PrefixQuery(indexBuilder.GetNoneTokenizeFieldTerm(nameof(CodeSource.FilePath), newPath)));

            Assert.AreEqual(1, results.Length);
            Assert.AreEqual(newFileName, results[0].FilePath);
            Assert.AreEqual("ABCD EEEE", results[0].Content);
        }
Example #7
0
        public void TestBuildIndexByBatch()
        {
            using var indexBuilder = new CodeIndexBuilder("ABC", new LucenePoolLight(TempCodeIndexDir), new LucenePoolLight(TempHintIndexDir), Log);
            var fileName1 = Path.Combine(MonitorFolder, "A.txt");
            var fileName2 = Path.Combine(MonitorFolder, "B.txt");

            File.AppendAllText(fileName1, "ABCD ABCD" + Environment.NewLine + "ABCD");
            File.AppendAllText(fileName2, "ABCD EFGH");

            var failedFiles = indexBuilder.BuildIndexByBatch(new[] { new FileInfo(fileName1), new FileInfo(fileName2) }, true, true, true, CancellationToken.None, true);

            CollectionAssert.IsEmpty(failedFiles);

            var results = indexBuilder.CodeIndexPool.SearchCode(Generator.GetQueryFromStr("ABCD", false));

            Assert.AreEqual(2, results.Length);
            Assert.AreEqual("A.txt", results[0].FileName);
            Assert.AreEqual("txt", results[0].FileExtension);
            Assert.AreEqual(fileName1, results[0].FilePath);
            Assert.AreEqual("ABCD ABCD" + Environment.NewLine + "ABCD", results[0].Content);
            Assert.GreaterOrEqual(DateTime.UtcNow, results[0].IndexDate);
            Assert.AreEqual("B.txt", results[1].FileName);
            Assert.AreEqual("txt", results[1].FileExtension);
            Assert.AreEqual(fileName2, results[1].FilePath);
            Assert.AreEqual("ABCD EFGH", results[1].Content);
            Assert.GreaterOrEqual(DateTime.UtcNow, results[1].IndexDate);
            Assert.AreEqual(1, indexBuilder.CodeIndexPool.SearchCode(Generator.GetQueryFromStr("EFGH", false)).Length);
            Assert.AreEqual(1, indexBuilder.HintIndexPool.SearchWord(new TermQuery(new Term(nameof(CodeWord.Word), "ABCD"))).Length);
            Assert.AreEqual(1, indexBuilder.HintIndexPool.SearchWord(new TermQuery(new Term(nameof(CodeWord.Word), "EFGH"))).Length);
        }
Example #8
0
        void CreateNewIndex(string fullPath, PendingRetrySource pendingRetrySource = null)
        {
            if (IsFile(fullPath))
            {
                var fileInfo = new FileInfo(fullPath);
                try
                {
                    Thread.Sleep(WaitMilliseconds); // Wait to let file finished write to disk

                    if (fileInfo.Exists)
                    {
                        var content = FilesContentHelper.ReadAllText(fullPath);
                        CodeIndexBuilder.BuildIndex(config, false, false, false, new[] { CodeSource.GetCodeSource(fileInfo, content) });
                        WordsHintBuilder.UpdateWordsHint(config, WordSegmenter.GetWords(content), log);
                        pendingChanges++;
                    }
                }
                catch (IOException)
                {
                    AddFileChangesToRetrySouce(fullPath, WatcherChangeTypes.Created, pendingRetrySource);
                }
                catch (Exception ex)
                {
                    log?.Error(ex.ToString());
                }
            }
        }
Example #9
0
        public void TestCreateIndex()
        {
            using var indexBuilder = new CodeIndexBuilder("ABC", new LucenePoolLight(TempCodeIndexDir), new LucenePoolLight(TempHintIndexDir), Log);

            var fileName = Path.Combine(MonitorFolder, "A.txt");

            File.AppendAllText(fileName, "ABCD EEEE");
            Assert.AreEqual(IndexBuildResults.Successful, indexBuilder.CreateIndex(new FileInfo(fileName)));

            var results = indexBuilder.CodeIndexPool.SearchCode(new MatchAllDocsQuery());
            var words   = indexBuilder.HintIndexPool.SearchWord(new MatchAllDocsQuery());

            Assert.AreEqual(1, results.Length);
            Assert.AreEqual(2, words.Length);
            Assert.AreEqual("A.txt", results[0].FileName);
            Assert.AreEqual("txt", results[0].FileExtension);
            Assert.AreEqual(fileName, results[0].FilePath);
            Assert.AreEqual("ABCD EEEE", results[0].Content);
            Assert.GreaterOrEqual(DateTime.UtcNow, results[0].IndexDate);
            CollectionAssert.AreEquivalent(new[] { "ABCD", "EEEE" }, words.Select(u => u.Word));

            Assert.AreEqual(IndexBuildResults.Successful, indexBuilder.CreateIndex(new FileInfo(fileName)));
            results = indexBuilder.CodeIndexPool.SearchCode(new MatchAllDocsQuery());
            words   = indexBuilder.HintIndexPool.SearchWord(new MatchAllDocsQuery());
            Assert.AreEqual(1, results.Length, "No Duplicate Index Created");
            Assert.AreEqual(2, words.Length, "No Duplicate Index Created");
        }
Example #10
0
        public void TestThreadSafeForIndexReader()
        {
            CodeIndexBuilder.BuildIndex(Config, true, true, true, new[] {
                new CodeSource
                {
                    FileName      = "Dummy File 1",
                    FileExtension = "cs",
                    FilePath      = @"C:\Dummy File 1.cs",
                    Content       = "Test Content" + Environment.NewLine + "A New Line For Test"
                },
                new CodeSource
                {
                    FileName      = "Dummy File 2",
                    FileExtension = "cs",
                    FilePath      = @"C:\Dummy File 2.cs",
                    Content       = "Test Content" + Environment.NewLine + "A New Line For Test"
                },
                new CodeSource
                {
                    FileName      = "Dummy File 2",
                    FileExtension = "xml",
                    FilePath      = @"C:\Dummy File.xml",
                    Content       = "Test Content" + Environment.NewLine + "A New Line For Test"
                }
            });

            LucenePool.SaveResultsAndClearLucenePool(Config);

            var taskList = new List <Task>();

            for (int i = 0; i < 20; i++)
            {
                taskList.Add(Task.Run(() =>
                {
                    for (int j = 0; j < 50; j++)
                    {
                        if (j % 4 == 0)
                        {
                            CodeIndexBuilder.BuildIndex(Config, true, true, true, new[] {
                                new CodeSource
                                {
                                    FileName      = $"Dummy File 1 {i} {j}",
                                    FileExtension = "cs",
                                    FilePath      = $@"C:\Dummy File 1 {i} {j}.cs",
                                    Content       = "Test Content" + Environment.NewLine + "A New Line For Test"
                                }
                            });
                        }

                        LucenePool.Search(Config.LuceneIndexForCode, new MatchAllDocsQuery(), int.MaxValue);
                        LucenePool.Search(Config.LuceneIndexForCode, new MatchAllDocsQuery(), int.MaxValue);
                    }
                }));
            }

            Assert.DoesNotThrowAsync(async() => await Task.WhenAll(taskList));
        }
Example #11
0
 public void TestGetAllHintWords()
 {
     using var indexBuilder = new CodeIndexBuilder("ABC", new LucenePoolLight(TempCodeIndexDir), new LucenePoolLight(TempHintIndexDir), Log);
     File.AppendAllText(Path.Combine(MonitorFolder, "A.txt"), "ABCD EEEE WoWo Eeee Abcd");
     File.AppendAllText(Path.Combine(MonitorFolder, "B.txt"), "Neww Content WoWo skrskrskr");
     Assert.AreEqual(IndexBuildResults.Successful, indexBuilder.CreateIndex(new FileInfo(Path.Combine(MonitorFolder, "A.txt"))));
     Assert.AreEqual(IndexBuildResults.Successful, indexBuilder.CreateIndex(new FileInfo(Path.Combine(MonitorFolder, "B.txt"))));
     CollectionAssert.AreEquivalent(new[] { "ABCD", "EEEE", "WoWo", "Eeee", "Abcd", "Neww", "Content", "skrskrskr" }, indexBuilder.GetAllHintWords());
 }
Example #12
0
        public void TestGetNoneTokenizeFieldTerm()
        {
            using var indexBuilder = new CodeIndexBuilder("ABC", new LucenePoolLight(TempCodeIndexDir), new LucenePoolLight(TempHintIndexDir), Log);

            var term = indexBuilder.GetNoneTokenizeFieldTerm("ABC", "Value");

            Assert.AreEqual("ABC" + Constants.NoneTokenizeFieldSuffix, term.Field);
            Assert.AreEqual("Value", term.Text());
        }
Example #13
0
        public void TestInitIndexFolderIfNeeded()
        {
            Assert.IsFalse(Directory.Exists(Config.LuceneIndexForCode));
            Assert.IsFalse(Directory.Exists(Config.LuceneIndexForHint));

            CodeIndexBuilder.InitIndexFolderIfNeeded(Config, null);

            Assert.IsTrue(Directory.Exists(Config.LuceneIndexForCode));
            Assert.IsTrue(Directory.Exists(Config.LuceneIndexForHint));
        }
Example #14
0
 public void TestGetContentSearchStr()
 {
     Assert.Multiple(() =>
     {
         Assert.IsEmpty(Generator.GetContentSearchStr(null, false));
         Assert.IsEmpty(Generator.GetContentSearchStr(" ", true));
         Assert.AreEqual($"{nameof(CodeSource.Content)}:A", Generator.GetContentSearchStr("A", false));
         Assert.AreEqual($"{CodeIndexBuilder.GetCaseSensitiveField(nameof(CodeSource.Content))}:A", Generator.GetContentSearchStr("A", true));
     });
 }
Example #15
0
        public void TestInitIndexFolderIfNeeded()
        {
            using var indexBuilder = new CodeIndexBuilder("ABC", new LucenePoolLight(TempCodeIndexDir), new LucenePoolLight(TempHintIndexDir), Log);
            Assert.IsFalse(Directory.Exists(TempCodeIndexDir));
            Assert.IsFalse(Directory.Exists(TempHintIndexDir));

            indexBuilder.InitIndexFolderIfNeeded();
            Assert.IsTrue(Directory.Exists(TempCodeIndexDir));
            Assert.IsTrue(Directory.Exists(TempHintIndexDir));
        }
Example #16
0
        public void TestDeleteAllIndex()
        {
            BuildIndex();
            LucenePool.SaveResultsAndClearLucenePool(Config.LuceneIndexForCode);
            Assert.AreEqual(1, CodeIndexSearcher.Search(Config.LuceneIndexForCode, Generator.GetQueryFromStr($"{nameof(CodeSource.FileName)}:\"Dummy File\""), 10).Length);
            Assert.AreEqual(1, CodeIndexSearcher.Search(Config.LuceneIndexForCode, Generator.GetQueryFromStr($"{nameof(CodeSource.FileName)}:\"A new File\""), 10).Length);

            CodeIndexBuilder.DeleteAllIndex(Config);
            Assert.AreEqual(0, CodeIndexSearcher.Search(Config.LuceneIndexForCode, Generator.GetQueryFromStr($"{nameof(CodeSource.FileName)}:\"Dummy File\""), 10).Length);
            Assert.AreEqual(0, CodeIndexSearcher.Search(Config.LuceneIndexForCode, Generator.GetQueryFromStr($"{nameof(CodeSource.FileName)}:\"A new File\""), 10).Length);
        }
Example #17
0
        public void TestBuildIndexByBatch_ReturnFailedFiles()
        {
            File.WriteAllText(Path.Combine(TempDir, "A.txt"), "ABCD");
            CodeIndexBuilder.BuildIndexByBatch(Config, true, true, true, new[] { new FileInfo(Path.Combine(TempDir, "A.txt")) }, false, new DummyLog {
                ThrowExceptionWhenLogContains = "Add index For " + Path.Combine(TempDir, "A.txt")
            }, out var failedIndexFiles);
            Assert.AreEqual(1, failedIndexFiles.Count);

            CodeIndexBuilder.BuildIndexByBatch(Config, true, true, true, new[] { new FileInfo(Path.Combine(TempDir, "A.txt")), new FileInfo("BlaBla\\a.txt") }, false, null, out failedIndexFiles);
            Assert.AreEqual(0, failedIndexFiles.Count);
        }
Example #18
0
 void DeleteIndex(string fullPath)
 {
     try
     {
         CodeIndexBuilder.DeleteIndex(config.LuceneIndexForCode, GetNoneTokenizeFieldTerm(nameof(CodeSource.FilePath), fullPath));
         pendingChanges++;
     }
     catch (Exception ex)
     {
         log?.Error(ex.ToString());
     }
 }
Example #19
0
        public void TestIndexExists()
        {
            Assert.IsFalse(CodeIndexBuilder.IndexExists(Config.LuceneIndexForCode));

            BuildIndex();

            Assert.IsFalse(CodeIndexBuilder.IndexExists(Config.LuceneIndexForCode));

            LucenePool.SaveResultsAndClearLucenePool(Config.LuceneIndexForCode);

            Assert.IsTrue(CodeIndexBuilder.IndexExists(Config.LuceneIndexForCode));
        }
Example #20
0
 void DeleteAllDocumentsIndexUnder(string forderOldFullPath)
 {
     try
     {
         var term = new PrefixQuery(GetNoneTokenizeFieldTerm(nameof(CodeSource.FilePath), forderOldFullPath));
         CodeIndexBuilder.DeleteIndex(config.LuceneIndexForCode, term);
         pendingChanges++;
     }
     catch (Exception ex)
     {
         log?.Error(ex.ToString());
     }
 }
Example #21
0
        public void TestGetContentSearchQuery_NormalQuery()
        {
            var query = Generator.GetContentSearchQuery(new SearchRequest
            {
                CaseSensitive = false,
                Content       = "ABC*",
            });

            Assert.NotNull(query);
            Assert.AreEqual("Content:abc*", query.ToString());

            query = Generator.GetContentSearchQuery(new SearchRequest
            {
                CaseSensitive = true,
                Content       = "ABC*",
            });

            Assert.AreEqual($"{CodeIndexBuilder.GetCaseSensitiveField(nameof(CodeSource.Content))}:ABC*", query.ToString());

            query = Generator.GetContentSearchQuery(new SearchRequest
            {
                CaseSensitive = false,
                Content       = "Abc~2",
            });

            Assert.AreEqual($"Content:abc~2", query.ToString());

            query = Generator.GetContentSearchQuery(new SearchRequest
            {
                CaseSensitive = true,
                Content       = "Abc~2",
            });

            Assert.AreEqual($"{CodeIndexBuilder.GetCaseSensitiveField(nameof(CodeSource.Content))}:Abc~2", query.ToString());

            query = Generator.GetContentSearchQuery(new SearchRequest
            {
                CaseSensitive = true,
                Content       = "  ",
            });

            Assert.IsNull(query);

            query = Generator.GetContentSearchQuery(new SearchRequest
            {
                CaseSensitive = false,
                Content       = null,
            });

            Assert.IsNull(query);
        }
Example #22
0
        protected string GetContentSearchStr(string content, bool caseSensitive)
        {
            if (!string.IsNullOrWhiteSpace(content))
            {
                if (caseSensitive)
                {
                    return($"{CodeIndexBuilder.GetCaseSensitiveField(nameof(CodeSource.Content))}:{content}");
                }

                return($"{nameof(CodeSource.Content)}:{content}");
            }

            return(string.Empty);
        }
Example #23
0
        public void TestDeleteIndex()
        {
            using var indexBuilder = new CodeIndexBuilder("ABC", new LucenePoolLight(TempCodeIndexDir), new LucenePoolLight(TempHintIndexDir), Log);

            File.AppendAllText(Path.Combine(MonitorFolder, "A.txt"), "ABCD EEEE dddd");
            File.AppendAllText(Path.Combine(MonitorFolder, "B.txt"), "ABCD DDDD eeEE");
            Assert.AreEqual(IndexBuildResults.Successful, indexBuilder.CreateIndex(new FileInfo(Path.Combine(MonitorFolder, "A.txt"))));
            Assert.AreEqual(IndexBuildResults.Successful, indexBuilder.CreateIndex(new FileInfo(Path.Combine(MonitorFolder, "B.txt"))));
            Assert.AreEqual(2, indexBuilder.CodeIndexPool.SearchCode(new MatchAllDocsQuery()).Length);
            CollectionAssert.AreEquivalent(new[] { "ABCD", "EEEE", "DDDD", "dddd", "eeEE" }, indexBuilder.HintIndexPool.SearchWord(new MatchAllDocsQuery()).Select(u => u.Word));

            Assert.IsTrue(indexBuilder.DeleteIndex(Path.Combine(MonitorFolder, "A.txt")));
            Assert.AreEqual(1, indexBuilder.CodeIndexPool.SearchCode(new MatchAllDocsQuery()).Length);
            CollectionAssert.AreEquivalent(new[] { "ABCD", "DDDD", "eeEE" }, indexBuilder.HintIndexPool.SearchWord(new MatchAllDocsQuery()).Select(u => u.Word), "Words Been Removed If Needed");
        }
Example #24
0
        public void TestCommit()
        {
            using var indexBuilder = new CodeIndexBuilder("ABC", new LucenePoolLight(TempCodeIndexDir), new LucenePoolLight(TempHintIndexDir), Log);
            File.AppendAllText(Path.Combine(MonitorFolder, "A.txt"), "ABCD EEEE");
            Assert.AreEqual(IndexBuildResults.Successful, indexBuilder.CreateIndex(new FileInfo(Path.Combine(MonitorFolder, "A.txt"))));
            Assert.IsFalse(IndexBuilderHelper.IndexExists(TempCodeIndexDir));

            indexBuilder.Commit();
            Assert.IsTrue(IndexBuilderHelper.IndexExists(TempCodeIndexDir));

            using var dir    = Lucene.Net.Store.FSDirectory.Open(TempCodeIndexDir);
            using var reader = DirectoryReader.Open(dir);
            var searcher = new IndexSearcher(reader);

            Assert.AreEqual(1, searcher.Search(new MatchAllDocsQuery(), 1).TotalHits);
        }
Example #25
0
        public void TestUpdateCodeFilePath()
        {
            var document = CodeIndexBuilder.GetDocumentFromSource(new CodeSource
            {
                Content          = "AAA",
                FileExtension    = "CCC",
                FilePath         = "BBB/DDD/1.txt",
                FileName         = "1.txt",
                IndexDate        = new DateTime(1999, 12, 31),
                LastWriteTimeUtc = new DateTime(2000, 1, 1)
            });

            CodeIndexBuilder.UpdateCodeFilePath(document, "BBB/DDD/", "AAA/EEE/");
            Assert.AreEqual(@"AAA/EEE/1.txt", document.Get(nameof(CodeSource.FilePath)));
            Assert.AreEqual(@"AAA/EEE/1.txt", document.Get(nameof(CodeSource.FilePath) + Constants.NoneTokenizeFieldSuffix));
        }
        public void TestGetAllIndexedCodeSource()
        {
            Directory.CreateDirectory(MonitorFolder);
            File.WriteAllText(Path.Combine(MonitorFolder, "A.txt"), "I have an apple");
            File.WriteAllText(Path.Combine(MonitorFolder, "B.txt"), "I have two apples");

            var initializer = new IndexInitializer(null);

            initializer.InitializeIndex(Config, out _);

            var codeSources = CodeIndexBuilder.GetAllIndexedCodeSource(Config.LuceneIndexForCode);

            Assert.AreEqual(2, codeSources.Count);
            CollectionAssert.AreEquivalent(new[] { Path.Combine(MonitorFolder, "A.txt"), Path.Combine(MonitorFolder, "B.txt") }, codeSources.Select(u => u.FilePath));
            CollectionAssert.AreEquivalent(new[] { new FileInfo(Path.Combine(MonitorFolder, "A.txt")).LastWriteTimeUtc, new FileInfo(Path.Combine(MonitorFolder, "B.txt")).LastWriteTimeUtc }, codeSources.Select(u => u.LastWriteTimeUtc));
        }
Example #27
0
        public void TestGetAllIndexedCodeSource()
        {
            using var indexBuilder = new CodeIndexBuilder("ABC", new LucenePoolLight(TempCodeIndexDir), new LucenePoolLight(TempHintIndexDir), Log);
            var fileName1 = Path.Combine(MonitorFolder, "A.txt");
            var fileName2 = Path.Combine(MonitorFolder, "B.txt");

            File.AppendAllText(fileName1, "ABCD ABCD");
            File.AppendAllText(fileName2, "EFGH");

            var file1Info = new FileInfo(fileName1);
            var file2Info = new FileInfo(fileName2);

            var failedFiles = indexBuilder.BuildIndexByBatch(new[] { new FileInfo(fileName1), new FileInfo(fileName2) }, true, true, true, CancellationToken.None, true);

            CollectionAssert.IsEmpty(failedFiles);

            CollectionAssert.AreEquivalent(new[] { (file1Info.FullName, file1Info.LastWriteTimeUtc), (file2Info.FullName, file2Info.LastWriteTimeUtc) }, indexBuilder.GetAllIndexedCodeSource());
Example #28
0
 void BuildIndex()
 {
     CodeIndexBuilder.BuildIndex(Config, true, true, true, new[] { new CodeSource
                                                                   {
                                                                       FileName      = "Dummy File",
                                                                       FileExtension = "cs",
                                                                       FilePath      = @"C:\Dummy File.cs",
                                                                       Content       = "Test Content" + Environment.NewLine + "A New Line For Test",
                                                                       IndexDate     = new DateTime(2020, 1, 1)
                                                                   },
                                                                   new CodeSource
                                                                   {
                                                                       FileName      = "A new File",
                                                                       FileExtension = "xml",
                                                                       FilePath      = @"D:\DDDD\A new Name.cs",
                                                                       Content       = "FFFF Content A new Line"
                                                                   } });
 }
Example #29
0
        public void TestBuildIndexByBatch_FailedFiles()
        {
            using var indexBuilder = new CodeIndexBuilder("ABC", new LucenePoolLight(TempCodeIndexDir), new LucenePoolLight(TempHintIndexDir), Log);
            var fileName1 = Path.Combine(MonitorFolder, "A.txt");
            var fileName2 = Path.Combine(MonitorFolder, "B.txt");
            var file      = File.Create(fileName1);

            File.AppendAllText(fileName2, "ABCD ABCD");
            try
            {
                var failedFiles = indexBuilder.BuildIndexByBatch(new[] { new FileInfo(fileName1), new FileInfo(fileName2) }, true, true, true, CancellationToken.None, true);
                CollectionAssert.AreEquivalent(new[] { fileName1 }, failedFiles.Select(u => u.FullName));
            }
            finally
            {
                file.Dispose();
            }
        }
Example #30
0
        public void TestDeleteIndex()
        {
            BuildIndex();
            LucenePool.SaveResultsAndClearLucenePool(Config.LuceneIndexForCode);

            var generator = new QueryGenerator();
            var result    = CodeIndexSearcher.Search(Config.LuceneIndexForCode, generator.GetQueryFromStr("FFFF test"), 10);

            Assert.That(result.Length, Is.EqualTo(2));

            CodeIndexBuilder.DeleteIndex(Config.LuceneIndexForCode, new Term(nameof(CodeSource.FileExtension), "xml"));
            LucenePool.SaveResultsAndClearLucenePool(Config.LuceneIndexForCode);
            result = CodeIndexSearcher.Search(Config.LuceneIndexForCode, generator.GetQueryFromStr("FFFF test"), 10);
            Assert.That(result.Length, Is.EqualTo(1));

            CodeIndexBuilder.DeleteIndex(Config.LuceneIndexForCode, generator.GetQueryFromStr("Test"));
            LucenePool.SaveResultsAndClearLucenePool(Config.LuceneIndexForCode);
            result = CodeIndexSearcher.Search(Config.LuceneIndexForCode, generator.GetQueryFromStr("FFFF test"), 10);
            Assert.That(result.Length, Is.EqualTo(0));
        }