SearchTest.java revision 550
58N/A/*
58N/A * CDDL HEADER START
58N/A *
58N/A * The contents of this file are subject to the terms of the
58N/A * Common Development and Distribution License (the "License").
58N/A * You may not use this file except in compliance with the License.
58N/A *
58N/A * See LICENSE.txt included in this distribution for the specific
58N/A * language governing permissions and limitations under the License.
58N/A *
58N/A * When distributing Covered Code, include this CDDL HEADER in each
58N/A * file and include the License file at LICENSE.txt.
58N/A * If applicable, add the following below this CDDL HEADER, with the
58N/A * fields enclosed by brackets "[]" replaced with your own identifying
58N/A * information: Portions Copyright [yyyy] [name of copyright owner]
58N/A *
58N/A * CDDL HEADER END
58N/A */
58N/A
58N/A/*
58N/A * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
58N/A * Use is subject to license terms.
58N/A */
58N/Apackage org.opensolaris.opengrok.search;
58N/A
58N/Aimport java.io.ByteArrayOutputStream;
58N/Aimport java.io.File;
58N/Aimport java.io.PrintStream;
58N/Aimport org.junit.After;
58N/Aimport org.junit.AfterClass;
58N/Aimport org.junit.Before;
58N/Aimport org.junit.BeforeClass;
77N/Aimport org.junit.Test;
77N/Aimport org.opensolaris.opengrok.configuration.RuntimeEnvironment;
77N/Aimport org.opensolaris.opengrok.index.Indexer;
77N/Aimport org.opensolaris.opengrok.index.IndexerTest;
77N/Aimport org.opensolaris.opengrok.util.TestRepository;
58N/Aimport static org.junit.Assert.*;
58N/A
58N/A/**
58N/A * Basic testing of the Search class
58N/A *
58N/A * @author Trond Norbye
58N/A */
58N/Apublic class SearchTest {
58N/A
58N/A static TestRepository repository;
58N/A static boolean skip = false;
77N/A static PrintStream err = System.err;
58N/A static File configFile;
58N/A
58N/A @BeforeClass
58N/A public static void setUpClass() throws Exception {
58N/A repository = new TestRepository();
58N/A repository.create(IndexerTest.class.getResourceAsStream("source.zip"));
58N/A
58N/A RuntimeEnvironment env = RuntimeEnvironment.getInstance();
58N/A env.setCtags(System.getProperty("org.opensolaris.opengrok.configuration.ctags", "ctags"));
58N/A env.setSourceRoot(repository.getSourceRoot());
77N/A env.setDataRoot(repository.getDataRoot());
58N/A
58N/A if (env.validateExuberantCtags()) {
58N/A env.setSourceRoot(repository.getSourceRoot());
58N/A env.setDataRoot(repository.getDataRoot());
58N/A env.setVerbose(false);
58N/A Indexer.getInstance().prepareIndexer(env, true, true, "/c", null, false, false, false, null, null);
58N/A Indexer.getInstance().doIndexerExecution(true, 1, null, null);
58N/A } else {
58N/A System.out.println("Skipping test. Could not find a ctags I could use in path.");
58N/A skip = true;
58N/A }
58N/A
58N/A configFile = File.createTempFile("configuration", ".xml");
58N/A env.writeConfiguration(configFile);
58N/A
73N/A RuntimeEnvironment.getInstance().readConfiguration(new File(configFile.getAbsolutePath()));
58N/A PrintStream stream = new PrintStream(new ByteArrayOutputStream());
58N/A System.setErr(stream);
58N/A }
58N/A
77N/A @AfterClass
58N/A public static void tearDownClass() throws Exception {
58N/A System.setErr(err);
58N/A repository.destroy();
63N/A }
@Before
public void setUp() {
}
@After
public void tearDown() {
}
@Test
public void testParseCmdLine() {
if (skip) {
return;
}
Search instance = new Search();
assertTrue(instance.parseCmdLine(new String[] {}));
assertTrue(instance.parseCmdLine(new String[] {"-f", "foo"}));
assertTrue(instance.parseCmdLine(new String[] {"-r", "foo"}));
assertTrue(instance.parseCmdLine(new String[] {"-d", "foo"}));
assertTrue(instance.parseCmdLine(new String[] {"-h", "foo"}));
assertTrue(instance.parseCmdLine(new String[] {"-p", "foo"}));
assertTrue(instance.parseCmdLine(new String[] {"-R", configFile.getAbsolutePath()}));
assertFalse(instance.parseCmdLine(new String[] {"-f"}));
assertFalse(instance.parseCmdLine(new String[] {"-r"}));
assertFalse(instance.parseCmdLine(new String[] {"-d"}));
assertFalse(instance.parseCmdLine(new String[] {"-h"}));
assertFalse(instance.parseCmdLine(new String[] {"-p"}));
assertFalse(instance.parseCmdLine(new String[] {"-R"}));
assertFalse(instance.parseCmdLine(new String[] {"-R", "nonexisting-config-file"}));
assertTrue(instance.parseCmdLine(new String[] {
"-f", "foo",
"-r", "foo",
"-d", "foo",
"-d", "foo",
"-h", "foo",
"-p", "foo", "-R", configFile.getAbsolutePath()}));
}
/**
* Test of search method, of class Search.
*/
@Test
public void testSearch() {
if (skip) {
return;
}
Search instance = new Search();
assertFalse(instance.search());
assertTrue(instance.parseCmdLine(new String[] {"-p", "Makefile"}));
assertTrue(instance.search());
assertEquals(1, instance.results.size());
assertTrue(instance.parseCmdLine(new String[] {"-p", "main~"}));
assertTrue(instance.search());
assertEquals(6, instance.results.size());
assertTrue(instance.parseCmdLine(new String[] {"-p", "\"main troff\"~5"}));
assertTrue(instance.search());
assertEquals(0, instance.results.size());
assertTrue(instance.parseCmdLine(new String[] {"-p", "Main OR main"}));
assertTrue(instance.search());
assertEquals(6, instance.results.size());
assertTrue(instance.parseCmdLine(new String[] {"-p", "\"main file\""}));
assertTrue(instance.search());
assertEquals(0, instance.results.size());
assertTrue(instance.parseCmdLine(new String[] {"-p", "+main -file"}));
assertTrue(instance.search());
assertEquals(6, instance.results.size());
assertTrue(instance.parseCmdLine(new String[] {"-p", "main AND (file OR field)"}));
assertTrue(instance.search());
assertEquals(0, instance.results.size());
}
@Test
public void testSearchNotFound() {
if (skip) {
return;
}
Search instance = new Search();
assertTrue(instance.parseCmdLine(new String[] {"-p", "path_that_can't_be_found"}));
assertTrue(instance.search());
assertEquals(0, instance.results.size());
assertTrue(instance.parseCmdLine(new String[] {"-d", "definition_that_can't_be_found"}));
assertTrue(instance.search());
assertEquals(0, instance.results.size());
assertTrue(instance.parseCmdLine(new String[] {"-r", "reference_that_can't_be_found"}));
assertTrue(instance.search());
assertEquals(0, instance.results.size());
assertTrue(instance.parseCmdLine(new String[] {"-h", "history_that_can't_be_found"}));
assertTrue(instance.search());
assertEquals(0, instance.results.size());
assertTrue(instance.parseCmdLine(new String[] {"-f", "fulltext_that_can't_be_found"}));
assertTrue(instance.search());
assertEquals(0, instance.results.size());
}
@Test
public void testDumpResults() {
if (skip) {
return;
}
Search instance = new Search();
assertTrue(instance.parseCmdLine(new String[] {"-p", "Non-existing-makefile-Makefile"}));
assertTrue(instance.search());
assertEquals(0, instance.results.size());
instance.dumpResults();
assertTrue(instance.parseCmdLine(new String[] {"-p", "Makefile"}));
assertTrue(instance.search());
PrintStream out = System.out;
ByteArrayOutputStream array = new ByteArrayOutputStream();
System.setOut(new PrintStream(array));
instance.dumpResults();
System.out.flush();
assertTrue(array.toString().indexOf("Makefile: [...]") != -1);
System.setOut(out);
}
/**
* Test of main method, of class Search.
*/
@Test
public void testMain() {
if (skip) {
return;
}
PrintStream out = System.out;
ByteArrayOutputStream array = new ByteArrayOutputStream();
System.setOut(new PrintStream(array));
Search.main(new String[] {"-p", "Makefile"});
System.out.flush();
assertTrue(array.toString().indexOf("Makefile: [...]") != -1);
System.setOut(out);
}
}