You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2016/02/24 07:12:12 UTC

[05/53] [abbrv] lucene-solr git commit: LUCENE-7037: Switch all exceptions tests to expectThrows()

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/189e985b/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java b/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java
index a20edae..44b5b75 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java
@@ -102,12 +102,10 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     // Index doc values are single-valued so we should not
     // be able to add same field more than once:
     doc.add(f);
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       w.addDocument(doc);
       fail("didn't hit expected exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
+    });
 
     DirectoryReader r = w.getReader();
     w.close();
@@ -126,12 +124,9 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     // Index doc values are single-valued so we should not
     // be able to add same field more than once:
     doc.add(new BinaryDocValuesField("field", new BytesRef("blah")));
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       w.addDocument(doc);
-      fail("didn't hit expected exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
+    });
 
     DirectoryReader r = w.getReader();
     w.close();
@@ -150,12 +145,10 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     // Index doc values are single-valued so we should not
     // be able to add same field more than once:
     doc.add(new SortedDocValuesField("field", new BytesRef("hello")));
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       w.addDocument(doc);
-      fail("didn't hit expected exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
+    });
+
     DirectoryReader r = w.getReader();
     assertEquals(17, getOnlySegmentReader(r).getNumericDocValues("field").get(0));
     r.close();
@@ -232,12 +225,10 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     Document doc = new Document();
     doc.add(new NumericDocValuesField("foo", 0));
     doc.add(new SortedDocValuesField("foo", new BytesRef("hello")));
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       w.addDocument(doc);
-      fail("didn't hit expected exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
+    });
+
     IndexReader ir = w.getReader();
     assertEquals(1, ir.numDocs());
     ir.close();
@@ -253,14 +244,12 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     doc.add(new NumericDocValuesField("foo", 0));
     w.addDocument(doc);
 
-    doc = new Document();
-    doc.add(new SortedDocValuesField("foo", new BytesRef("hello")));
-    try {
-      w.addDocument(doc);
-      fail("didn't hit expected exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
+    Document doc2 = new Document();
+    doc2.add(new SortedDocValuesField("foo", new BytesRef("hello")));
+    expectThrows(IllegalArgumentException.class, () -> {
+      w.addDocument(doc2);
+    });
+
     IndexReader ir = w.getReader();
     assertEquals(1, ir.numDocs());
     ir.close();
@@ -281,16 +270,10 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     iwriter.addDocument(doc);
     
     doc.add(new SortedDocValuesField("dv", new BytesRef("bar!")));
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       iwriter.addDocument(doc);
-      fail("didn't hit expected exception");
-    } catch (IllegalArgumentException expected) {
-      // expected
-      if (VERBOSE) {
-        System.out.println("hit exc:");
-        expected.printStackTrace(System.out);
-      }
-    }
+    });
+
     IndexReader ir = iwriter.getReader();
     assertEquals(1, ir.numDocs());
     ir.close();
@@ -311,12 +294,9 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     iwriter.addDocument(doc);
     
     doc.add(new BinaryDocValuesField("dv", new BytesRef("bar!")));
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       iwriter.addDocument(doc);
-      fail("didn't hit expected exception");
-    } catch (IllegalArgumentException expected) {
-      // expected
-    }
+    });
     
     IndexReader ir = iwriter.getReader();
     assertEquals(1, ir.numDocs());
@@ -339,12 +319,10 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     iwriter.addDocument(doc);
     
     doc.add(new NumericDocValuesField("dv", 2));
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       iwriter.addDocument(doc);
-      fail("didn't hit expected exception");
-    } catch (IllegalArgumentException expected) {
-      // expected
-    }
+    });
+
     IndexReader ir = iwriter.getReader();
     assertEquals(1, ir.numDocs());
     ir.close();
@@ -364,17 +342,15 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     doc.add(new SortedDocValuesField("dv", new BytesRef("just fine")));
     iwriter.addDocument(doc);
     
-    doc = new Document();
+    Document hugeDoc = new Document();
     byte bytes[] = new byte[100000];
     BytesRef b = new BytesRef(bytes);
     random().nextBytes(bytes);
-    doc.add(new SortedDocValuesField("dv", b));
-    try {
-      iwriter.addDocument(doc);
-      fail("did not get expected exception");
-    } catch (IllegalArgumentException expected) {
-      // expected
-    }
+    hugeDoc.add(new SortedDocValuesField("dv", b));
+    expectThrows(IllegalArgumentException.class, () -> {
+      iwriter.addDocument(hugeDoc);
+    });
+
     IndexReader ir = iwriter.getReader();
     assertEquals(1, ir.numDocs());
     ir.close();
@@ -394,17 +370,15 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     doc.add(new SortedSetDocValuesField("dv", new BytesRef("just fine")));
     iwriter.addDocument(doc);
     
-    doc = new Document();
+    Document hugeDoc = new Document();
     byte bytes[] = new byte[100000];
     BytesRef b = new BytesRef(bytes);
     random().nextBytes(bytes);
-    doc.add(new SortedSetDocValuesField("dv", b));
-    try {
-      iwriter.addDocument(doc);
-      fail("did not get expected exception");
-    } catch (IllegalArgumentException expected) {
-      // expected
-    }
+    hugeDoc.add(new SortedSetDocValuesField("dv", b));
+    expectThrows(IllegalArgumentException.class, () -> {
+      iwriter.addDocument(hugeDoc);
+    });
+
     IndexReader ir = iwriter.getReader();
     assertEquals(1, ir.numDocs());
     ir.close();
@@ -421,14 +395,12 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     w.addDocument(doc);
     w.commit();
 
-    doc = new Document();
-    doc.add(new SortedDocValuesField("foo", new BytesRef("hello")));
-    try {
-      w.addDocument(doc);
-      fail("did not get expected exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
+    Document doc2 = new Document();
+    doc2.add(new SortedDocValuesField("foo", new BytesRef("hello")));
+    expectThrows(IllegalArgumentException.class, () -> {
+      w.addDocument(doc2);
+    });
+
     w.close();
     dir.close();
   }
@@ -475,16 +447,14 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     w.addDocument(doc);
     w.close();
 
-    w = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random())));
-    doc = new Document();
-    doc.add(new SortedDocValuesField("foo", new BytesRef("hello")));
-    try {
-      w.addDocument(doc);
-      fail("did not get expected exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
-    w.close();
+    IndexWriter w2 = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random())));
+    Document doc2 = new Document();
+    doc2.add(new SortedDocValuesField("foo", new BytesRef("hello")));
+    expectThrows(IllegalArgumentException.class, () -> {
+      w2.addDocument(doc2);
+    });
+
+    w2.close();
     dir.close();
   }
 
@@ -496,21 +466,19 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     w.addDocument(doc);
     w.close();
 
-    doc = new Document();
-    w = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random())));
-    doc.add(new StringField("foo", "bar", Field.Store.NO));
-    doc.add(new BinaryDocValuesField("foo", new BytesRef("foo")));
-    try {
-      // NOTE: this case follows a different code path inside
-      // DefaultIndexingChain/FieldInfos, because the field (foo)
-      // is first added without DocValues:
-      w.addDocument(doc);
-      fail("did not get expected exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
-    w.forceMerge(1);
-    w.close();
+    Document doc2 = new Document();
+    IndexWriter w2 = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random())));
+    doc2.add(new StringField("foo", "bar", Field.Store.NO));
+    doc2.add(new BinaryDocValuesField("foo", new BytesRef("foo")));
+    // NOTE: this case follows a different code path inside
+    // DefaultIndexingChain/FieldInfos, because the field (foo)
+    // is first added without DocValues:
+    expectThrows(IllegalArgumentException.class, () -> {
+      w2.addDocument(doc2);
+    });
+
+    w2.forceMerge(1);
+    w2.close();
     dir.close();
   }
 
@@ -522,23 +490,21 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     w.addDocument(doc);
     w.close();
 
-    doc = new Document();
-    w = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random())));
-    doc.add(new StringField("foo", "bar", Field.Store.NO));
-    doc.add(new BinaryDocValuesField("foo", new BytesRef("foo")));
-    try {
-      // NOTE: this case follows a different code path inside
-      // DefaultIndexingChain/FieldInfos, because the field (foo)
-      // is first added without DocValues:
-      w.addDocument(doc);
-      fail("did not get expected exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
+    Document doc2 = new Document();
+    IndexWriter w2 = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random())));
+    doc2.add(new StringField("foo", "bar", Field.Store.NO));
+    doc2.add(new BinaryDocValuesField("foo", new BytesRef("foo")));
+    // NOTE: this case follows a different code path inside
+    // DefaultIndexingChain/FieldInfos, because the field (foo)
+    // is first added without DocValues:
+    expectThrows(IllegalArgumentException.class, () -> {
+      w2.addDocument(doc2);
+    });
+
     // Also add another document so there is a segment to write here:
-    w.addDocument(new Document());
-    w.forceMerge(1);
-    w.close();
+    w2.addDocument(new Document());
+    w2.forceMerge(1);
+    w2.close();
     dir.close();
   }
 
@@ -606,20 +572,14 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     w2.addDocument(doc);
     w2.close();
 
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       w.addIndexes(new Directory[] {dir2});
-      fail("didn't hit expected exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
+    });
 
     DirectoryReader r = DirectoryReader.open(dir2);
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       TestUtil.addIndexesSlowly(w, r);
-      fail("didn't hit expected exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
+    });
 
     r.close();
     dir2.close();
@@ -634,14 +594,12 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     Document doc = new Document();
     doc.add(new NumericDocValuesField("dv", 0L));
     writer.addDocument(doc);
