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");
        }
        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");
        }
 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());
 }
        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");
        }
        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);
        }
        public void TestDeleteIndex_FolderDelete()
        {
            using var indexBuilder = new CodeIndexBuilder("ABC", new LucenePoolLight(TempCodeIndexDir), new LucenePoolLight(TempHintIndexDir), Log);

            Directory.CreateDirectory(Path.Combine(MonitorFolder, "SubDir"));
            File.AppendAllText(Path.Combine(MonitorFolder, "SubDir.txt"), "1234");
            File.AppendAllText(Path.Combine(MonitorFolder, "SubDir", "A.txt"), "5678");
            File.AppendAllText(Path.Combine(MonitorFolder, "SubDir", "B.txt"), "5678");

            Assert.AreEqual(IndexBuildResults.Successful, indexBuilder.CreateIndex(new FileInfo(Path.Combine(MonitorFolder, "SubDir.txt"))));
            Assert.AreEqual(IndexBuildResults.Successful, indexBuilder.CreateIndex(new FileInfo(Path.Combine(MonitorFolder, "SubDir", "A.txt"))));
            Assert.AreEqual(IndexBuildResults.Successful, indexBuilder.CreateIndex(new FileInfo(Path.Combine(MonitorFolder, "SubDir", "B.txt"))));
            Assert.AreEqual(3, indexBuilder.CodeIndexPool.SearchCode(new MatchAllDocsQuery()).Length);

            Assert.IsTrue(indexBuilder.DeleteIndex(Path.Combine(MonitorFolder, "SubDir")));

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

            Assert.AreEqual(1, results.Length, "Should not delete the index of SubDir.txt");
            Assert.AreEqual("SubDir.txt", results[0].FileName);
        }
        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);
        }
        public void TestGetCodeSourceFromDocument()
        {
            using var indexBuilder = new CodeIndexBuilder("ABC", new LucenePoolLight(TempCodeIndexDir), new LucenePoolLight(TempHintIndexDir), Log);
            var fileName = Path.Combine(MonitorFolder, "A.txt");

            File.AppendAllText(fileName, "ABCD ABCD");
            var fileInfo = new FileInfo(fileName);

            Thread.Sleep(1);

            Assert.AreEqual(IndexBuildResults.Successful, indexBuilder.CreateIndex(new FileInfo(fileName)));
            var codeSources = indexBuilder.CodeIndexPool.Search(new MatchAllDocsQuery(), 1).Select(CodeIndexBuilder.GetCodeSourceFromDocument).ToArray();

            Assert.AreEqual(1, codeSources.Length);
            Assert.AreEqual(fileName, codeSources[0].FilePath);
            Assert.AreEqual("A.txt", codeSources[0].FileName);
            Assert.AreEqual("txt", codeSources[0].FileExtension);
            Assert.AreEqual("ABCD ABCD", codeSources[0].Content);
            Assert.AreNotEqual(Guid.Empty, new Guid(codeSources[0].CodePK));
            Assert.AreEqual(fileInfo.LastWriteTimeUtc, codeSources[0].LastWriteTimeUtc);
            Assert.LessOrEqual(codeSources[0].LastWriteTimeUtc, codeSources[0].IndexDate);
        }