/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.search.testsupport;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.core.KeywordAnalyzer;
import org.apache.lucene.analysis.core.SimpleAnalyzer;
import org.apache.lucene.analysis.core.StopAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.util.Version;
import org.hibernate.search.util.logging.impl.Log;
import org.hibernate.search.util.logging.impl.LoggerFactory;
/**
* Collects static constants used across several tests.
*
* @author Sanne Grinovero (C) 2011 Red Hat Inc.
*/
public final class TestConstants {
public static final Analyzer standardAnalyzer = new StandardAnalyzer();
public static final Analyzer stopAnalyzer = new StopAnalyzer();
public static final Analyzer simpleAnalyzer = new SimpleAnalyzer();
public static final Analyzer keywordAnalyzer = new KeywordAnalyzer();
private static final Log log = LoggerFactory.make();
private static final CallerProvider callerProvider = new CallerProvider();
private TestConstants() {
//not allowed
}
public static Version getTargetLuceneVersion() {
return Version.LATEST;
}
/**
* Returns a temporary directory for storing test data such as indexes etc. Specific tests should store their data
* in sub-directories. The returned directory will be deleted on graceful shut-down. The returned directory will be
* named like {@code $TEMP/hsearch-tests-<random>}.
*/
public static Path getTempTestDataDir() {
try {
Path tempTestDataDir = Files.createTempDirectory( "hsearch-tests-" );
tempTestDataDir.toFile().deleteOnExit();
return tempTestDataDir;
}
catch (IOException e) {
throw new RuntimeException( "Could not create temporary directory for tests", e );
}
}
/**
* Doing the same as {@link #getIndexDirectory(Path, Class)}, using the immediate caller class as requester.
*/
public static String getIndexDirectory(Path parent) {
return getIndexDirectory( parent, callerProvider.getCallerClass() );
}
/**
* Return the root directory to store test indexes in. Tests should never use or delete this directly but rather
* nest sub directories in it to avoid interferences across tests.
*
* @param requester The test class requesting the index directory, its name will be part of the returned directory
* @return Return the root directory to store test indexes
*/
public static String getIndexDirectory(Path parent, Class<?> requester) {
Path indexDirPath = parent.resolve( "indextemp-" + requester.getSimpleName() );
indexDirPath.toFile().deleteOnExit();
String indexDir = indexDirPath.toAbsolutePath().toString();
log.debugf( "Using %s as index directory.", indexDir );
return indexDir;
}
public static boolean arePerformanceTestsEnabled() {
return Boolean.getBoolean( "org.hibernate.search.enable_performance_tests" );
}
private static class CallerProvider extends SecurityManager {
public Class<?> getCallerClass() {
return getClassContext()[2];
}
}
}