-    doc = new Document();
-    doc.add(new SortedDocValuesField("dv", new BytesRef("foo")));
-    try {
-      writer.addDocument(doc);
-      fail("did not hit exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
+    Document doc2 = new Document();
+    doc2.add(new SortedDocValuesField("dv", new BytesRef("foo")));
+    expectThrows(IllegalArgumentException.class, () -> {
+      writer.addDocument(doc2);
+    });
+
     IndexReader ir = writer.getReader();
     assertEquals(1, ir.numDocs());
     ir.close();
@@ -659,16 +617,14 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     writer.close();
 
     conf = newIndexWriterConfig(new MockAnalyzer(random()));
-    writer = new IndexWriter(dir, conf);
-    doc = new Document();
-    doc.add(new SortedDocValuesField("dv", new BytesRef("foo")));
-    try {
-      writer.addDocument(doc);
-      fail("did not hit exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
-    writer.close();
+    IndexWriter writer2 = new IndexWriter(dir, conf);
+    Document doc2 = new Document();
+    doc2.add(new SortedDocValuesField("dv", new BytesRef("foo")));
+    expectThrows(IllegalArgumentException.class, () -> {
+      writer2.addDocument(doc2);
+    });
+
+    writer2.close();
     dir.close();
   }
 
@@ -751,17 +707,14 @@ public class TestDocValuesIndexing extends LuceneTestCase {
 
     Directory dir2 = newDirectory();
     conf = newIndexWriterConfig(new MockAnalyzer(random()));
-    writer = new IndexWriter(dir2, conf);
+    IndexWriter writer2 = new IndexWriter(dir2, conf);
     doc = new Document();
     doc.add(new SortedDocValuesField("dv", new BytesRef("foo")));
-    writer.addDocument(doc);
-    try {
-      writer.addIndexes(dir);
-      fail("did not hit exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
-    writer.close();
+    writer2.addDocument(doc);
+    expectThrows(IllegalArgumentException.class, () -> {
+      writer2.addIndexes(dir);
+    });
+    writer2.close();
 
     dir.close();
     dir2.close();
@@ -778,19 +731,17 @@ public class TestDocValuesIndexing extends LuceneTestCase {
 
     Directory dir2 = newDirectory();
     conf = newIndexWriterConfig(new MockAnalyzer(random()));
-    writer = new IndexWriter(dir2, conf);
+    IndexWriter writer2 = new IndexWriter(dir2, conf);
     doc = new Document();
     doc.add(new SortedDocValuesField("dv", new BytesRef("foo")));
-    writer.addDocument(doc);
+    writer2.addDocument(doc);
     DirectoryReader reader = DirectoryReader.open(dir);
-    try {
-      TestUtil.addIndexesSlowly(writer, reader);
-      fail("did not hit exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
+    expectThrows(IllegalArgumentException.class, () -> {
+      TestUtil.addIndexesSlowly(writer2, reader);
+    });
+
     reader.close();
-    writer.close();
+    writer2.close();
 
     dir.close();
     dir2.close();
@@ -807,17 +758,15 @@ public class TestDocValuesIndexing extends LuceneTestCase {
 
     Directory dir2 = newDirectory();
     conf = newIndexWriterConfig(new MockAnalyzer(random()));
-    writer = new IndexWriter(dir2, conf);
-    writer.addIndexes(dir);
-    doc = new Document();
-    doc.add(new SortedDocValuesField("dv", new BytesRef("foo")));
-    try {
-      writer.addDocument(doc);
-      fail("did not hit exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
-    writer.close();
+    IndexWriter writer2 = new IndexWriter(dir2, conf);
+    writer2.addIndexes(dir);
+    Document doc2 = new Document();
+    doc2.add(new SortedDocValuesField("dv", new BytesRef("foo")));
+    expectThrows(IllegalArgumentException.class, () -> {
+      writer2.addDocument(doc2);
+    });
+
+    writer2.close();
     dir2.close();
     dir.close();
   }
@@ -833,19 +782,17 @@ public class TestDocValuesIndexing extends LuceneTestCase {
 
     Directory dir2 = newDirectory();
     conf = newIndexWriterConfig(new MockAnalyzer(random()));
-    writer = new IndexWriter(dir2, conf);
+    IndexWriter writer2 = new IndexWriter(dir2, conf);
     DirectoryReader reader = DirectoryReader.open(dir);
-    TestUtil.addIndexesSlowly(writer, reader);
+    TestUtil.addIndexesSlowly(writer2, reader);
     reader.close();
-    doc = new Document();
-    doc.add(new SortedDocValuesField("dv", new BytesRef("foo")));
-    try {
-      writer.addDocument(doc);
-      fail("did not hit exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
-    writer.close();
+    Document doc2 = new Document();
+    doc2.add(new SortedDocValuesField("dv", new BytesRef("foo")));
+    expectThrows(IllegalArgumentException.class, () -> {
+      writer2.addDocument(doc2);
+    });
+
+    writer2.close();
     dir2.close();
     dir.close();
   }
@@ -890,14 +837,12 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     writer.addDocument(doc);
     writer.commit();
     
-    doc = new Document();
-    doc.add(new BinaryDocValuesField("f", new BytesRef("mock")));
-    try {
-      writer.addDocument(doc);
-      fail("should not have succeeded to add a field with different DV type than what already exists");
-    } catch (IllegalArgumentException e) {
-      writer.rollback();
-    }
+    Document doc2 = new Document();
+    doc2.add(new BinaryDocValuesField("f", new BytesRef("mock")));
+    expectThrows(IllegalArgumentException.class, () -> {
+      writer.addDocument(doc2);
+    });
+    writer.rollback();
     
     dir.close();
   }
@@ -919,12 +864,10 @@ public class TestDocValuesIndexing extends LuceneTestCase {
         }
       });
     doc.add(field);
-    try {
+    expectThrows(RuntimeException.class, () -> {
       w.addDocument(doc);
-      fail("did not hit exception");
-    } catch (RuntimeException re) {
-      // expected
-    }
+    });
+
     w.addDocument(new Document());
     w.close();
     dir.close();

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/189e985b/lucene/core/src/test/org/apache/lucene/index/TestExceedMaxTermLength.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestExceedMaxTermLength.java b/lucene/core/src/test/org/apache/lucene/index/TestExceedMaxTermLength.java
index fb8493a..fc3884a 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestExceedMaxTermLength.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestExceedMaxTermLength.java
@@ -83,21 +83,19 @@ public class TestExceedMaxTermLength extends LuceneTestCase {
       }
       doc.add(f);
       
-      try {
+      IllegalArgumentException expected = expectThrows(IllegalArgumentException.class, () -> {
         w.addDocument(doc);
-        fail("Did not get an exception from adding a monster term");
-      } catch (IllegalArgumentException e) {
-        final String maxLengthMsg = String.valueOf(IndexWriter.MAX_TERM_LENGTH);
-        final String msg = e.getMessage();
-        assertTrue("IllegalArgumentException didn't mention 'immense term': " + msg,
-                   msg.contains("immense term"));
-        assertTrue("IllegalArgumentException didn't mention max length ("+maxLengthMsg+"): " + msg,
-                   msg.contains(maxLengthMsg));
-        assertTrue("IllegalArgumentException didn't mention field name ("+name+"): " + msg,
-                   msg.contains(name));
-        assertTrue("IllegalArgumentException didn't mention original message: " + msg,
-            msg.contains("bytes can be at most") && msg.contains("in length; got"));
-      }
+      });
+      String maxLengthMsg = String.valueOf(IndexWriter.MAX_TERM_LENGTH);
+      String msg = expected.getMessage();
+      assertTrue("IllegalArgumentException didn't mention 'immense term': " + msg,
+                 msg.contains("immense term"));
+      assertTrue("IllegalArgumentException didn't mention max length ("+maxLengthMsg+"): " + msg,
+                 msg.contains(maxLengthMsg));
+      assertTrue("IllegalArgumentException didn't mention field name ("+name+"): " + msg,
+                 msg.contains(name));
+      assertTrue("IllegalArgumentException didn't mention original message: " + msg,
+                 msg.contains("bytes can be at most") && msg.contains("in length; got"));
     } finally {
       w.close();
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/189e985b/lucene/core/src/test/org/apache/lucene/index/TestExitableDirectoryReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestExitableDirectoryReader.java b/lucene/core/src/test/org/apache/lucene/index/TestExitableDirectoryReader.java
index 1aa6eea..36c9e0d 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestExitableDirectoryReader.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestExitableDirectoryReader.java
@@ -133,16 +133,12 @@ public class TestExitableDirectoryReader extends LuceneTestCase {
     directoryReader = DirectoryReader.open(directory);
     exitableDirectoryReader = new ExitableDirectoryReader(directoryReader, new QueryTimeoutImpl(1));
     reader = new TestReader(exitableDirectoryReader);
-    searcher = new IndexSearcher(reader);
-    try {
-      searcher.search(query, 10);
-      fail("This query should have led to an ExitingReaderException!");
-    } catch (ExitingReaderException ex) {
-      // Do nothing, we expect this!
-    } finally {
-      reader.close();
-      exitableDirectoryReader.close();
-    }
+    IndexSearcher slowSearcher = new IndexSearcher(reader);
+    expectThrows(ExitingReaderException.class, () -> {
+      slowSearcher.search(query, 10);
+    });
+    reader.close();
+    exitableDirectoryReader.close();
    
     // Set maximum time out and expect the query to complete. 
     // Not checking the validity of the result, all we are bothered about in this test is the timing out.

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/189e985b/lucene/core/src/test/org/apache/lucene/index/TestIndexInput.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexInput.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexInput.java
index 73ba64a..d5e5d92 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexInput.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexInput.java
@@ -143,22 +143,16 @@ public class TestIndexInput extends LuceneTestCase {
     assertEquals("\u0000",is.readString());
     assertEquals("Lu\u0000ce\u0000ne",is.readString());
     
-    try {
+    Exception expected = expectThrows(expectedEx, () -> {
       is.readVInt();
-      fail("Should throw " + expectedEx.getName());
-    } catch (Exception e) {
-      assertTrue(e.getMessage().startsWith("Invalid vInt"));
-      assertTrue(expectedEx.isInstance(e));
-    }
+    });
+    assertTrue(expected.getMessage().startsWith("Invalid vInt"));
     assertEquals(1, is.readVInt()); // guard value
     
-    try {
+    expected = expectThrows(expectedEx, () -> {
       is.readVLong();
-      fail("Should throw " + expectedEx.getName());
-    } catch (Exception e) {
-      assertTrue(e.getMessage().startsWith("Invalid vLong"));
-      assertTrue(expectedEx.isInstance(e));
-    }
+    });
+    assertTrue(expected.getMessage().startsWith("Invalid vLong"));
     assertEquals(1L, is.readVLong()); // guard value
   }
   

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/189e985b/lucene/core/src/test/org/apache/lucene/index/TestIndexReaderClose.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexReaderClose.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexReaderClose.java
index b89679c..6b22fd7 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexReaderClose.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexReaderClose.java
@@ -68,22 +68,20 @@ public class TestIndexReaderClose extends LuceneTestCase {
       if (!faultySet && !throwOnClose) {
         reader.addReaderClosedListener(new FaultyListener());
       }
-      try {
+
+      IllegalStateException expected = expectThrows(IllegalStateException.class, () -> {
         reader.close();
-        fail("expected Exception");
-      } catch (IllegalStateException ex) {
-        if (throwOnClose) {
-          assertEquals("BOOM!", ex.getMessage());
-        } else {
-          assertEquals("GRRRRRRRRRRRR!", ex.getMessage());
-        }
+      });
+
+      if (throwOnClose) {
+        assertEquals("BOOM!", expected.getMessage());
+      } else {
+        assertEquals("GRRRRRRRRRRRR!", expected.getMessage());
       }
 
-      try {
+      expectThrows(AlreadyClosedException.class, () -> {
         reader.fields();
-        fail("we are closed");
-      } catch (AlreadyClosedException ex) {
-      }
+      });
 
       if (random().nextBoolean()) {
         reader.close(); // call it again

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/189e985b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java
index 6e466e5..7461618 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java
@@ -229,20 +229,16 @@ public class TestIndexWriter extends LuceneTestCase {
 
   public void testChangesAfterClose() throws IOException {
     Directory dir = newDirectory();
+    IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random())));
 
-    IndexWriter writer = null;
-
-    writer  = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random())));
     addDoc(writer);
 
     // close
     writer.close();
-    try {
+    expectThrows(AlreadyClosedException.class, () -> {
       addDoc(writer);
-      fail("did not hit AlreadyClosedException");
-    } catch (AlreadyClosedException e) {
-      // expected
-    }
+    });
+
     dir.close();
   }
 
@@ -801,12 +797,10 @@ public class TestIndexWriter extends LuceneTestCase {
     IndexWriter w = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random())));
     Document doc = new Document();
     doc.add(new TextField("field", tokens));
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       w.addDocument(doc);
-      fail("did not hit expected exception");
-    } catch (IllegalArgumentException iea) {
-      // expected
-    }
+    });
+
     w.close();
     dir.close();
   }
@@ -1564,21 +1558,18 @@ public class TestIndexWriter extends LuceneTestCase {
 
     char[] chars = new char[DocumentsWriterPerThread.MAX_TERM_LENGTH_UTF8];
     Arrays.fill(chars, 'x');
-    Document doc = new Document();
+    Document hugeDoc = new Document();
     final String bigTerm = new String(chars);
 
     // This contents produces a too-long term:
     String contents = "abc xyz x" + bigTerm + " another term";
-    doc.add(new TextField("content", contents, Field.Store.NO));
-    try {
-      w.addDocument(doc);
-      fail("should have hit exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
+    hugeDoc.add(new TextField("content", contents, Field.Store.NO));
+    expectThrows(IllegalArgumentException.class, () -> {
+      w.addDocument(hugeDoc);
+    });
 
     // Make sure we can add another normal document
-    doc = new Document();
+    Document doc = new Document();
     doc.add(new TextField("content", "abc bbb ccc", Field.Store.NO));
     w.addDocument(doc);
 
@@ -1612,22 +1603,22 @@ public class TestIndexWriter extends LuceneTestCase {
     IndexWriterConfig iwc = newIndexWriterConfig();
     iwc.setCodec(TestUtil.getDefaultCodec());
 
-    w = new RandomIndexWriter(random(), dir, iwc);
+    RandomIndexWriter w2 = new RandomIndexWriter(random(), dir, iwc);
 
     contentField.setStringValue("other");
-    w.addDocument(doc);
+    w2.addDocument(doc);
 
     contentField.setStringValue("term");
-    w.addDocument(doc);
+    w2.addDocument(doc);
 
     contentField.setStringValue(bigTerm);
-    w.addDocument(doc);
+    w2.addDocument(doc);
 
     contentField.setStringValue("zzz");
-    w.addDocument(doc);
+    w2.addDocument(doc);
 
-    reader = w.getReader();
-    w.close();
+    reader = w2.getReader();
+    w2.close();
     assertEquals(1, reader.docFreq(new Term("content", bigTerm)));
 
     reader.close();
@@ -1689,12 +1680,10 @@ public class TestIndexWriter extends LuceneTestCase {
     Directory d = newFSDirectory(createTempDir("TestIndexWriter.testWhetherDeleteAllDeletesWriteLock"), SimpleFSLockFactory.INSTANCE);
     RandomIndexWriter w1 = new RandomIndexWriter(random(), d);
     w1.deleteAll();
-    try {
+    expectThrows(LockObtainFailedException.class, () -> {
       new RandomIndexWriter(random(), d, newIndexWriterConfig(null));
-      fail("should not be able to create another writer");
-    } catch (LockObtainFailedException lofe) {
-      // expected
-    }
+    });
+
     w1.close();
     d.close();
   }
@@ -1742,12 +1731,9 @@ public class TestIndexWriter extends LuceneTestCase {
                                     new IndexWriterConfig(new MockAnalyzer(random())));
 
     w.prepareCommit();
-    try {
+    expectThrows(IllegalStateException.class, () -> {
       w.close();
-      fail("should have hit exception");
-    } catch (IllegalStateException ise) {
-      // expected
-    }
+    });
     w.commit();
     w.close();
     IndexReader r = DirectoryReader.open(dir);
@@ -1969,19 +1955,21 @@ public class TestIndexWriter extends LuceneTestCase {
     Directory dir = newDirectory();
     IndexWriterConfig iwConf = newIndexWriterConfig(null);
     RandomIndexWriter iw = new RandomIndexWriter(random(), dir, iwConf);
+
     // add 3 good docs
     for (int i = 0; i < 3; i++) {
       Document doc = new Document();
       doc.add(new StringField("id", Integer.toString(i), Field.Store.NO));
       iw.addDocument(doc);
     }
+
     // add broken doc
-    try {
+    expectThrows(NullPointerException.class, () -> {
       Document broke = new Document();
       broke.add(newTextField("test", "broken", Field.Store.NO));
       iw.addDocument(broke);
-      fail();
-    } catch (NullPointerException expected) {}
+    });
+
     // ensure good docs are still ok
     IndexReader ir = iw.getReader();
     assertEquals(3, ir.numDocs());
@@ -1993,20 +1981,23 @@ public class TestIndexWriter extends LuceneTestCase {
   public void testNullDocument() throws IOException {
     Directory dir = newDirectory();
     RandomIndexWriter iw = new RandomIndexWriter(random(), dir);
+
     // add 3 good docs
     for (int i = 0; i < 3; i++) {
       Document doc = new Document();
       doc.add(new StringField("id", Integer.toString(i), Field.Store.NO));
       iw.addDocument(doc);
     }
+
     // add broken doc
-    try {
+    expectThrows(NullPointerException.class, () -> {
       iw.addDocument(null);
-      fail();
-    } catch (NullPointerException expected) {}
+    });
+
     // ensure good docs are still ok
     IndexReader ir = iw.getReader();
     assertEquals(3, ir.numDocs());
+
     ir.close();
     iw.close();
     dir.close();
@@ -2015,20 +2006,23 @@ public class TestIndexWriter extends LuceneTestCase {
   public void testNullDocuments() throws IOException {
     Directory dir = newDirectory();
     RandomIndexWriter iw = new RandomIndexWriter(random(), dir);
+
     // add 3 good docs
     for (int i = 0; i < 3; i++) {
       Document doc = new Document();
       doc.add(new StringField("id", Integer.toString(i), Field.Store.NO));
       iw.addDocument(doc);
     }
+
     // add broken doc block
-    try {
+    expectThrows(NullPointerException.class, () -> {
       iw.addDocuments(null);
-      fail();
-    } catch (NullPointerException expected) {}
+    });
+
     // ensure good docs are still ok
     IndexReader ir = iw.getReader();
     assertEquals(3, ir.numDocs());
+
     ir.close();
     iw.close();
     dir.close();
@@ -2133,7 +2127,7 @@ public class TestIndexWriter extends LuceneTestCase {
   public void testIterableThrowsException2() throws IOException {
     Directory dir = newDirectory();
     IndexWriter w = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random())));
-    try {
+    Exception expected = expectThrows(Exception.class, () -> {
       w.addDocuments(new Iterable<Document>() {
         @Override
         public Iterator<Document> iterator() {
@@ -2154,10 +2148,9 @@ public class TestIndexWriter extends LuceneTestCase {
           };
         }
       });
-    } catch (Exception e) {
-      assertNotNull(e.getMessage());
-      assertEquals("boom", e.getMessage());
-    }
+    });
+    assertEquals("boom", expected.getMessage());
+
     w.close();
     IOUtils.close(dir);
   }
@@ -2358,12 +2351,10 @@ public class TestIndexWriter extends LuceneTestCase {
     Document doc = new Document();
     doc.add(new SortedDocValuesField("dv", new BytesRef("foo!")));
     doc.add(new SortedDocValuesField("dv", new BytesRef("bar!")));
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       iwriter.addDocument(doc);
-      fail("didn't hit expected exception");
-    } catch (IllegalArgumentException expected) {
-      // expected
-    }
+    });
+
     iwriter.commit();
     assertFalse(iwriter.hasUncommittedChanges());
     iwriter.close();
@@ -2733,19 +2724,15 @@ public class TestIndexWriter extends LuceneTestCase {
       assertTrue(dir.checkPendingDeletions());
 
       // make sure we get NFSF if we try to delete and already-pending-delete file:
-      try {
+      expectThrows(NoSuchFileException.class, () -> {
         dir.deleteFile("segments_1");
-        fail("didn't hit exception");
-      } catch (NoSuchFileException nfse) {
-        // expected
-      }
+      });
+
+      IllegalArgumentException expected = expectThrows(IllegalArgumentException.class, () -> {
+        new IndexWriter(dir, new IndexWriterConfig(new MockAnalyzer(random())));
+      });
+      assertTrue(expected.getMessage().contains("still has pending deleted files; cannot initialize IndexWriter"));
 
-      iwc = new IndexWriterConfig(new MockAnalyzer(random()));
-      try {
-        w = new IndexWriter(dir, iwc);
-      } catch (IllegalArgumentException iae) {
-        assertTrue(iae.getMessage().contains("still has pending deleted files; cannot initialize IndexWriter"));
-      }
       in.close();
     }
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/189e985b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterCommit.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterCommit.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterCommit.java
index 5ae0e69..ae07641 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterCommit.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterCommit.java
@@ -486,12 +486,10 @@ public class TestIndexWriterCommit extends LuceneTestCase {
     // new index.
     Directory dir = newDirectory();
     IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random())));
-    try {
+    expectThrows(IndexNotFoundException.class, () -> {
       DirectoryReader.listCommits(dir);
-      fail("listCommits should have thrown an exception over empty index");
-    } catch (IndexNotFoundException e) {
-      // that's expected !
-    }
+    });
+
     // No changes still should generate a commit, because it's a new index.
     writer.close();
     assertEquals("expected 1 commits!", 1, DirectoryReader.listCommits(dir).size());
@@ -673,15 +671,14 @@ public class TestIndexWriterCommit extends LuceneTestCase {
     Directory dir = newDirectory();
     IndexWriter w = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random())));
     w.addDocument(new Document());
+
     w.prepareCommit();
-    try {
+    expectThrows(IllegalStateException.class, () -> {
       w.close();
-      fail("didn't hit exception");
-    } catch (IllegalStateException ise) {
-      // expected
-    }
+    });
     w.commit();
     w.close();
+
     DirectoryReader r = DirectoryReader.open(dir);
     assertEquals(1, r.maxDoc());
     r.close();

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/189e985b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterConfig.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterConfig.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterConfig.java
index 3d85f0c..2ffdce7 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterConfig.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterConfig.java
@@ -142,12 +142,9 @@ public class TestIndexWriterConfig extends LuceneTestCase {
     new RandomIndexWriter(random(), dir, conf).close();
 
     // this should fail
-    try {
+    expectThrows(IllegalStateException.class, () -> {
       assertNotNull(new RandomIndexWriter(random(), dir, conf));
-      fail("should have hit AlreadySetException");
-    } catch (IllegalStateException ise) {
-      // expected
-    }
+    });
 
     dir.close();
   }
@@ -213,96 +210,66 @@ public class TestIndexWriterConfig extends LuceneTestCase {
     assertEquals(KeepOnlyLastCommitDeletionPolicy.class, conf.getIndexDeletionPolicy().getClass());
     conf.setIndexDeletionPolicy(new SnapshotDeletionPolicy(null));
     assertEquals(SnapshotDeletionPolicy.class, conf.getIndexDeletionPolicy().getClass());
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       conf.setIndexDeletionPolicy(null);
-      fail();
-    } catch (IllegalArgumentException e) {
-      // ok
-    }
+    });
 
     // Test MergeScheduler
     assertEquals(ConcurrentMergeScheduler.class, conf.getMergeScheduler().getClass());
     conf.setMergeScheduler(new SerialMergeScheduler());
     assertEquals(SerialMergeScheduler.class, conf.getMergeScheduler().getClass());
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       conf.setMergeScheduler(null);
-      fail();
-    } catch (IllegalArgumentException e) {
-      // ok
-    }
+    });
 
     // Test Similarity: 
     // we shouldnt assert what the default is, just that it's not null.
     assertTrue(IndexSearcher.getDefaultSimilarity() == conf.getSimilarity());
     conf.setSimilarity(new MySimilarity());
     assertEquals(MySimilarity.class, conf.getSimilarity().getClass());
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       conf.setSimilarity(null);
-      fail();
-    } catch (IllegalArgumentException e) {
-      // ok
-    }
+    });
 
     // Test IndexingChain
     assertTrue(DocumentsWriterPerThread.defaultIndexingChain == conf.getIndexingChain());
 
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       conf.setMaxBufferedDeleteTerms(0);
-      fail("should not have succeeded to set maxBufferedDeleteTerms to 0");
-    } catch (IllegalArgumentException e) {
-      // this is expected
-    }
+    });
 
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       conf.setMaxBufferedDocs(1);
-      fail("should not have succeeded to set maxBufferedDocs to 1");
-    } catch (IllegalArgumentException e) {
-      // this is expected
-    }
+    });
 
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       // Disable both MAX_BUF_DOCS and RAM_SIZE_MB
       conf.setMaxBufferedDocs(4);
       conf.setRAMBufferSizeMB(IndexWriterConfig.DISABLE_AUTO_FLUSH);
       conf.setMaxBufferedDocs(IndexWriterConfig.DISABLE_AUTO_FLUSH);
