org.apache.lucene.util

## Class TestUtil

- java.lang.Object
- - org.apache.lucene.util.TestUtil

    public final class TestUtil
    extends Object

General utility methods for Lucene unit tests.

### Field Summary

Fields
`static Comparator<CharSequence>` `STRING_CODEPOINT_COMPARATOR` A comparator that compares UTF-16 strings / char sequences according to Unicode code point order.

### Method Summary

All Methods Static Methods Concrete Methods
`static void` `addIndexesSlowly(IndexWriter writer, DirectoryReader... readers)`
`static Codec` `alwaysDocValuesFormat(DocValuesFormat format)` Return a Codec that can read any of the default codecs and formats, but always writes in the specified format.
`static Codec` `alwaysPostingsFormat(PostingsFormat format)` Return a Codec that can read any of the default codecs and formats, but always writes in the specified format.
`static boolean` `anyFilesExceptWriteLock(Directory dir)`
`static <T> void` `assertAttributeReflection(AttributeImpl att, Map<String,T> reflectedValues)` Checks some basic behaviour of an AttributeImpl
`static void` `assertConsistent(TopDocs expected, TopDocs actual)` Assert that the given `TopDocs` have the same top docs and consistent hit counts.
`static String` `bytesRefToString(BytesRef br)` For debugging: tries to include br.utf8ToString(), but if that fails (because it's not valid utf8, which is fine!), just use ordinary toString.
`static CharSequence` `bytesToCharSequence(BytesRef ref, Random random)`
`static CheckIndex.Status` `checkIndex(Directory dir)` This runs the CheckIndex tool on the index in.
`static CheckIndex.Status` `checkIndex(Directory dir, boolean doSlowChecks)`
`static CheckIndex.Status` `checkIndex(Directory dir, boolean doSlowChecks, boolean failFast, ByteArrayOutputStream output)` If failFast is true, then throw the first exception when index corruption is hit, instead of moving on to other fields/segments to look for any other corruption.
`static <T> void` `checkIterator(Iterator<T> iterator)` Checks that the provided iterator is well-formed.
`static <T> void` `checkIterator(Iterator<T> iterator, long expectedSize, boolean allowNull)` Checks that the provided iterator is well-formed.
`static void` `checkReader(IndexReader reader)` This runs the CheckIndex tool on the Reader.
`static void` `checkReader(LeafReader reader, boolean doSlowChecks)`
`static <T> void` `checkReadOnly(Collection<T> coll)` Checks that the provided collection is read-only.
`static Document` `cloneDocument(Document doc1)`
`static boolean` `disableVirusChecker(Directory in)` Returns true if VirusCheckingFS is in use and was in fact already enabled
`static PostingsEnum` `docs(Random random, IndexReader r, String field, BytesRef term, PostingsEnum reuse, int flags)`
`static PostingsEnum` `docs(Random random, TermsEnum termsEnum, PostingsEnum reuse, int flags)`
`static void` `enableVirusChecker(Directory in)`
`static boolean` `fieldSupportsHugeBinaryDocValues(String field)`
`static Codec` `getDefaultCodec()` Returns the actual default codec (e.g.
`static DocValuesFormat` `getDefaultDocValuesFormat()` Returns the actual default docvalues format (e.g.
`static PostingsFormat` `getDefaultPostingsFormat()` Returns the actual default postings format (e.g.
`static PostingsFormat` `getDefaultPostingsFormat(int minItemsPerBlock, int maxItemsPerBlock, BlockTreeTermsReader.FSTLoadMode fstLoadMode)` Returns the actual default postings format (e.g.
`static String` `getDocValuesFormat(Codec codec, String field)`
`static String` `getDocValuesFormat(String field)`
`static String` `getPostingsFormat(Codec codec, String field)`
`static String` `getPostingsFormat(String field)`
`static PostingsFormat` `getPostingsFormatWithOrds(Random r)` Returns a random postings format that supports term ordinals
`static boolean` `hasVirusChecker(Directory dir)`
`static boolean` `hasVirusChecker(Path path)`
`static boolean` `hasWindowsFS(Directory dir)`
`static boolean` `hasWindowsFS(Path path)`
`static BigInteger` `nextBigInteger(Random random, int maxBytes)` Returns a randomish big integer with {@code 1 ..
`static int` `nextInt(Random r, int start, int end)` start and end are BOTH inclusive
`static long` `nextLong(Random r, long start, long end)` start and end are BOTH inclusive
`static RAMDirectory` `ramCopyOf(Directory dir)` Returns a copy of directory, entirely in RAM
`static String` `randomAnalysisString(Random random, int maxLength, boolean simple)`
`static BytesRef` `randomBinaryTerm(Random r)` Returns a random binary term.
`static String` `randomFixedByteLengthUnicodeString(Random r, int length)` Returns random string, with a given UTF-8 byte length
`static void` `randomFixedLengthUnicodeString(Random random, char[] chars, int offset, int length)` Fills provided char[] with valid random unicode code unit sequence.
`static String` `randomHtmlishString(Random random, int numElements)`
`static String` `randomlyRecaseCodePoints(Random random, String str)` Randomly upcases, downcases, or leaves intact each code point in the given string
`static Pattern` `randomPattern(Random random)` Returns a valid (compiling) Pattern instance with random stuff inside.
`static String` `randomRealisticUnicodeString(Random r)` Returns random string of length between 0-20 codepoints, all codepoints within the same unicode block.
`static String` `randomRealisticUnicodeString(Random r, int maxLength)` Returns random string of length up to maxLength codepoints , all codepoints within the same unicode block.
`static String` `randomRealisticUnicodeString(Random r, int minLength, int maxLength)` Returns random string of length between min and max codepoints, all codepoints within the same unicode block.
`static String` `randomRegexpishString(Random r)` Returns a String thats "regexpish" (contains lots of operators typically found in regular expressions) If you call this enough times, you might get a valid regex!
`static String` `randomRegexpishString(Random r, int maxLength)` Returns a String thats "regexpish" (contains lots of operators typically found in regular expressions) If you call this enough times, you might get a valid regex!
`static String` `randomSimpleString(Random r)`
`static String` `randomSimpleString(Random r, int maxLength)`
`static String` `randomSimpleString(Random r, int minLength, int maxLength)`
`static String` `randomSimpleStringRange(Random r, char minChar, char maxChar, int maxLength)`
`static String` `randomSubString(Random random, int wordLength, boolean simple)`
`static String` `randomUnicodeString(Random r)` Returns random string, including full unicode range.
`static String` `randomUnicodeString(Random r, int maxLength)` Returns a random string up to a certain length.
`static void` `reduceOpenFiles(IndexWriter w)` just tries to configure things to keep the open file count lowish
`static void` `shutdownExecutorService(ExecutorService ex)` Shutdown `ExecutorService` and wait for its.
`static CharSequence` `stringToCharSequence(String string, Random random)`
`static void` `syncConcurrentMerges(IndexWriter writer)`
`static void` `syncConcurrentMerges(MergeScheduler ms)`
`static void` `unzip(InputStream in, Path destDir)` Convenience method unzipping zipName into destDir.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### STRING_CODEPOINT_COMPARATOR

    public static final Comparator<CharSequence> STRING_CODEPOINT_COMPARATOR

A comparator that compares UTF-16 strings / char sequences according to Unicode code point order. This can be used to verify `BytesRef` order.

Warning: This comparator is rather inefficient, because it converts the strings to a `int[]` array on each invocation.

### Method Detail

#### unzip

    public static void unzip(InputStream in,
                             Path destDir)
                      throws IOException

Convenience method unzipping zipName into destDir. You must pass it a clean destDir. Closes the given InputStream after extracting!

Throws:
  `IOException`

#### checkIterator

    public static <T> void checkIterator(Iterator<T> iterator,
                                         long expectedSize,
                                         boolean allowNull)

Checks that the provided iterator is well-formed.

- is read-only: does not allow `remove`
- returns `expectedSize` number of elements
- does not return null elements, unless `allowNull` is true.
- throws NoSuchElementException if `next` is called after `hasNext` returns false.

#### checkIterator

    public static <T> void checkIterator(Iterator<T> iterator)

Checks that the provided iterator is well-formed.

- is read-only: does not allow `remove`
- does not return null elements.
- throws NoSuchElementException if `next` is called after `hasNext` returns false.

#### checkReadOnly

    public static <T> void checkReadOnly(Collection<T> coll)

Checks that the provided collection is read-only.

See Also:
  `checkIterator(Iterator)`

#### syncConcurrentMerges

    public static void syncConcurrentMerges(IndexWriter writer)

#### syncConcurrentMerges

    public static void syncConcurrentMerges(MergeScheduler ms)

#### checkIndex

    public static CheckIndex.Status checkIndex(Directory dir)
                                        throws IOException

This runs the CheckIndex tool on the index in. If any issues are hit, a RuntimeException is thrown; else, true is returned.

Throws:
  `IOException`

#### checkIndex

    public static CheckIndex.Status checkIndex(Directory dir,
                                               boolean doSlowChecks)
                                        throws IOException

Throws:
  `IOException`

#### checkIndex

    public static CheckIndex.Status checkIndex(Directory dir,
                                               boolean doSlowChecks,
                                               boolean failFast,
                                               ByteArrayOutputStream output)
                                        throws IOException

If failFast is true, then throw the first exception when index corruption is hit, instead of moving on to other fields/segments to look for any other corruption.

Throws:
  `IOException`

#### checkReader

    public static void checkReader(IndexReader reader)
                            throws IOException

This runs the CheckIndex tool on the Reader. If any issues are hit, a RuntimeException is thrown

Throws:
  `IOException`

#### checkReader

    public static void checkReader(LeafReader reader,
                                   boolean doSlowChecks)
                            throws IOException

Throws:
  `IOException`

#### nextInt

    public static int nextInt(Random r,
                              int start,
                              int end)

start and end are BOTH inclusive

#### nextLong

    public static long nextLong(Random r,
                                long start,
                                long end)

start and end are BOTH inclusive

#### nextBigInteger

    public static BigInteger nextBigInteger(Random random,
                                            int maxBytes)

Returns a randomish big integer with `1 .. maxBytes` storage.

#### randomSimpleString

    public static String randomSimpleString(Random r,
                                            int maxLength)

#### randomSimpleString

    public static String randomSimpleString(Random r,
                                            int minLength,
                                            int maxLength)

#### randomSimpleStringRange

    public static String randomSimpleStringRange(Random r,
                                                 char minChar,
                                                 char maxChar,
                                                 int maxLength)

#### randomSimpleString

    public static String randomSimpleString(Random r)

#### randomUnicodeString

    public static String randomUnicodeString(Random r)

Returns random string, including full unicode range.

#### randomUnicodeString

    public static String randomUnicodeString(Random r,
                                             int maxLength)

Returns a random string up to a certain length.

#### randomFixedLengthUnicodeString

    public static void randomFixedLengthUnicodeString(Random random,
                                                      char[] chars,
                                                      int offset,
                                                      int length)

Fills provided char[] with valid random unicode code unit sequence.

#### randomRegexpishString

    public static String randomRegexpishString(Random r)

Returns a String thats "regexpish" (contains lots of operators typically found in regular expressions) If you call this enough times, you might get a valid regex!

#### randomRegexpishString

    public static String randomRegexpishString(Random r,
                                               int maxLength)

Returns a String thats "regexpish" (contains lots of operators typically found in regular expressions) If you call this enough times, you might get a valid regex!

Note: to avoid practically endless backtracking patterns we replace asterisk and plus operators with bounded repetitions. See LUCENE-4111 for more info.

Parameters:
  `maxLength` - A hint about maximum length of the regexpish string. It may be exceeded by a few characters.

#### randomHtmlishString

    public static String randomHtmlishString(Random random,
                                             int numElements)

#### randomlyRecaseCodePoints

    public static String randomlyRecaseCodePoints(Random random,
                                                  String str)

Randomly upcases, downcases, or leaves intact each code point in the given string

#### randomRealisticUnicodeString

    public static String randomRealisticUnicodeString(Random r)

Returns random string of length between 0-20 codepoints, all codepoints within the same unicode block.

#### randomRealisticUnicodeString

    public static String randomRealisticUnicodeString(Random r,
                                                      int maxLength)

Returns random string of length up to maxLength codepoints , all codepoints within the same unicode block.

#### randomRealisticUnicodeString

    public static String randomRealisticUnicodeString(Random r,
                                                      int minLength,
                                                      int maxLength)

Returns random string of length between min and max codepoints, all codepoints within the same unicode block.

#### randomFixedByteLengthUnicodeString

    public static String randomFixedByteLengthUnicodeString(Random r,
                                                            int length)

Returns random string, with a given UTF-8 byte length

#### randomBinaryTerm

    public static BytesRef randomBinaryTerm(Random r)

Returns a random binary term.

#### alwaysPostingsFormat

    public static Codec alwaysPostingsFormat(PostingsFormat format)

Return a Codec that can read any of the default codecs and formats, but always writes in the specified format.

#### alwaysDocValuesFormat

    public static Codec alwaysDocValuesFormat(DocValuesFormat format)

Return a Codec that can read any of the default codecs and formats, but always writes in the specified format.

#### getDefaultCodec

    public static Codec getDefaultCodec()

Returns the actual default codec (e.g. LuceneMNCodec) for this version of Lucene. This may be different than `Codec.getDefault()` because that is randomized.

#### getDefaultPostingsFormat

    public static PostingsFormat getDefaultPostingsFormat()

Returns the actual default postings format (e.g. LuceneMNPostingsFormat for this version of Lucene.

#### getDefaultPostingsFormat

    public static PostingsFormat getDefaultPostingsFormat(int minItemsPerBlock,
                                                          int maxItemsPerBlock,
                                                          BlockTreeTermsReader.FSTLoadMode fstLoadMode)

Returns the actual default postings format (e.g. LuceneMNPostingsFormat for this version of Lucene.

NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
  this may disappear at any time

#### getPostingsFormatWithOrds

    public static PostingsFormat getPostingsFormatWithOrds(Random r)

Returns a random postings format that supports term ordinals

#### getDefaultDocValuesFormat

    public static DocValuesFormat getDefaultDocValuesFormat()

Returns the actual default docvalues format (e.g. LuceneMNDocValuesFormat for this version of Lucene.

#### getPostingsFormat

    public static String getPostingsFormat(String field)

#### getPostingsFormat

    public static String getPostingsFormat(Codec codec,
                                           String field)

#### getDocValuesFormat

    public static String getDocValuesFormat(String field)

#### getDocValuesFormat

    public static String getDocValuesFormat(Codec codec,
                                            String field)

#### fieldSupportsHugeBinaryDocValues

    public static boolean fieldSupportsHugeBinaryDocValues(String field)

#### anyFilesExceptWriteLock

    public static boolean anyFilesExceptWriteLock(Directory dir)
                                           throws IOException

Throws:
  `IOException`

#### addIndexesSlowly

    public static void addIndexesSlowly(IndexWriter writer,
                                        DirectoryReader... readers)
                                 throws IOException

Throws:
  `IOException`

#### reduceOpenFiles

    public static void reduceOpenFiles(IndexWriter w)

just tries to configure things to keep the open file count lowish

#### assertAttributeReflection

    public static <T> void assertAttributeReflection(AttributeImpl att,
                                                     Map<String,T> reflectedValues)

Checks some basic behaviour of an AttributeImpl

Parameters:
  `reflectedValues` - contains a map with "AttributeClass#key" as values

#### assertConsistent

    public static void assertConsistent(TopDocs expected,
                                        TopDocs actual)

Assert that the given `TopDocs` have the same top docs and consistent hit counts.

#### cloneDocument

    public static Document cloneDocument(Document doc1)

#### docs

    public static PostingsEnum docs(Random random,
                                    IndexReader r,
                                    String field,
                                    BytesRef term,
                                    PostingsEnum reuse,
                                    int flags)
                             throws IOException

Throws:
  `IOException`

#### docs

    public static PostingsEnum docs(Random random,
                                    TermsEnum termsEnum,
                                    PostingsEnum reuse,
                                    int flags)
                             throws IOException

Throws:
  `IOException`

#### stringToCharSequence

    public static CharSequence stringToCharSequence(String string,
                                                    Random random)

#### bytesToCharSequence

    public static CharSequence bytesToCharSequence(BytesRef ref,
                                                   Random random)

#### shutdownExecutorService

    public static void shutdownExecutorService(ExecutorService ex)

Shutdown `ExecutorService` and wait for its.

#### randomPattern

    public static Pattern randomPattern(Random random)

Returns a valid (compiling) Pattern instance with random stuff inside. Be careful when applying random patterns to longer strings as certain types of patterns may explode into exponential times in backtracking implementations (such as Java's).

#### randomAnalysisString

    public static String randomAnalysisString(Random random,
                                              int maxLength,
                                              boolean simple)

#### randomSubString

    public static String randomSubString(Random random,
                                         int wordLength,
                                         boolean simple)

#### bytesRefToString

    public static String bytesRefToString(BytesRef br)

For debugging: tries to include br.utf8ToString(), but if that fails (because it's not valid utf8, which is fine!), just use ordinary toString.

#### ramCopyOf

    public static RAMDirectory ramCopyOf(Directory dir)
                                  throws IOException

Returns a copy of directory, entirely in RAM

Throws:
  `IOException`

#### hasWindowsFS

    public static boolean hasWindowsFS(Directory dir)

#### hasWindowsFS

    public static boolean hasWindowsFS(Path path)

#### hasVirusChecker

    public static boolean hasVirusChecker(Directory dir)

#### hasVirusChecker

    public static boolean hasVirusChecker(Path path)

#### disableVirusChecker

    public static boolean disableVirusChecker(Directory in)

Returns true if VirusCheckingFS is in use and was in fact already enabled

#### enableVirusChecker

    public static void enableVirusChecker(Directory in)