SearchTest.java revision 1072
308N/A/*
308N/A * CDDL HEADER START
308N/A *
308N/A * The contents of this file are subject to the terms of the
308N/A * Common Development and Distribution License (the "License").
308N/A * You may not use this file except in compliance with the License.
308N/A *
308N/A * See LICENSE.txt included in this distribution for the specific
308N/A * language governing permissions and limitations under the License.
308N/A *
308N/A * When distributing Covered Code, include this CDDL HEADER in each
308N/A * file and include the License file at LICENSE.txt.
308N/A * If applicable, add the following below this CDDL HEADER, with the
308N/A * fields enclosed by brackets "[]" replaced with your own identifying
308N/A * information: Portions Copyright [yyyy] [name of copyright owner]
308N/A *
308N/A * CDDL HEADER END
308N/A */
308N/A
308N/A/*
1062N/A * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
308N/A * Use is subject to license terms.
308N/A */
308N/Apackage org.opensolaris.opengrok.search;
308N/A
308N/Aimport java.io.ByteArrayOutputStream;
308N/Aimport java.io.File;
1178N/Aimport java.io.PrintStream;
308N/Aimport org.junit.After;
308N/Aimport org.junit.AfterClass;
308N/Aimport org.junit.Before;
308N/Aimport org.junit.BeforeClass;
308N/Aimport org.junit.Test;
308N/Aimport org.opensolaris.opengrok.configuration.RuntimeEnvironment;
308N/Aimport org.opensolaris.opengrok.index.Indexer;
308N/Aimport org.opensolaris.opengrok.index.IndexerTest;
308N/Aimport org.opensolaris.opengrok.util.TestRepository;
1190N/Aimport static org.junit.Assert.*;
308N/A
308N/A/**
308N/A * Basic testing of the Search class
308N/A *
1190N/A * @author Trond Norbye
308N/A */
308N/Apublic class SearchTest {
308N/A
308N/A static TestRepository repository;
308N/A static boolean skip = false;
308N/A static PrintStream err = System.err;
308N/A static File configFile;
308N/A
308N/A @BeforeClass
1062N/A public static void setUpClass() throws Exception {
308N/A repository = new TestRepository();
1178N/A repository.create(IndexerTest.class.getResourceAsStream("source.zip"));
308N/A
308N/A RuntimeEnvironment env = RuntimeEnvironment.getInstance();
308N/A env.setCtags(System.getProperty("org.opensolaris.opengrok.configuration.ctags", "ctags"));
308N/A env.setSourceRoot(repository.getSourceRoot());
308N/A env.setDataRoot(repository.getDataRoot());
308N/A
308N/A if (env.validateExuberantCtags()) {
308N/A env.setSourceRoot(repository.getSourceRoot());
308N/A env.setDataRoot(repository.getDataRoot());
308N/A env.setVerbose(false);
Indexer.getInstance().prepareIndexer(env, true, true, "/c", null, false, false, false, null, null);
Indexer.getInstance().doIndexerExecution(true, 1, null, null);
} else {
System.out.println("Skipping test. Could not find a ctags I could use in path.");
skip = true;
}
configFile = File.createTempFile("configuration", ".xml");
env.writeConfiguration(configFile);
RuntimeEnvironment.getInstance().readConfiguration(new File(configFile.getAbsolutePath()));
PrintStream stream = new PrintStream(new ByteArrayOutputStream());
System.setErr(stream);
}
@AfterClass
public static void tearDownClass() throws Exception {
System.setErr(err);
repository.destroy();
configFile.delete();
}
@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("Search for main~ in testdata sources",8, 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("Search for Main OR main in testdata sources",8, 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("search for main but not file",8, instance.results.size());
assertTrue(instance.parseCmdLine(new String[]{"-p", "main AND (file OR field)"}));
assertTrue(instance.search());
assertEquals(0, instance.results.size());
assertTrue(instance.parseCmdLine(new String[]{"-f", "opengrok && something || else"}));
assertTrue(instance.search());
assertEquals(4, instance.results.size());
assertTrue(instance.parseCmdLine(new String[]{"-f", "op*ng?ok"}));
assertTrue(instance.search());
assertEquals(3, instance.results.size());
assertTrue(instance.parseCmdLine(new String[]{"-f", "\"op*n g?ok\""}));
assertTrue(instance.search());
assertEquals(0, instance.results.size());
assertTrue(instance.parseCmdLine(new String[]{"-f", "title:[a TO b]"}));
assertTrue(instance.search());
assertEquals(0, instance.results.size());
assertTrue(instance.parseCmdLine(new String[]{"-f", "title:{a TO c}"}));
assertTrue(instance.search());
assertEquals(0, instance.results.size());
assertTrue(instance.parseCmdLine(new String[]{"-f", "\"contains some strange\""}));
assertTrue(instance.search());
assertEquals(1, instance.results.size());
RuntimeEnvironment.getInstance().setAllowLeadingWildcard(true);
assertTrue(instance.parseCmdLine(new String[]{"-p", "?akefile"}));
assertTrue(instance.search());
assertEquals(1, 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);
}
}