-      fail("should not have succeeded to disable maxBufferedDocs when ramBufferSizeMB is disabled as well");
-    } catch (IllegalArgumentException e) {
-      // this is expected
-    }
+    });
 
     conf.setRAMBufferSizeMB(IndexWriterConfig.DEFAULT_RAM_BUFFER_SIZE_MB);
     conf.setMaxBufferedDocs(IndexWriterConfig.DEFAULT_MAX_BUFFERED_DOCS);
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       conf.setRAMBufferSizeMB(IndexWriterConfig.DISABLE_AUTO_FLUSH);
-      fail("should not have succeeded to disable ramBufferSizeMB when maxBufferedDocs is disabled as well");
-    } catch (IllegalArgumentException e) {
-      // this is expected
-    }
+    });
     
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       conf.setRAMPerThreadHardLimitMB(2048);
-      fail("should not have succeeded to set RAMPerThreadHardLimitMB to >= 2048");
-    } catch (IllegalArgumentException e) {
-      // this is expected
-    }
+    });
     
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       conf.setRAMPerThreadHardLimitMB(0);
-      fail("should not have succeeded to set RAMPerThreadHardLimitMB to 0");
-    } catch (IllegalArgumentException e) {
-      // this is expected
-    }
+    });
     
     // Test MergePolicy
     assertEquals(TieredMergePolicy.class, conf.getMergePolicy().getClass());
     conf.setMergePolicy(new LogDocMergePolicy());
     assertEquals(LogDocMergePolicy.class, conf.getMergePolicy().getClass());
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       conf.setMergePolicy(null);
-      fail();
-    } catch (IllegalArgumentException e) {
-      // ok
-    }
+    });
   }
 
   public void testLiveChangeToCFS() throws Exception {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/189e985b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterDelete.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterDelete.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterDelete.java
index 27295bf..14dac59 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterDelete.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterDelete.java
@@ -838,23 +838,18 @@ public class TestIndexWriterDelete extends LuceneTestCase {
     // case, creation of the cfs file happens next so we
     // need the doc (to test that it's okay that we don't
     // lose deletes if failing while creating the cfs file)
-    boolean failed = false;
-    try {
-      if (VERBOSE) {
-        System.out.println("TEST: now commit for failure");
-      }
+
+    if (VERBOSE) {
+      System.out.println("TEST: now commit for failure");
+    }
+    RuntimeException expected = expectThrows(RuntimeException.class, () -> {
       modifier.commit();
-    } catch (RuntimeException ioe) {
-      // expected
-      if (VERBOSE) {
-        System.out.println("TEST: hit exc:");
-        ioe.printStackTrace(System.out);
-      }
-      failed = true;
+    });
+    if (VERBOSE) {
+      System.out.println("TEST: hit exc:");
+      expected.printStackTrace(System.out);
     }
 
-    assertTrue(failed);
-
     // The commit above failed, so we need to retry it (which will
     // succeed, because the failure is a one-shot)
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/189e985b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
index 07c78dc..4992338 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
@@ -377,13 +377,12 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
     Document doc = new Document();
     doc.add(newTextField("field", "a field", Field.Store.YES));
     w.addDocument(doc);
+
     testPoint.doFail = true;
-    try {
+    expectThrows(RuntimeException.class, () -> {
       w.addDocument(doc);
-      fail("did not hit exception");
-    } catch (RuntimeException re) {
-      // expected
-    }
+    });
+
     w.close();
     dir.close();
   }
@@ -418,12 +417,10 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
     Document crashDoc = new Document();
     crashDoc.add(newTextField("crash", "do it on token 4", Field.Store.YES));
     doCrash.set(true);
-    try {
+    expectThrows(IOException.class, () -> {
       w.addDocument(crashDoc);
-      fail("did not hit expected exception");
-    } catch (IOException ioe) {
-      // expected
-    }
+    });
+
     w.addDocument(doc);
     w.close();
     dir.close();
@@ -508,17 +505,15 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
 
     IndexWriter writer = new IndexWriter(dir, conf);
 
-    Document doc = new Document();
+    Document brokenDoc = new Document();
     String contents = "aa bb cc dd ee ff gg hh ii jj kk";
-    doc.add(newTextField("content", contents, Field.Store.NO));
-    try {
-      writer.addDocument(doc);
-      fail("did not hit expected exception");
-    } catch (Exception e) {
-    }
+    brokenDoc.add(newTextField("content", contents, Field.Store.NO));
+    expectThrows(Exception.class, () -> {
+      writer.addDocument(brokenDoc);
+    });
 
     // Make sure we can add another normal document
-    doc = new Document();
+    Document doc = new Document();
     doc.add(newTextField("content", "aa bb cc dd", Field.Store.NO));
     writer.addDocument(doc);
 
@@ -604,17 +599,18 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
     doc.add(newTextField("content", contents, Field.Store.NO));
     boolean hitError = false;
     writer.addDocument(doc);
-    try {
+
+    expectThrows(IOException.class, () -> {
       writer.addDocument(doc);
-      fail("did not hit exception");
-    } catch (IOException ioe) {
-      // only one flush should fail:
-      assertFalse(hitError);
-      hitError = true;
-      assertTrue(writer.deleter.isClosed());
-      assertTrue(writer.isClosed());
-    }
+    });
+
+    // only one flush should fail:
+    assertFalse(hitError);
+    hitError = true;
+    assertTrue(writer.deleter.isClosed());
+    assertTrue(writer.isClosed());
     assertFalse(DirectoryReader.indexExists(dir));
+
     dir.close();
   }
 
@@ -750,17 +746,15 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
                     writer.addDocument(doc);
                     doc.add(newField("crash", "this should crash after 4 terms", DocCopyIterator.custom5));
                     doc.add(newField("other", "this will not get indexed", DocCopyIterator.custom5));
-                    try {
+                    expectThrows(IOException.class, () -> {
                       writer.addDocument(doc);
-                      fail("did not hit expected exception");
-                    } catch (IOException ioe) {
-                    }
+                    });
 
                     if (0 == finalI) {
-                      doc = new Document();
-                      doc.add(newField("contents", "here are some contents", DocCopyIterator.custom5));
-                      writer.addDocument(doc);
-                      writer.addDocument(doc);
+                      Document extraDoc = new Document();
+                      extraDoc.add(newField("contents", "here are some contents", DocCopyIterator.custom5));
+                      writer.addDocument(extraDoc);
+                      writer.addDocument(extraDoc);
                     }
                   }
                 } catch (Throwable t) {
@@ -956,14 +950,10 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
       doc.add(newTextField("field", "a field", Field.Store.YES));
       w.addDocument(doc);
       dir.failOn(failure);
-      try {
+      expectThrows(RuntimeException.class, () -> {
         w.close();
-        fail();
-      } catch (IOException ioe) {
-        fail("expected only RuntimeException");
-      } catch (RuntimeException re) {
-        // Expected
-      }
+      });
+
       assertTrue("failOnCommit=" + failure.failOnCommit + " failOnDeleteFile=" + failure.failOnDeleteFile, failure.failOnCommit && failure.failOnDeleteFile);
       w.rollback();
       String files[] = dir.listAll();
@@ -1040,11 +1030,9 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
         public void close() {}
       }));
 
