/*
|
* Copyright 2012 gitblit.com.
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*/
|
package com.gitblit.tests;
|
|
import static org.junit.Assert.assertEquals;
|
|
import java.util.List;
|
|
import org.eclipse.jgit.lib.Repository;
|
import org.junit.Test;
|
|
import com.gitblit.models.SearchResult;
|
import com.gitblit.utils.LuceneUtils;
|
|
/**
|
* Tests Lucene indexing and querying.
|
*
|
* @author James Moger
|
*
|
*/
|
public class LuceneUtilsTest {
|
|
@Test
|
public void testFullIndex() throws Exception {
|
// reindex helloworld
|
Repository repository = GitBlitSuite.getHelloworldRepository();
|
LuceneUtils.reindex(repository);
|
repository.close();
|
|
// reindex theoretical physics
|
repository = GitBlitSuite.getTheoreticalPhysicsRepository();
|
LuceneUtils.reindex(repository);
|
repository.close();
|
|
// reindex JGit
|
repository = GitBlitSuite.getJGitRepository();
|
LuceneUtils.reindex(repository);
|
repository.close();
|
|
LuceneUtils.close();
|
}
|
|
@Test
|
public void testQuery() throws Exception {
|
// 2 occurrences on the master branch
|
Repository repository = GitBlitSuite.getHelloworldRepository();
|
List<SearchResult> results = LuceneUtils.search("ada", 10, repository);
|
assertEquals(2, results.size());
|
for (SearchResult res : results) {
|
assertEquals("refs/heads/master", res.branch);
|
}
|
|
// author test
|
results = LuceneUtils.search("author: tinogomes", 10, repository);
|
assertEquals(2, results.size());
|
|
repository.close();
|
// blob test
|
results = LuceneUtils.search("type: blob AND \"import std.stdio\"", 10, repository);
|
assertEquals(1, results.size());
|
assertEquals("d.D", results.get(0).id);
|
|
// 1 occurrence on the gh-pages branch
|
repository = GitBlitSuite.getTheoreticalPhysicsRepository();
|
results = LuceneUtils.search("\"add the .nojekyll file\"", 10, repository);
|
assertEquals(1, results.size());
|
assertEquals("Ondrej Certik", results.get(0).author);
|
assertEquals("2648c0c98f2101180715b4d432fc58d0e21a51d7", results.get(0).id);
|
assertEquals("refs/heads/gh-pages", results.get(0).branch);
|
|
// tag test
|
results = LuceneUtils.search("\"qft split\"", 10, repository);
|
assertEquals(1, results.size());
|
assertEquals("Ondrej Certik", results.get(0).author);
|
assertEquals("57c4f26f157ece24b02f4f10f5f68db1d2ce7ff5", results.get(0).id);
|
assertEquals("[1st-edition]", results.get(0).labels.toString());
|
|
results = LuceneUtils.search("type:blob AND \"src/intro.rst\"", 10, repository);
|
assertEquals(4, results.size());
|
|
// hash id tests
|
results = LuceneUtils.search("id:57c4f26f157ece24b02f4f10f5f68db1d2ce7ff5", 10, repository);
|
assertEquals(1, results.size());
|
|
results = LuceneUtils.search("id:57c4f26f157*", 10, repository);
|
assertEquals(1, results.size());
|
|
repository.close();
|
|
// annotated tag test
|
repository = GitBlitSuite.getJGitRepository();
|
results = LuceneUtils.search("I663208919f297836a9c16bf458e4a43ffaca4c12", 10, repository);
|
assertEquals(1, results.size());
|
assertEquals("[v1.3.0.201202151440-r]", results.get(0).labels.toString());
|
|
repository.close();
|
|
LuceneUtils.close();
|
}
|
|
@Test
|
public void testMultiSearch() throws Exception {
|
List<SearchResult> results = LuceneUtils.search("test", 10,
|
GitBlitSuite.getHelloworldRepository(),
|
GitBlitSuite.getJGitRepository());
|
LuceneUtils.close();
|
assertEquals(10, results.size());
|
}
|
}
|