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