-    try {
+    expectThrows(OutOfMemoryError.class, () -> {
       writer.close();
-      fail("OutOfMemoryError expected");
-    }
-    catch (final OutOfMemoryError expected) {}
+    });
 
     // throws IllegalStateEx w/o bug fix
     writer.close();
@@ -1076,23 +1064,19 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
       }));
     writer.addDocument(new Document());
 
-    try {
+    expectThrows(OutOfMemoryError.class, () -> {
       writer.commit();
-      fail("OutOfMemoryError expected");
-    }
-    catch (final OutOfMemoryError expected) {}
+    });
 
     try {
       writer.close();
-    } catch (IllegalStateException ise) {
-      // expected
+    } catch (IllegalArgumentException ok) {
+      // ok
     }
 
-    try {
+    expectThrows(AlreadyClosedException.class, () -> {
       writer.addDocument(new Document());
-    } catch (AlreadyClosedException ace) {
-      // expected
-    }
+    });
 
     // IW should have done rollback() during close, since it hit OOME, and so no index should exist:
     assertFalse(DirectoryReader.indexExists(dir));
@@ -1121,12 +1105,9 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
 
     addDoc(w);
     testPoint.doFail = true;
-    try {
+    expectThrows(RuntimeException.class, () -> {
       w.rollback();
-      fail("did not hit intentional RuntimeException");
-    } catch (RuntimeException re) {
-      // expected
-    }
+    });
 
     testPoint.doFail = false;
     w.rollback();
