SearchEngineTest.java revision 736
e07d9cb85217949d497b02d7211de8a197d2f2ebzf/*
1a932f2eab9b00d713acc4205d96ca2485bf2712Quaker Fang * CDDL HEADER START
e07d9cb85217949d497b02d7211de8a197d2f2ebzf *
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * The contents of this file are subject to the terms of the
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * Common Development and Distribution License (the "License").
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * You may not use this file except in compliance with the License.
e07d9cb85217949d497b02d7211de8a197d2f2ebzf *
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * See LICENSE.txt included in this distribution for the specific
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * language governing permissions and limitations under the License.
e07d9cb85217949d497b02d7211de8a197d2f2ebzf *
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * When distributing Covered Code, include this CDDL HEADER in each
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * file and include the License file at LICENSE.txt.
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * If applicable, add the following below this CDDL HEADER, with the
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * fields enclosed by brackets "[]" replaced with your own identifying
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * information: Portions Copyright [yyyy] [name of copyright owner]
e07d9cb85217949d497b02d7211de8a197d2f2ebzf *
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * CDDL HEADER END
e07d9cb85217949d497b02d7211de8a197d2f2ebzf */
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf/*
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * Use is subject to license terms.
e07d9cb85217949d497b02d7211de8a197d2f2ebzf */
e07d9cb85217949d497b02d7211de8a197d2f2ebzfpackage org.opensolaris.opengrok.search;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzfimport java.io.File;
e07d9cb85217949d497b02d7211de8a197d2f2ebzfimport java.util.ArrayList;
e07d9cb85217949d497b02d7211de8a197d2f2ebzfimport java.util.List;
e07d9cb85217949d497b02d7211de8a197d2f2ebzfimport org.junit.After;
e07d9cb85217949d497b02d7211de8a197d2f2ebzfimport org.junit.AfterClass;
e07d9cb85217949d497b02d7211de8a197d2f2ebzfimport org.junit.Before;
1a932f2eab9b00d713acc4205d96ca2485bf2712Quaker Fangimport org.junit.BeforeClass;
e07d9cb85217949d497b02d7211de8a197d2f2ebzfimport org.junit.Test;
e07d9cb85217949d497b02d7211de8a197d2f2ebzfimport org.opensolaris.opengrok.configuration.RuntimeEnvironment;
e07d9cb85217949d497b02d7211de8a197d2f2ebzfimport org.opensolaris.opengrok.history.HistoryGuru;
e07d9cb85217949d497b02d7211de8a197d2f2ebzfimport org.opensolaris.opengrok.index.Indexer;
e07d9cb85217949d497b02d7211de8a197d2f2ebzfimport org.opensolaris.opengrok.index.IndexerTest;
e07d9cb85217949d497b02d7211de8a197d2f2ebzfimport org.opensolaris.opengrok.util.TestRepository;
e07d9cb85217949d497b02d7211de8a197d2f2ebzfimport static org.junit.Assert.*;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng/**
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * Do basic testing of the SearchEngine
e07d9cb85217949d497b02d7211de8a197d2f2ebzf *
e07d9cb85217949d497b02d7211de8a197d2f2ebzf * @author Trond Norbye
e07d9cb85217949d497b02d7211de8a197d2f2ebzf */
e07d9cb85217949d497b02d7211de8a197d2f2ebzfpublic class SearchEngineTest {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf static TestRepository repository;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf static boolean skip = false;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf static File configFile;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf @BeforeClass
e07d9cb85217949d497b02d7211de8a197d2f2ebzf public static void setUpClass() throws Exception {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf repository = new TestRepository();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf repository.create(HistoryGuru.class.getResourceAsStream("repositories.zip"));
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf RuntimeEnvironment env = RuntimeEnvironment.getInstance();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf env.setCtags(System.getProperty("org.opensolaris.opengrok.configuration.ctags", "ctags"));
e07d9cb85217949d497b02d7211de8a197d2f2ebzf env.setSourceRoot(repository.getSourceRoot());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf env.setDataRoot(repository.getDataRoot());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf if (env.validateExuberantCtags()) {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf env.setSourceRoot(repository.getSourceRoot());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf env.setDataRoot(repository.getDataRoot());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf env.setVerbose(false);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf Indexer.getInstance().prepareIndexer(env, true, true, "/c", null, false, false, false, null, null);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf Indexer.getInstance().doIndexerExecution(true, 1, null, null);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf } else {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf System.out.println("Skipping test. Could not find a ctags I could use in path.");
e07d9cb85217949d497b02d7211de8a197d2f2ebzf skip = true;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf configFile = File.createTempFile("configuration", ".xml");
e07d9cb85217949d497b02d7211de8a197d2f2ebzf env.writeConfiguration(configFile);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf RuntimeEnvironment.getInstance().readConfiguration(new File(configFile.getAbsolutePath()));
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf @AfterClass
e07d9cb85217949d497b02d7211de8a197d2f2ebzf public static void tearDownClass() throws Exception {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf repository.destroy();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf configFile.delete();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf @Before
e07d9cb85217949d497b02d7211de8a197d2f2ebzf public void setUp() {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf @After
e07d9cb85217949d497b02d7211de8a197d2f2ebzf public void tearDown() {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf @Test
e07d9cb85217949d497b02d7211de8a197d2f2ebzf public void testIsValidQuery() {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf SearchEngine instance = new SearchEngine();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertFalse(instance.isValidQuery());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf instance.setFile("foo");
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertTrue(instance.isValidQuery());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf @Test
e07d9cb85217949d497b02d7211de8a197d2f2ebzf public void testDefinition() {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf SearchEngine instance = new SearchEngine();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertNull(instance.getDefinition());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf String defs = "This is a definition";
e07d9cb85217949d497b02d7211de8a197d2f2ebzf instance.setDefinition(defs);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertEquals(defs, instance.getDefinition());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf @Test
e07d9cb85217949d497b02d7211de8a197d2f2ebzf public void testFile() {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf SearchEngine instance = new SearchEngine();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertNull(instance.getFile());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf String file = "This is a File";
e07d9cb85217949d497b02d7211de8a197d2f2ebzf instance.setFile(file);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertEquals(file, instance.getFile());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf @Test
e07d9cb85217949d497b02d7211de8a197d2f2ebzf public void testFreetext() {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf SearchEngine instance = new SearchEngine();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertNull(instance.getFreetext());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf String freetext = "This is just a piece of text";
e07d9cb85217949d497b02d7211de8a197d2f2ebzf instance.setFreetext(freetext);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertEquals(freetext, instance.getFreetext());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
020c47705d28102a8df83a43ddf08e34dde21f22ql @Test
e07d9cb85217949d497b02d7211de8a197d2f2ebzf public void testHistory() {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf SearchEngine instance = new SearchEngine();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertNull(instance.getHistory());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf String hist = "This is a piece of history";
e07d9cb85217949d497b02d7211de8a197d2f2ebzf instance.setHistory(hist);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertEquals(hist, instance.getHistory());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf @Test
e07d9cb85217949d497b02d7211de8a197d2f2ebzf public void testSymbol() {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf SearchEngine instance = new SearchEngine();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertNull(instance.getSymbol());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf String sym = "This is a symbol";
e07d9cb85217949d497b02d7211de8a197d2f2ebzf instance.setSymbol(sym);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertEquals(sym, instance.getSymbol());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
5644143a6cf1e70bc2e78d5140970830aae0e8cdQuaker Fang
e07d9cb85217949d497b02d7211de8a197d2f2ebzf @Test
e07d9cb85217949d497b02d7211de8a197d2f2ebzf public void testGetQuery() throws Exception {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf SearchEngine instance = new SearchEngine();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf instance.setHistory("Once upon a time");
e07d9cb85217949d497b02d7211de8a197d2f2ebzf instance.setFile("Makefile");
5644143a6cf1e70bc2e78d5140970830aae0e8cdQuaker Fang instance.setDefinition("std::string");
e07d9cb85217949d497b02d7211de8a197d2f2ebzf instance.setSymbol("toString");
e07d9cb85217949d497b02d7211de8a197d2f2ebzf instance.setFreetext("OpenGrok");
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertTrue(instance.isValidQuery());
fe3e6e3a98f98e7ab1a751934c0116fb914b9c82Quaker Fang assertEquals("+full:opengrok +defs:\"std string\" +refs:toString +path:makefile +(+hist:once +hist:upon +hist:time)",
e07d9cb85217949d497b02d7211de8a197d2f2ebzf instance.getQuery());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf @Test
e07d9cb85217949d497b02d7211de8a197d2f2ebzf public void testSearch() {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf if (skip) {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf return;
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf List<Hit> hits = new ArrayList<Hit>();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf SearchEngine instance = new SearchEngine();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf instance.setHistory("\"Add lint make target and fix lint warnings\"");
e07d9cb85217949d497b02d7211de8a197d2f2ebzf int noHits = instance.search();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf if (noHits > 0) {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf instance.more(0, noHits, hits);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertEquals(noHits, hits.size());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
5644143a6cf1e70bc2e78d5140970830aae0e8cdQuaker Fang
5644143a6cf1e70bc2e78d5140970830aae0e8cdQuaker Fang instance = new SearchEngine();
5644143a6cf1e70bc2e78d5140970830aae0e8cdQuaker Fang instance.setSymbol("printf");
afdda45f890ee5dfc86e5131a30b11b354d51633Vasumathi Sundaram - Sun Microsystems instance.setFile("main.c");
e07d9cb85217949d497b02d7211de8a197d2f2ebzf noHits = instance.search();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertEquals(8, noHits);
5644143a6cf1e70bc2e78d5140970830aae0e8cdQuaker Fang hits.clear();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf instance.more(0, noHits, hits);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf for (Hit hit : hits) {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertEquals("main.c", hit.getFilename());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertEquals(1, 1);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf instance.setFile("main.c OR Makefile");
e07d9cb85217949d497b02d7211de8a197d2f2ebzf noHits = instance.search();
5644143a6cf1e70bc2e78d5140970830aae0e8cdQuaker Fang assertEquals(8, noHits);
5644143a6cf1e70bc2e78d5140970830aae0e8cdQuaker Fang
5644143a6cf1e70bc2e78d5140970830aae0e8cdQuaker Fang instance = new SearchEngine();
5644143a6cf1e70bc2e78d5140970830aae0e8cdQuaker Fang instance.setFreetext("arguments");
5644143a6cf1e70bc2e78d5140970830aae0e8cdQuaker Fang instance.setFile("main.c");
e07d9cb85217949d497b02d7211de8a197d2f2ebzf noHits = instance.search();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf hits.clear();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf instance.more(0, noHits, hits);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf for (Hit hit : hits) {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertEquals("main.c", hit.getFilename());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf if (hit.getLine().indexOf("arguments") == -1) {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf fail("got an incorrect match: " + hit.getLine());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertEquals(8, noHits);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf
e07d9cb85217949d497b02d7211de8a197d2f2ebzf instance = new SearchEngine();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf instance.setDefinition("main");
e07d9cb85217949d497b02d7211de8a197d2f2ebzf instance.setFile("main.c");
e07d9cb85217949d497b02d7211de8a197d2f2ebzf noHits = instance.search();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf hits.clear();
e07d9cb85217949d497b02d7211de8a197d2f2ebzf instance.more(0, noHits, hits);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf for (Hit hit : hits) {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertEquals("main.c", hit.getFilename());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf if (hit.getLine().indexOf("main") == -1) {
e07d9cb85217949d497b02d7211de8a197d2f2ebzf fail("got an incorrect match: " + hit.getLine());
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf assertEquals(8, noHits);
e07d9cb85217949d497b02d7211de8a197d2f2ebzf }
e07d9cb85217949d497b02d7211de8a197d2f2ebzf}
e07d9cb85217949d497b02d7211de8a197d2f2ebzf