/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * See LICENSE.txt included in this distribution for the specific * language governing permissions and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at LICENSE.txt. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. */ package org.opensolaris.opengrok.search; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.PrintStream; import java.util.ArrayList; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.opensolaris.opengrok.configuration.Configuration; import org.opensolaris.opengrok.configuration.RuntimeEnvironment; import org.opensolaris.opengrok.index.Indexer; import org.opensolaris.opengrok.index.IndexerTest; import org.opensolaris.opengrok.util.TestRepository; /** * Basic testing of the Search class * * @author Trond Norbye */ public class SearchTest { static TestRepository repository; static boolean skip = false; static PrintStream err = System.err; static File configFile; @SuppressWarnings("javadoc") @BeforeClass public static void setUpClass() throws Exception { repository = new TestRepository(); repository.create(IndexerTest.class.getResourceAsStream("source.zip")); Configuration cfg = RuntimeEnvironment.getConfig(); cfg.setCtags(System.getProperty(Configuration.CTAGS_CMD_PROPERTY_KEY, Configuration.CTAGS_CMD_FALLBACK)); cfg.setSourceRoot(repository.getSourceRoot()); cfg.setDataRoot(repository.getDataRoot()); if (RuntimeEnvironment.validateExuberantCtags()) { cfg.setSourceRoot(repository.getSourceRoot()); cfg.setDataRoot(repository.getDataRoot()); cfg.setVerbose(false); Indexer.prepareIndexer(true, true, "/c", null, false, false, false, null, null, new ArrayList(), false); Indexer.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"); RuntimeEnvironment.writeConfig(configFile); RuntimeEnvironment.readConfig(new File(configFile.getAbsolutePath())); PrintStream stream = new PrintStream(new ByteArrayOutputStream()); System.setErr(stream); } @SuppressWarnings("javadoc") @AfterClass public static void tearDownClass() { System.setErr(err); repository.destroy(); configFile.delete(); } @SuppressWarnings({ "static-method", "javadoc" }) @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. */ @SuppressWarnings("static-method") @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(6, instance.results.size()); assertTrue(instance.parseCmdLine(new String[]{"-f", "op*ng?ok"})); assertTrue(instance.search()); assertEquals(5, 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.getConfig().setAllowLeadingWildcard(true); assertTrue(instance.parseCmdLine(new String[]{"-p", "?akefile"})); assertTrue(instance.search()); assertEquals(1, instance.results.size()); } @SuppressWarnings({ "static-method", "javadoc" }) @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()); } @SuppressWarnings({ "static-method", "javadoc" }) @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. */ @SuppressWarnings("static-method") @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); } }