@@ -1162,11 +1143,9 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
     out.close();
     in.close();
 
-    try {
+    expectThrows(CorruptIndexException.class, () -> {
       DirectoryReader.open(dir);
-      fail("didn't get expected checksum error");
-    } catch (CorruptIndexException expected) {
-    }
+    });
 
     dir.close();
   }
@@ -1207,15 +1186,10 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
       out.close();
       dir.deleteFile(fileNameIn);
 
-      IndexReader reader = null;
-      try {
-        reader = DirectoryReader.open(dir);
-        fail("reader did not hit IOException on opening a corrupt index");
-      } catch (Exception e) {
-      }
-      if (reader != null) {
-        reader.close();
-      }
+      expectThrows(Exception.class, () -> {
+        DirectoryReader.open(dir);
+      });
+
       dir.close();
   }
 
@@ -1262,15 +1236,10 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
 
     assertTrue("failed to find cfs file to remove: ", corrupted);
 
-    IndexReader reader = null;
-    try {
-      reader = DirectoryReader.open(dir);
-      fail("reader did not hit IOException on opening a corrupt index");
-    } catch (Exception e) {
-    }
-    if (reader != null) {
-      reader.close();
-    }
+    expectThrows(Exception.class, () -> {
+      DirectoryReader.open(dir);
+    });
+
     dir.close();
   }
 
@@ -1398,14 +1367,11 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
         f.setTokenStream(new CrashingFilter("crash", tokenizer));
       }
     }
-    try {
+
+    IOException expected = expectThrows(IOException.class, () -> {
       w.addDocuments(docs);
-      // BUG: CrashingFilter didn't
-      fail("did not hit expected exception");
-    } catch (IOException ioe) {
-      // expected
-      assertEquals(CRASH_FAIL_MESSAGE, ioe.getMessage());
-    }
+    });
+    assertEquals(CRASH_FAIL_MESSAGE, expected.getMessage());
 
     final int numDocs2 = random().nextInt(25);
     for(int docCount=0;docCount<numDocs2;docCount++) {
@@ -1475,14 +1441,10 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
       }
     }
 
-    try {
+    IOException expected = expectThrows(IOException.class, () -> {
       w.updateDocuments(new Term("subid", "subs"), docs);
-      // BUG: CrashingFilter didn't
-      fail("did not hit expected exception");
-    } catch (IOException ioe) {
-      // expected
-      assertEquals(CRASH_FAIL_MESSAGE, ioe.getMessage());
-    }
+    });
+    assertEquals(CRASH_FAIL_MESSAGE, expected.getMessage());
 
     final int numDocs4 = random().nextInt(25);
     for(int docCount=0;docCount<numDocs4;docCount++) {
@@ -1512,13 +1474,13 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
     // add good document
     Document doc = new Document();
     iw.addDocument(doc);
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       // set to null value
       String value = null;
       doc.add(new StoredField("foo", value));
       iw.addDocument(doc);
-      fail("didn't get expected exception");
-    } catch (IllegalArgumentException expected) {}
+    });
+
     assertNull(iw.getTragicException());
     iw.close();
     // make sure we see our good doc
@@ -1538,12 +1500,12 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
     Field theField = new StoredField("foo", "hello", StoredField.TYPE);
     doc.add(theField);
     iw.addDocument(doc);
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       // set to null value
       theField.setStringValue(null);
       iw.addDocument(doc);
-      fail("didn't get expected exception");
-    } catch (IllegalArgumentException expected) {}
+    });
+
     assertNull(iw.getTragicException());
     iw.close();
     // make sure we see our good doc
@@ -1562,14 +1524,14 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
     Document doc = new Document();
     iw.addDocument(doc);
 
-    try {
+    expectThrows(NullPointerException.class, () -> {
       // set to null value
       byte v[] = null;
       Field theField = new StoredField("foo", v);
       doc.add(theField);
       iw.addDocument(doc);
-      fail("didn't get expected exception");
-    } catch (NullPointerException expected) {}
+    });
+
     assertNull(iw.getTragicException());
     iw.close();
     // make sure we see our good doc
@@ -1589,13 +1551,13 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
     Field theField = new StoredField("foo", new BytesRef("hello").bytes);
     doc.add(theField);
     iw.addDocument(doc);
-    try {
+    expectThrows(NullPointerException.class, () -> {
       // set to null value
       byte v[] = null;
       theField.setBytesValue(v);
       iw.addDocument(doc);
-      fail("didn't get expected exception");
-    } catch (NullPointerException expected) {}
+    });
+
     assertNull(iw.getTragicException());
     iw.close();
     // make sure we see our good doc
@@ -1614,14 +1576,15 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
     Document doc = new Document();
     iw.addDocument(doc);
 
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       // set to null value
       BytesRef v = null;
       Field theField = new StoredField("foo", v);
       doc.add(theField);
       iw.addDocument(doc);
       fail("didn't get expected exception");
-    } catch (IllegalArgumentException expected) {}
+    });
+
     assertNull(iw.getTragicException());
     iw.close();
     // make sure we see our good doc
