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