@@ -1641,13 +1604,14 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
     Field theField = new StoredField("foo", new BytesRef("hello"));
     doc.add(theField);
     iw.addDocument(doc);
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       // set to null value
       BytesRef v = null;
       theField.setBytesValue(v);
       iw.addDocument(doc);
       fail("didn't get expected exception");
-    } catch (IllegalArgumentException expected) {}
+    });
+
     assertNull(iw.getTragicException());
     iw.close();
     // make sure we see our good doc
@@ -1674,12 +1638,12 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
     // add good document
     Document doc = new Document();
     iw.addDocument(doc);
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       doc.add(newTextField("foo", "bar", Field.Store.NO));
       doc.add(newTextField("foo", "bar", Field.Store.NO));
       iw.addDocument(doc);
-      fail("didn't get expected exception");
-    } catch (IllegalArgumentException expected) {}
+    });
+
     assertNull(iw.getTragicException());
     iw.close();
 
@@ -1716,11 +1680,9 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
     iw.addDocument(new Document());
     iw.close();
     uoe.doFail = true;
-    try {
+    expectThrows(UnsupportedOperationException.class, () -> {
       new IndexWriter(d, newIndexWriterConfig(null));
-      fail("should have gotten a UOE");
-    } catch (UnsupportedOperationException expected) {
-    }
+    });
 
     uoe.doFail = false;
     d.close();
@@ -1736,8 +1698,7 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
     doc.add(new TextField("field2", "sometext", Field.Store.NO));
     doc.add(new StringField("foo", "bar", Field.Store.NO));
     iw.addDocument(doc); // add an 'ok' document
-    try {
-      doc = new Document();
+    expectThrows(UnsupportedOperationException.class, () -> {
       // try to boost with norms omitted
       List<IndexableField> list = new ArrayList<>();
       list.add(new IndexableField() {
@@ -1782,10 +1743,8 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
         }
       });
       iw.addDocument(list);
-      fail("didn't get any exception, boost silently discarded");
-    } catch (UnsupportedOperationException expected) {
-      // expected
-    }
+    });
+
     DirectoryReader ir = DirectoryReader.open(iw);
     assertEquals(1, ir.numDocs());
     assertEquals("sometext", ir.document(0).get("field1"));
@@ -2146,12 +2105,12 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
         return true;
       }
     }, ft));
-    try {
+
+    IllegalArgumentException expected = expectThrows(IllegalArgumentException.class, () -> {
       iw.addDocument(doc);
-      fail("didn't hit exception");
-    } catch (IllegalArgumentException expected) {
-      assertTrue(expected.getMessage().contains("too many tokens"));
-    }
+    });
+    assertTrue(expected.getMessage().contains("too many tokens"));
+
     iw.close();
     dir.close();
   }
@@ -2201,12 +2160,10 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
       iw.prepareCommit();
     }
     
-    try {
+    RuntimeException expected = expectThrows(RuntimeException.class, () -> {
       iw.rollback();
-      fail();
-    } catch (RuntimeException expected) {
-      assertEquals("BOOM!", expected.getMessage());
-    }
+    });
+    assertEquals("BOOM!", expected.getMessage());
     
     r.close();
     
@@ -2275,6 +2232,7 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
       try {
         iw.rollback();
       } catch (FakeIOException expected) {
+        // ok, we randomly hit exc here
       }
       
       r.close();

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/189e985b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterFromReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterFromReader.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterFromReader.java
index e63894f..5ee9520 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterFromReader.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterFromReader.java
@@ -97,13 +97,11 @@ public class TestIndexWriterFromReader extends LuceneTestCase {
 
     IndexWriterConfig iwc = newIndexWriterConfig();
     iwc.setIndexCommit(r.getIndexCommit());
-    try {
+
+    IllegalArgumentException expected = expectThrows(IllegalArgumentException.class, () -> {
       new IndexWriter(dir, iwc);
-      fail("did not hit expected exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-      assertEquals("cannot use IndexWriterConfig.setIndexCommit() when index has no commit", iae.getMessage());
-    }
+    });
+    assertEquals("cannot use IndexWriterConfig.setIndexCommit() when index has no commit", expected.getMessage());
       
     r.close();
     dir.close();
@@ -123,13 +121,12 @@ public class TestIndexWriterFromReader extends LuceneTestCase {
 
     IndexWriterConfig iwc = newIndexWriterConfig();
     iwc.setIndexCommit(r.getIndexCommit());
-    try {
+
+    IllegalArgumentException expected = expectThrows(IllegalArgumentException.class, () -> {
       new IndexWriter(dir, iwc);
-      fail("did not hit expected exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-      assertTrue(iae.getMessage().contains("the provided reader is stale: its prior commit file"));
-    }
+    });
+    assertTrue(expected.getMessage().contains("the provided reader is stale: its prior commit file"));
+
     r.close();
     dir.close();
   }
@@ -151,13 +148,11 @@ public class TestIndexWriterFromReader extends LuceneTestCase {
 
     IndexWriterConfig iwc = newIndexWriterConfig();
     iwc.setIndexCommit(r.getIndexCommit());
-    try {
+    IllegalArgumentException expected = expectThrows(IllegalArgumentException.class, () -> {
       new IndexWriter(dir, iwc);
-      fail("did not hit expected exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-      assertTrue(iae.getMessage().contains("the provided reader is stale: its prior commit file"));      
-    }
+    });
+    assertTrue(expected.getMessage().contains("the provided reader is stale: its prior commit file"));      
+
     r.close();
     dir.close();
   }
@@ -351,13 +346,11 @@ public class TestIndexWriterFromReader extends LuceneTestCase {
     IndexWriterConfig iwc = newIndexWriterConfig();
     iwc.setOpenMode(IndexWriterConfig.OpenMode.CREATE);
     iwc.setIndexCommit(r.getIndexCommit());
-    try {
+    IllegalArgumentException expected = expectThrows(IllegalArgumentException.class, () -> {
       new IndexWriter(dir, iwc);
-      fail("did not hit exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-      assertEquals("cannot use IndexWriterConfig.setIndexCommit() with OpenMode.CREATE", iae.getMessage());
-    }
+    });
+    assertEquals("cannot use IndexWriterConfig.setIndexCommit() with OpenMode.CREATE", expected.getMessage());
+
     IOUtils.close(r, dir);
   }
 
@@ -375,12 +368,10 @@ public class TestIndexWriterFromReader extends LuceneTestCase {
 
     IndexWriterConfig iwc = newIndexWriterConfig();
     iwc.setIndexCommit(commit);
-    try {
+    expectThrows(AlreadyClosedException.class, () -> {
       new IndexWriter(dir, iwc);
-      fail("did not hit exception");
-    } catch (AlreadyClosedException ace) {
-      // expected
-    }
+    });
+
     IOUtils.close(r, dir);
   }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/189e985b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterMaxDocs.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterMaxDocs.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterMaxDocs.java
index 665faae..4fd7550 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterMaxDocs.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterMaxDocs.java
@@ -94,12 +94,10 @@ public class TestIndexWriterMaxDocs extends LuceneTestCase {
       }
 
       // 11th document should fail:
-      try {
+      expectThrows(IllegalArgumentException.class, () -> {
         w.addDocument(new Document());
-        fail("didn't hit exception");
-      } catch (IllegalArgumentException iae) {
-        // expected
-      }
+      });
+
       w.close();
       dir.close();
     } finally {
@@ -117,12 +115,10 @@ public class TestIndexWriterMaxDocs extends LuceneTestCase {
       }
 
       // 11th document should fail:
-      try {
+      expectThrows(IllegalArgumentException.class, () -> {
         w.addDocuments(Collections.singletonList(new Document()));
-        fail("didn't hit exception");
-      } catch (IllegalArgumentException iae) {
-        // expected
-      }
+      });
+
       w.close();
       dir.close();
     } finally {
@@ -140,12 +136,10 @@ public class TestIndexWriterMaxDocs extends LuceneTestCase {
       }
 
       // 11th document should fail:
-      try {
+      expectThrows(IllegalArgumentException.class, () -> {
         w.updateDocument(new Term("field", "foo"), new Document());
-        fail("didn't hit exception");
-      } catch (IllegalArgumentException iae) {
-        // expected
-      }
+      });
+
       w.close();
       dir.close();
     } finally {
@@ -163,12 +157,10 @@ public class TestIndexWriterMaxDocs extends LuceneTestCase {
       }
 
       // 11th document should fail:
-      try {
+      expectThrows(IllegalArgumentException.class, () -> {
         w.updateDocuments(new Term("field", "foo"), Collections.singletonList(new Document()));
-        fail("didn't hit exception");
-      } catch (IllegalArgumentException iae) {
-        // expected
-      }
+      });
+
       w.close();
       dir.close();
     } finally {
@@ -202,12 +194,10 @@ public class TestIndexWriterMaxDocs extends LuceneTestCase {
       }
 
       // 11th document should fail:
-      try {
+      expectThrows(IllegalArgumentException.class, () -> {
         w.addDocument(new Document());
-        fail("didn't hit exception");
-      } catch (IllegalArgumentException iae) {
-        // expected
-      }
+      });
+
       w.close();
       dir.close();
     } finally {
@@ -248,12 +238,10 @@ public class TestIndexWriterMaxDocs extends LuceneTestCase {
       }
 
       // 11th document should fail:
-      try {
+      expectThrows(IllegalArgumentException.class, () -> {
         w.addDocument(new Document());
-        fail("didn't hit exception");
-      } catch (IllegalArgumentException iae) {
-        // expected
-      }
+      });
+
       w.close();
       dir.close();
     } finally {
@@ -274,20 +262,16 @@ public class TestIndexWriterMaxDocs extends LuceneTestCase {
       Directory dir2 = newDirectory();
       IndexWriter w2 = new IndexWriter(dir2, new IndexWriterConfig(null));
       w2.addDocument(new Document());
-      try {
+      expectThrows(IllegalArgumentException.class, () -> {
         w2.addIndexes(new Directory[] {dir});
-        fail("didn't hit exception");
-      } catch (IllegalArgumentException iae) {
-        // expected
-      }
+      });
+
       assertEquals(1, w2.maxDoc());
       DirectoryReader ir = DirectoryReader.open(dir);
-      try {
+      expectThrows(IllegalArgumentException.class, () -> {
         TestUtil.addIndexesSlowly(w2, ir);
-        fail("didn't hit exception");
-      } catch (IllegalArgumentException iae) {
-        // expected
-      }
+      });
+
       w2.close();
       ir.close();
       dir.close();
@@ -362,12 +346,10 @@ public class TestIndexWriterMaxDocs extends LuceneTestCase {
     Arrays.fill(subReaders, ir);
     subReaders[subReaders.length-1] = ir2;
 
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       new MultiReader(subReaders);
-      fail("didn't hit exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
+    });
+
     ir.close();
     ir2.close();
     dir.close();
@@ -472,12 +454,9 @@ public class TestIndexWriterMaxDocs extends LuceneTestCase {
   }
 
   public void testTooLargeMaxDocs() throws Exception {
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       IndexWriter.setMaxDocs(Integer.MAX_VALUE);
-      fail("didn't hit exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
+    });
   }
 
   // LUCENE-6299
@@ -487,20 +466,16 @@ public class TestIndexWriterMaxDocs extends LuceneTestCase {
       Directory dir = newDirectory();
       IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(null));
       w.addDocument(new Document());
-      try {
+      expectThrows(IllegalArgumentException.class, () -> {
         w.addDocument(new Document());
-        fail("didn't hit exception");
-      } catch (IllegalArgumentException iae) {
-        // expected
-      }
+      });
+
       w.deleteAll();
       w.addDocument(new Document());
-      try {
+      expectThrows(IllegalArgumentException.class, () -> {
         w.addDocument(new Document());
-        fail("didn't hit exception");
-      } catch (IllegalArgumentException iae) {
-        // expected
-      }
+      });
+
       w.close();
       dir.close();
     } finally {
@@ -517,21 +492,17 @@ public class TestIndexWriterMaxDocs extends LuceneTestCase {
       w.addDocument(new Document());
       w.getReader().close();
       w.addDocument(new Document());
-      try {
+      expectThrows(IllegalArgumentException.class, () -> {
         w.addDocument(new Document());
-        fail("didn't hit exception");
-      } catch (IllegalArgumentException iae) {
-        // expected
-      }
+      });
+
       w.deleteAll();
       w.addDocument(new Document());
       w.addDocument(new Document());
-      try {
+      expectThrows(IllegalArgumentException.class, () -> {
         w.addDocument(new Document());
-        fail("didn't hit exception");
-      } catch (IllegalArgumentException iae) {
-        // expected
-      }
+      });
+
       w.close();
       dir.close();
     } finally {
@@ -548,21 +519,17 @@ public class TestIndexWriterMaxDocs extends LuceneTestCase {
       w.addDocument(new Document());
       w.commit();
       w.addDocument(new Document());
-      try {
+      expectThrows(IllegalArgumentException.class, () -> {
         w.addDocument(new Document());
-        fail("didn't hit exception");
-      } catch (IllegalArgumentException iae) {
-        // expected
-      }
+      });
+
       w.deleteAll();
       w.addDocument(new Document());
       w.addDocument(new Document());
-      try {
+      expectThrows(IllegalArgumentException.class, () -> {
         w.addDocument(new Document());
-        fail("didn't hit exception");
-      } catch (IllegalArgumentException iae) {
-        // expected
-      }
+      });
+
       w.close();
       dir.close();
     } finally {
@@ -601,22 +568,18 @@ public class TestIndexWriterMaxDocs extends LuceneTestCase {
         thread.join();
       }
 
-      try {
+      expectThrows(IllegalArgumentException.class, () -> {
         w.addDocument(new Document());
-        fail("didn't hit exception");
-      } catch (IllegalArgumentException iae) {
-        // expected
-      }
+      });
+
       w.deleteAll();
       for(int i=0;i<limit;i++) {
         w.addDocument(new Document());
       }        
-      try {
+      expectThrows(IllegalArgumentException.class, () -> {
         w.addDocument(new Document());
-        fail("didn't hit exception");
-      } catch (IllegalArgumentException iae) {
-        // expected
-      }
+      });
+
       w.close();
       dir.close();
     } finally {
@@ -632,24 +595,21 @@ public class TestIndexWriterMaxDocs extends LuceneTestCase {
       IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(null));
       w.addDocument(new Document());
       w.close();
-      w = new IndexWriter(dir, new IndexWriterConfig(null));
-      w.addDocument(new Document());
-      try {
-        w.addDocument(new Document());
-        fail("didn't hit exception");
-      } catch (IllegalArgumentException iae) {
-        // expected
-      }
-      w.deleteAll();
-      w.addDocument(new Document());
-      w.addDocument(new Document());
-      try {
-        w.addDocument(new Document());
-        fail("didn't hit exception");
-      } catch (IllegalArgumentException iae) {
-        // expected
-      }
-      w.close();
+
+      IndexWriter w2 = new IndexWriter(dir, new IndexWriterConfig(null));
+      w2.addDocument(new Document());
+      expectThrows(IllegalArgumentException.class, () -> {
+        w2.addDocument(new Document());
+      });
+
+      w2.deleteAll();
+      w2.addDocument(new Document());
+      w2.addDocument(new Document());
+      expectThrows(IllegalArgumentException.class, () -> {
+        w2.addDocument(new Document());
+      });
+
+      w2.close();
       dir.close();
     } finally {
       restoreIndexWriterMaxDocs();
@@ -664,14 +624,12 @@ public class TestIndexWriterMaxDocs extends LuceneTestCase {
       IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(null));
       w.addDocument(new Document());
       w.close();
-      w = new IndexWriter(dir, new IndexWriterConfig(null));
-      try {
-        w.addDocument(new Document());
-        fail("didn't hit exception");
-      } catch (IllegalArgumentException iae) {
-        // expected
-      }
-      w.close();
+      IndexWriter w2 = new IndexWriter(dir, new IndexWriterConfig(null));
+      expectThrows(IllegalArgumentException.class, () -> {
+        w2.addDocument(new Document());
+      });
+
+      w2.close();
       dir.close();
     } finally {
       restoreIndexWriterMaxDocs();
@@ -687,11 +645,10 @@ public class TestIndexWriterMaxDocs extends LuceneTestCase {
     w.close();
 
     setIndexWriterMaxDocs(1);
-    try {       
-      DirectoryReader.open(dir);
-      fail("didn't hit exception");
-    } catch (CorruptIndexException cie) {
-      // expected
+    try {
+      expectThrows(CorruptIndexException.class, () -> {
+        DirectoryReader.open(dir);
+      });
     } finally {
       restoreIndexWriterMaxDocs();
     }
@@ -708,11 +665,10 @@ public class TestIndexWriterMaxDocs extends LuceneTestCase {
     w.close();
 
     setIndexWriterMaxDocs(1);
-    try {       
-      new IndexWriter(dir, new IndexWriterConfig(null));
-      fail("didn't hit exception");
-    } catch (CorruptIndexException cie) {
-      // expected
+    try {
+      expectThrows(CorruptIndexException.class, () -> {
+        new IndexWriter(dir, new IndexWriterConfig(null));
+      });
     } finally {
       restoreIndexWriterMaxDocs();
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/189e985b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterMergePolicy.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterMergePolicy.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterMergePolicy.java
index d03de7e..2d5680c 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterMergePolicy.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterMergePolicy.java
@@ -287,12 +287,9 @@ public class TestIndexWriterMergePolicy extends LuceneTestCase {
     lmp.setMaxCFSSegmentSizeMB(Long.MAX_VALUE/1024/1024.);
     assertEquals(Long.MAX_VALUE/1024/1024., lmp.getMaxCFSSegmentSizeMB(), EPSILON*Long.MAX_VALUE);
     
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       lmp.setMaxCFSSegmentSizeMB(-2.0);
-      fail("Didn't throw IllegalArgumentException");
-    } catch (IllegalArgumentException iae) {
-      // pass
-    }
+    });
     
     // TODO: Add more checks for other non-double setters!
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/189e985b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterOnDiskFull.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterOnDiskFull.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterOnDiskFull.java
index eecb3bd..b7d0b29 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterOnDiskFull.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterOnDiskFull.java
@@ -523,21 +523,16 @@ public class TestIndexWriterOnDiskFull extends LuceneTestCase {
     ftdm.setDoFail();
     dir.failOn(ftdm);
 
-    try {
+    expectThrows(IOException.class, () -> {
       w.commit();
-      fail("fake disk full IOExceptions not hit");
-    } catch (IOException ioe) {
-      // expected
-      assertTrue(ftdm.didFail1 || ftdm.didFail2);
-    }
+    });
+    assertTrue(ftdm.didFail1 || ftdm.didFail2);
+
     TestUtil.checkIndex(dir);
     ftdm.clearDoFail();
-    try {
+    expectThrows(AlreadyClosedException.class, () -> {
       w.addDocument(doc);
-      fail("writer was not closed by merge exception");
-    } catch (AlreadyClosedException ace) {
-      // expected
-    }
+    });
 
     dir.close();
   }
@@ -556,13 +551,12 @@ public class TestIndexWriterOnDiskFull extends LuceneTestCase {
     final Document doc = new Document();
     FieldType customType = new FieldType(TextField.TYPE_STORED);
     doc.add(newField("field", "aaa bbb ccc ddd eee fff ggg hhh iii jjj", customType));
-    try {
+    expectThrows(IOException.class, () -> {
       writer.addDocument(doc);
-      fail("did not hit disk full");
-    } catch (IOException ioe) {
-      assertTrue(writer.deleter.isClosed());
-      assertTrue(writer.isClosed());
-    }
+    });
+    assertTrue(writer.deleter.isClosed());
+    assertTrue(writer.isClosed());
+
     dir.close();
   }
   

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/189e985b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterReader.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterReader.java
index 173128e..584e03c 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterReader.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterReader.java
@@ -709,12 +709,11 @@ public class TestIndexWriterReader extends LuceneTestCase {
     Query q = new TermQuery(new Term("indexname", "test"));
     IndexSearcher searcher = newSearcher(r);
     assertEquals(100, searcher.search(q, 10).totalHits);
-    try {
+
+    expectThrows(AlreadyClosedException.class, () -> {
       DirectoryReader.openIfChanged(r);
-      fail("failed to hit AlreadyClosedException");
-    } catch (AlreadyClosedException ace) {
-      // expected
-    }
+    });
+
     r.close();
     dir1.close();
   }
@@ -1112,14 +1111,9 @@ public class TestIndexWriterReader extends LuceneTestCase {
     // other NRT reader, since it is already marked closed!
     for (int i = 0; i < 2; i++) {
       shouldFail.set(true);
-      try {
+      expectThrows(FakeIOException.class, () -> {
         writer.getReader().close();
-      } catch (FakeIOException e) {
-        // expected
-        if (VERBOSE) {
-          System.out.println("hit expected fake IOE");
-        }
-      }
+      });
     }
     
     writer.close();

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/189e985b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterWithThreads.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterWithThreads.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterWithThreads.java
index 72029cb..34c5a52 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterWithThreads.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterWithThreads.java
@@ -365,22 +365,20 @@ public class TestIndexWriterWithThreads extends LuceneTestCase {
 
     dir.failOn(failure);
     failure.setDoFail();
-    try {
+    expectThrows(IOException.class, () -> {
       writer.addDocument(doc);
       writer.addDocument(doc);
       writer.commit();
-      fail("did not hit exception");
-    } catch (IOException ioe) {
-    }
+    });
+
     failure.clearDoFail();
-    try {
+    expectThrows(AlreadyClosedException.class, () -> {
       writer.addDocument(doc);
       writer.commit();
       writer.close();
-    } catch (AlreadyClosedException ace) {
-      // OK: abort closes the writer
-      assertTrue(writer.deleter.isClosed());
-    }
+    });
+
+    assertTrue(writer.deleter.isClosed());
     dir.close();
   }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/189e985b/lucene/core/src/test/org/apache/lucene/index/TestMaxPosition.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestMaxPosition.java b/lucene/core/src/test/org/apache/lucene/index/TestMaxPosition.java
index f8c7ceb..c65082c 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestMaxPosition.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestMaxPosition.java
@@ -45,12 +45,9 @@ public class TestMaxPosition extends LuceneTestCase {
       t2.setPayload(new BytesRef(new byte[] { 0x1 } ));
     }
     doc.add(new TextField("foo", new CannedTokenStream(new Token[] {t1, t2})));
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       iw.addDocument(doc);
-      fail("did not hit exception");
-    } catch (IllegalArgumentException iae) {
-      // expected
-    }
+    });
 
     // Document should not be visible:
     IndexReader r = DirectoryReader.open(iw);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/189e985b/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java b/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java
index 3366646..727f6ff 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java
@@ -421,19 +421,13 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
     writer.commit();
     writer.addDocument(doc); // in-memory document
     
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       writer.updateNumericDocValue(new Term("key", "doc"), "ndv", 17L);
-      fail("should not have allowed creating new fields through update");
-    } catch (IllegalArgumentException e) {
-      // ok
-    }
+    });
     
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       writer.updateNumericDocValue(new Term("key", "doc"), "foo", 17L);
-      fail("should not have allowed updating an existing field to numeric-dv");
-    } catch (IllegalArgumentException e) {
-      // ok
-    }
+    });
     
     writer.close();
     dir.close();

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/189e985b/lucene/core/src/test/org/apache/lucene/index/TestOmitTf.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestOmitTf.java b/lucene/core/src/test/org/apache/lucene/index/TestOmitTf.java
index 741c143..807c704 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestOmitTf.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestOmitTf.java
@@ -306,17 +306,15 @@ public class TestOmitTf extends LuceneTestCase {
     TermQuery q4 = new TermQuery(d);
 
     PhraseQuery pq = new PhraseQuery(a.field(), a.bytes(), c.bytes());
-    try {
+    Exception expected = expectThrows(Exception.class, () -> {
       searcher.search(pq, 10);
-      fail("did not hit expected exception");
-    } catch (Exception e) {
-      Throwable cause = e;
-      // If the searcher uses an executor service, the IAE is wrapped into other exceptions
-      while (cause.getCause() != null) {
-        cause = cause.getCause();
-      }
-      assertTrue("Expected an IAE, got " + cause, cause instanceof IllegalStateException);
+    });
+    Throwable cause = expected;
+    // If the searcher uses an executor service, the IAE is wrapped into other exceptions
+    while (cause.getCause() != null) {
+      cause = cause.getCause();
     }
+    assertTrue("Expected an IAE, got " + cause, cause instanceof IllegalStateException);
         
     searcher.search(q1,
                     new CountingHitCollector() {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/189e985b/lucene/core/src/test/org/apache/lucene/index/TestParallelCompositeReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestParallelCompositeReader.java b/lucene/core/src/test/org/apache/lucene/index/TestParallelCompositeReader.java
index e7d735c..7078380 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestParallelCompositeReader.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestParallelCompositeReader.java
@@ -203,19 +203,13 @@ public class TestParallelCompositeReader extends LuceneTestCase {
     ir1.close();
 
     assertEquals("refCount of synthetic subreader should be unchanged", 1, psub.getRefCount());
-    try {
+    expectThrows(AlreadyClosedException.class, () -> {
       psub.document(0);
-      fail("Subreader should be already closed because inner reader was closed!");
-    } catch (AlreadyClosedException e) {
-      // pass
-    }
+    });
     
-    try {
+    expectThrows(AlreadyClosedException.class, () -> {
       pr.document(0);
-      fail("ParallelCompositeReader should be already closed because inner reader was closed!");
-    } catch (AlreadyClosedException e) {
-      // pass
-    }
+    });
     
     // noop:
     pr.close();
@@ -238,18 +232,15 @@ public class TestParallelCompositeReader extends LuceneTestCase {
     
     DirectoryReader ir1 = DirectoryReader.open(dir1),
         ir2 = DirectoryReader.open(dir2);
-    try {
+
+    expectThrows(IllegalArgumentException.class, () -> {
       new ParallelCompositeReader(ir1, ir2);
-      fail("didn't get expected exception: indexes don't have same number of documents");
-    } catch (IllegalArgumentException e) {
-      // expected exception
-    }
-    try {
+    });
+
+    expectThrows(IllegalArgumentException.class, () -> {
       new ParallelCompositeReader(random().nextBoolean(), ir1, ir2);
-      fail("didn't get expected exception: indexes don't have same number of documents");
-    } catch (IllegalArgumentException e) {
-      // expected exception
-    }
+    });
+
     assertEquals(1, ir1.getRefCount());
     assertEquals(1, ir2.getRefCount());
     ir1.close();
@@ -267,18 +258,14 @@ public class TestParallelCompositeReader extends LuceneTestCase {
     DirectoryReader ir1 = DirectoryReader.open(dir1),
         ir2 = DirectoryReader.open(dir2);
     CompositeReader[] readers = new CompositeReader[] {ir1, ir2};
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       new ParallelCompositeReader(readers);
-      fail("didn't get expected exception: indexes don't have same subreader structure");
-    } catch (IllegalArgumentException e) {
-      // expected exception
-    }
-    try {
+    });
+
+    expectThrows(IllegalArgumentException.class, () -> {
       new ParallelCompositeReader(random().nextBoolean(), readers, readers);
-      fail("didn't get expected exception: indexes don't have same subreader structure");
-    } catch (IllegalArgumentException e) {
-      // expected exception
-    }
+    });
+
     assertEquals(1, ir1.getRefCount());
     assertEquals(1, ir2.getRefCount());
     ir1.close();
@@ -296,18 +283,15 @@ public class TestParallelCompositeReader extends LuceneTestCase {
     CompositeReader ir1 = new MultiReader(DirectoryReader.open(dir1), SlowCompositeReaderWrapper.wrap(DirectoryReader.open(dir1))),
         ir2 = new MultiReader(DirectoryReader.open(dir2), DirectoryReader.open(dir2));
     CompositeReader[] readers = new CompositeReader[] {ir1, ir2};
-    try {
+
+    expectThrows(IllegalArgumentException.class, () -> {
       new ParallelCompositeReader(readers);
-      fail("didn't get expected exception: indexes don't have same subreader structure");
-    } catch (IllegalArgumentException e) {
-      // expected exception
-    }
-    try {
+    });
+
+    expectThrows(IllegalArgumentException.class, () -> {
       new ParallelCompositeReader(random().nextBoolean(), readers, readers);
-      fail("didn't get expected exception: indexes don't have same subreader structure");
-    } catch (IllegalArgumentException e) {
-      // expected exception
-    }
+    });
+
     assertEquals(1, ir1.getRefCount());
     assertEquals(1, ir2.getRefCount());
     ir1.close();
@@ -373,14 +357,11 @@ public class TestParallelCompositeReader extends LuceneTestCase {
     pr.close();
     
     // no main readers
-    try {
+    expectThrows(IllegalArgumentException.class, () -> {
       new ParallelCompositeReader(true,
         new CompositeReader[0],
         new CompositeReader[] {ir1});
-      fail("didn't get expected exception: need a non-empty main-reader array");
-    } catch (IllegalArgumentException iae) {
-      // pass
-    }
+    });
     
     dir1.close();
     dir2.close();