You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by cc...@apache.org on 2012/02/28 23:43:28 UTC

[Lucene.Net] svn commit: r1294875 [38/45] - in /incubator/lucene.net/trunk: ./ build/ build/vs2010/contrib/ build/vs2010/test/ doc/ src/ src/contrib/Analyzers/ src/contrib/Analyzers/AR/ src/contrib/Analyzers/BR/ src/contrib/Analyzers/CJK/ src/contrib/Analyzers/Cn/ ...

Modified: incubator/lucene.net/trunk/test/core/Index/TestIndexWriterDelete.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/test/core/Index/TestIndexWriterDelete.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/test/core/Index/TestIndexWriterDelete.cs (original)
+++ incubator/lucene.net/trunk/test/core/Index/TestIndexWriterDelete.cs Tue Feb 28 22:43:08 2012
@@ -16,7 +16,7 @@
  */
 
 using System;
-
+using Lucene.Net.Support;
 using NUnit.Framework;
 
 using WhitespaceAnalyzer = Lucene.Net.Analysis.WhitespaceAnalyzer;
@@ -135,311 +135,284 @@ namespace Lucene.Net.Index
 		}
 		
 		// test the simple case
-		[Test]
-		public virtual void  TestSimpleCase()
-		{
-			System.String[] keywords = new System.String[]{"1", "2"};
-			System.String[] unindexed = new System.String[]{"Netherlands", "Italy"};
-			System.String[] unstored = new System.String[]{"Amsterdam has lots of bridges", "Venice has lots of canals"};
-			System.String[] text = new System.String[]{"Amsterdam", "Venice"};
-			
-			for (int pass = 0; pass < 2; pass++)
-			{
-				bool autoCommit = (0 == pass);
-				
-				Directory dir = new MockRAMDirectory();
-				IndexWriter modifier = new IndexWriter(dir, autoCommit, new WhitespaceAnalyzer(), true);
-				modifier.SetUseCompoundFile(true);
-				modifier.SetMaxBufferedDeleteTerms(1);
-				
-				for (int i = 0; i < keywords.Length; i++)
-				{
-					Document doc = new Document();
-					doc.Add(new Field("id", keywords[i], Field.Store.YES, Field.Index.NOT_ANALYZED));
-					doc.Add(new Field("country", unindexed[i], Field.Store.YES, Field.Index.NO));
-					doc.Add(new Field("contents", unstored[i], Field.Store.NO, Field.Index.ANALYZED));
-					doc.Add(new Field("city", text[i], Field.Store.YES, Field.Index.ANALYZED));
-					modifier.AddDocument(doc);
-				}
-				modifier.Optimize();
-				modifier.Commit();
-				
-				Term term = new Term("city", "Amsterdam");
-				int hitCount = GetHitCount(dir, term);
-				Assert.AreEqual(1, hitCount);
-				modifier.DeleteDocuments(term);
-				modifier.Commit();
-				hitCount = GetHitCount(dir, term);
-				Assert.AreEqual(0, hitCount);
-				
-				modifier.Close();
-				dir.Close();
-			}
-		}
-		
-		// test when delete terms only apply to disk segments
-		[Test]
-		public virtual void  TestNonRAMDelete()
-		{
-			for (int pass = 0; pass < 2; pass++)
-			{
-				bool autoCommit = (0 == pass);
-				
-				Directory dir = new MockRAMDirectory();
-				IndexWriter modifier = new IndexWriter(dir, autoCommit, new WhitespaceAnalyzer(), true);
-				modifier.SetMaxBufferedDocs(2);
-				modifier.SetMaxBufferedDeleteTerms(2);
-				
-				int id = 0;
-				int value_Renamed = 100;
-				
-				for (int i = 0; i < 7; i++)
-				{
-					AddDoc(modifier, ++id, value_Renamed);
-				}
-				modifier.Commit();
-				
-				Assert.AreEqual(0, modifier.GetNumBufferedDocuments());
-				Assert.IsTrue(0 < modifier.GetSegmentCount());
-				
-				modifier.Commit();
-				
-				IndexReader reader = IndexReader.Open(dir);
-				Assert.AreEqual(7, reader.NumDocs());
-				reader.Close();
-				
-				modifier.DeleteDocuments(new Term("value", System.Convert.ToString(value_Renamed)));
-				
-				modifier.Commit();
-				
-				reader = IndexReader.Open(dir);
-				Assert.AreEqual(0, reader.NumDocs());
-				reader.Close();
-				modifier.Close();
-				dir.Close();
-			}
-		}
-		
-		[Test]
-		public virtual void  TestMaxBufferedDeletes()
-		{
-			for (int pass = 0; pass < 2; pass++)
-			{
-				bool autoCommit = (0 == pass);
-				Directory dir = new MockRAMDirectory();
-				IndexWriter writer = new IndexWriter(dir, autoCommit, new WhitespaceAnalyzer(), true);
-				writer.SetMaxBufferedDeleteTerms(1);
-				writer.DeleteDocuments(new Term("foobar", "1"));
-				writer.DeleteDocuments(new Term("foobar", "1"));
-				writer.DeleteDocuments(new Term("foobar", "1"));
-				Assert.AreEqual(3, writer.GetFlushDeletesCount());
-				writer.Close();
-				dir.Close();
-			}
-		}
-		
-		// test when delete terms only apply to ram segments
+        [Test]
+        public virtual void TestSimpleCase()
+        {
+            System.String[] keywords = new System.String[] {"1", "2"};
+            System.String[] unindexed = new System.String[] {"Netherlands", "Italy"};
+            System.String[] unstored = new System.String[]
+                                           {"Amsterdam has lots of bridges", "Venice has lots of canals"};
+            System.String[] text = new System.String[] {"Amsterdam", "Venice"};
+
+            Directory dir = new MockRAMDirectory();
+            IndexWriter modifier = new IndexWriter(dir,  new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED);
+            modifier.SetUseCompoundFile(true);
+            modifier.SetMaxBufferedDeleteTerms(1);
+
+            for (int i = 0; i < keywords.Length; i++)
+            {
+                Document doc = new Document();
+                doc.Add(new Field("id", keywords[i], Field.Store.YES, Field.Index.NOT_ANALYZED));
+                doc.Add(new Field("country", unindexed[i], Field.Store.YES, Field.Index.NO));
+                doc.Add(new Field("contents", unstored[i], Field.Store.NO, Field.Index.ANALYZED));
+                doc.Add(new Field("city", text[i], Field.Store.YES, Field.Index.ANALYZED));
+                modifier.AddDocument(doc);
+            }
+            modifier.Optimize();
+            modifier.Commit();
+
+            Term term = new Term("city", "Amsterdam");
+            int hitCount = GetHitCount(dir, term);
+            Assert.AreEqual(1, hitCount);
+            modifier.DeleteDocuments(term);
+            modifier.Commit();
+            hitCount = GetHitCount(dir, term);
+            Assert.AreEqual(0, hitCount);
+
+            modifier.Close();
+            dir.Close();
+        }
+
+        // test when delete terms only apply to disk segments
+        [Test]
+        public virtual void TestNonRAMDelete()
+        {
+            Directory dir = new MockRAMDirectory();
+            IndexWriter modifier = new IndexWriter(dir, new WhitespaceAnalyzer(), true,
+                                                   IndexWriter.MaxFieldLength.UNLIMITED);
+            modifier.SetMaxBufferedDocs(2);
+            modifier.SetMaxBufferedDeleteTerms(2);
+
+            int id = 0;
+            int value_Renamed = 100;
+
+            for (int i = 0; i < 7; i++)
+            {
+                AddDoc(modifier, ++id, value_Renamed);
+            }
+            modifier.Commit();
+
+            Assert.AreEqual(0, modifier.GetNumBufferedDocuments());
+            Assert.IsTrue(0 < modifier.GetSegmentCount());
+
+            modifier.Commit();
+
+            IndexReader reader = IndexReader.Open(dir, true);
+            Assert.AreEqual(7, reader.NumDocs());
+            reader.Close();
+
+            modifier.DeleteDocuments(new Term("value", System.Convert.ToString(value_Renamed)));
+
+            modifier.Commit();
+
+            reader = IndexReader.Open(dir, true);
+            Assert.AreEqual(0, reader.NumDocs());
+            reader.Close();
+            modifier.Close();
+            dir.Close();
+        }
+
+        [Test]
+        public virtual void TestMaxBufferedDeletes()
+        {
+            Directory dir = new MockRAMDirectory();
+            IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true,
+                                                 IndexWriter.MaxFieldLength.UNLIMITED);
+            writer.SetMaxBufferedDeleteTerms(1);
+            writer.DeleteDocuments(new Term("foobar", "1"));
+            writer.DeleteDocuments(new Term("foobar", "1"));
+            writer.DeleteDocuments(new Term("foobar", "1"));
+            Assert.AreEqual(3, writer.GetFlushDeletesCount());
+            writer.Close();
+            dir.Close();
+        }
+
+        // test when delete terms only apply to ram segments
 		[Test]
 		public virtual void  TestRAMDeletes()
 		{
-			for (int pass = 0; pass < 2; pass++)
-			{
-				for (int t = 0; t < 2; t++)
-				{
-					bool autoCommit = (0 == pass);
-					Directory dir = new MockRAMDirectory();
-					IndexWriter modifier = new IndexWriter(dir, autoCommit, new WhitespaceAnalyzer(), true);
-					modifier.SetMaxBufferedDocs(4);
-					modifier.SetMaxBufferedDeleteTerms(4);
-					
-					int id = 0;
-					int value_Renamed = 100;
-					
-					AddDoc(modifier, ++id, value_Renamed);
-					if (0 == t)
-						modifier.DeleteDocuments(new Term("value", System.Convert.ToString(value_Renamed)));
-					else
-						modifier.DeleteDocuments(new TermQuery(new Term("value", System.Convert.ToString(value_Renamed))));
-					AddDoc(modifier, ++id, value_Renamed);
-					if (0 == t)
-					{
-						modifier.DeleteDocuments(new Term("value", System.Convert.ToString(value_Renamed)));
-						Assert.AreEqual(2, modifier.GetNumBufferedDeleteTerms());
-						Assert.AreEqual(1, modifier.GetBufferedDeleteTermsSize());
-					}
-					else
-						modifier.DeleteDocuments(new TermQuery(new Term("value", System.Convert.ToString(value_Renamed))));
-					
-					AddDoc(modifier, ++id, value_Renamed);
-					Assert.AreEqual(0, modifier.GetSegmentCount());
-					modifier.Flush();
-					
-					modifier.Commit();
-					
-					IndexReader reader = IndexReader.Open(dir);
-					Assert.AreEqual(1, reader.NumDocs());
-					
-					int hitCount = GetHitCount(dir, new Term("id", System.Convert.ToString(id)));
-					Assert.AreEqual(1, hitCount);
-					reader.Close();
-					modifier.Close();
-					dir.Close();
-				}
-			}
+            for (int t = 0; t < 2; t++)
+            {
+                Directory dir = new MockRAMDirectory();
+                IndexWriter modifier = new IndexWriter(dir, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED);
+                modifier.SetMaxBufferedDocs(4);
+                modifier.SetMaxBufferedDeleteTerms(4);
+
+                int id = 0;
+                int value_Renamed = 100;
+
+                AddDoc(modifier, ++id, value_Renamed);
+                if (0 == t)
+                    modifier.DeleteDocuments(new Term("value", System.Convert.ToString(value_Renamed)));
+                else
+                    modifier.DeleteDocuments(new TermQuery(new Term("value", System.Convert.ToString(value_Renamed))));
+                AddDoc(modifier, ++id, value_Renamed);
+                if (0 == t)
+                {
+                    modifier.DeleteDocuments(new Term("value", System.Convert.ToString(value_Renamed)));
+                    Assert.AreEqual(2, modifier.GetNumBufferedDeleteTerms());
+                    Assert.AreEqual(1, modifier.GetBufferedDeleteTermsSize());
+                }
+                else
+                    modifier.DeleteDocuments(new TermQuery(new Term("value", System.Convert.ToString(value_Renamed))));
+
+                AddDoc(modifier, ++id, value_Renamed);
+                Assert.AreEqual(0, modifier.GetSegmentCount());
+                modifier.Commit();
+
+                modifier.Commit();
+
+                IndexReader reader = IndexReader.Open(dir, true);
+                Assert.AreEqual(1, reader.NumDocs());
+
+                int hitCount = GetHitCount(dir, new Term("id", System.Convert.ToString(id)));
+                Assert.AreEqual(1, hitCount);
+                reader.Close();
+                modifier.Close();
+                dir.Close();
+            }
 		}
 		
 		// test when delete terms apply to both disk and ram segments
-		[Test]
-		public virtual void  TestBothDeletes()
-		{
-			for (int pass = 0; pass < 2; pass++)
-			{
-				bool autoCommit = (0 == pass);
-				
-				Directory dir = new MockRAMDirectory();
-				IndexWriter modifier = new IndexWriter(dir, autoCommit, new WhitespaceAnalyzer(), true);
-				modifier.SetMaxBufferedDocs(100);
-				modifier.SetMaxBufferedDeleteTerms(100);
-				
-				int id = 0;
-				int value_Renamed = 100;
-				
-				for (int i = 0; i < 5; i++)
-				{
-					AddDoc(modifier, ++id, value_Renamed);
-				}
-				
-				value_Renamed = 200;
-				for (int i = 0; i < 5; i++)
-				{
-					AddDoc(modifier, ++id, value_Renamed);
-				}
-				modifier.Commit();
-				
-				for (int i = 0; i < 5; i++)
-				{
-					AddDoc(modifier, ++id, value_Renamed);
-				}
-				modifier.DeleteDocuments(new Term("value", System.Convert.ToString(value_Renamed)));
-				
-				modifier.Commit();
-				
-				IndexReader reader = IndexReader.Open(dir);
-				Assert.AreEqual(5, reader.NumDocs());
-				modifier.Close();
-			}
-		}
-		
-		// test that batched delete terms are flushed together
-		[Test]
-		public virtual void  TestBatchDeletes()
-		{
-			for (int pass = 0; pass < 2; pass++)
-			{
-				bool autoCommit = (0 == pass);
-				Directory dir = new MockRAMDirectory();
-				IndexWriter modifier = new IndexWriter(dir, autoCommit, new WhitespaceAnalyzer(), true);
-				modifier.SetMaxBufferedDocs(2);
-				modifier.SetMaxBufferedDeleteTerms(2);
-				
-				int id = 0;
-				int value_Renamed = 100;
-				
-				for (int i = 0; i < 7; i++)
-				{
-					AddDoc(modifier, ++id, value_Renamed);
-				}
-				modifier.Commit();
-				
-				IndexReader reader = IndexReader.Open(dir);
-				Assert.AreEqual(7, reader.NumDocs());
-				reader.Close();
-				
-				id = 0;
-				modifier.DeleteDocuments(new Term("id", System.Convert.ToString(++id)));
-				modifier.DeleteDocuments(new Term("id", System.Convert.ToString(++id)));
-				
-				modifier.Commit();
-				
-				reader = IndexReader.Open(dir);
-				Assert.AreEqual(5, reader.NumDocs());
-				reader.Close();
-				
-				Term[] terms = new Term[3];
-				for (int i = 0; i < terms.Length; i++)
-				{
-					terms[i] = new Term("id", System.Convert.ToString(++id));
-				}
-				modifier.DeleteDocuments(terms);
-				modifier.Commit();
-				reader = IndexReader.Open(dir);
-				Assert.AreEqual(2, reader.NumDocs());
-				reader.Close();
-				
-				modifier.Close();
-				dir.Close();
-			}
-		}
-		
-		// test deleteAll()
+        [Test]
+        public virtual void TestBothDeletes()
+        {
+            Directory dir = new MockRAMDirectory();
+            IndexWriter modifier = new IndexWriter(dir, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED);
+            modifier.SetMaxBufferedDocs(100);
+            modifier.SetMaxBufferedDeleteTerms(100);
+
+            int id = 0;
+            int value_Renamed = 100;
+
+            for (int i = 0; i < 5; i++)
+            {
+                AddDoc(modifier, ++id, value_Renamed);
+            }
+
+            value_Renamed = 200;
+            for (int i = 0; i < 5; i++)
+            {
+                AddDoc(modifier, ++id, value_Renamed);
+            }
+            modifier.Commit();
+
+            for (int i = 0; i < 5; i++)
+            {
+                AddDoc(modifier, ++id, value_Renamed);
+            }
+            modifier.DeleteDocuments(new Term("value", System.Convert.ToString(value_Renamed)));
+
+            modifier.Commit();
+
+            IndexReader reader = IndexReader.Open(dir, true);
+            Assert.AreEqual(5, reader.NumDocs());
+            modifier.Close();
+        }
+
+        // test that batched delete terms are flushed together
+        [Test]
+        public virtual void TestBatchDeletes()
+        {
+            Directory dir = new MockRAMDirectory();
+            IndexWriter modifier = new IndexWriter(dir, new WhitespaceAnalyzer(), true,
+                                                   IndexWriter.MaxFieldLength.UNLIMITED);
+            modifier.SetMaxBufferedDocs(2);
+            modifier.SetMaxBufferedDeleteTerms(2);
+
+            int id = 0;
+            int value_Renamed = 100;
+
+            for (int i = 0; i < 7; i++)
+            {
+                AddDoc(modifier, ++id, value_Renamed);
+            }
+            modifier.Commit();
+
+            IndexReader reader = IndexReader.Open(dir, true);
+            Assert.AreEqual(7, reader.NumDocs());
+            reader.Close();
+
+            id = 0;
+            modifier.DeleteDocuments(new Term("id", System.Convert.ToString(++id)));
+            modifier.DeleteDocuments(new Term("id", System.Convert.ToString(++id)));
+
+            modifier.Commit();
+
+            reader = IndexReader.Open(dir, true);
+            Assert.AreEqual(5, reader.NumDocs());
+            reader.Close();
+
+            Term[] terms = new Term[3];
+            for (int i = 0; i < terms.Length; i++)
+            {
+                terms[i] = new Term("id", System.Convert.ToString(++id));
+            }
+            modifier.DeleteDocuments(terms);
+            modifier.Commit();
+            reader = IndexReader.Open(dir, true);
+            Assert.AreEqual(2, reader.NumDocs());
+            reader.Close();
+
+            modifier.Close();
+            dir.Close();
+        }
+
+        // test deleteAll()
 		[Test]
 		public virtual void  TestDeleteAll()
 		{
-			for (int pass = 0; pass < 2; pass++)
-			{
-				bool autoCommit = (0 == pass);
-				Directory dir = new MockRAMDirectory();
-				IndexWriter modifier = new IndexWriter(dir, autoCommit, new WhitespaceAnalyzer(), true);
-				modifier.SetMaxBufferedDocs(2);
-				modifier.SetMaxBufferedDeleteTerms(2);
-				
-				int id = 0;
-				int value_Renamed = 100;
-				
-				for (int i = 0; i < 7; i++)
-				{
-					AddDoc(modifier, ++id, value_Renamed);
-				}
-				modifier.Commit();
-				
-				IndexReader reader = IndexReader.Open(dir);
-				Assert.AreEqual(7, reader.NumDocs());
-				reader.Close();
-				
-				// Add 1 doc (so we will have something buffered)
-				AddDoc(modifier, 99, value_Renamed);
-				
-				// Delete all
-				modifier.DeleteAll();
-				
-				// Delete all shouldn't be on disk yet
-				reader = IndexReader.Open(dir);
-				Assert.AreEqual(7, reader.NumDocs());
-				reader.Close();
-				
-				// Add a doc and update a doc (after the deleteAll, before the commit)
-				AddDoc(modifier, 101, value_Renamed);
-				UpdateDoc(modifier, 102, value_Renamed);
-				
-				// commit the delete all
-				modifier.Commit();
-				
-				// Validate there are no docs left
-				reader = IndexReader.Open(dir);
-				Assert.AreEqual(2, reader.NumDocs());
-				reader.Close();
-				
-				modifier.Close();
-				dir.Close();
-			}
+		    Directory dir = new MockRAMDirectory();
+            IndexWriter modifier = new IndexWriter(dir, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED);
+		    modifier.SetMaxBufferedDocs(2);
+		    modifier.SetMaxBufferedDeleteTerms(2);
+
+		    int id = 0;
+		    int value_Renamed = 100;
+
+		    for (int i = 0; i < 7; i++)
+		    {
+		        AddDoc(modifier, ++id, value_Renamed);
+		    }
+		    modifier.Commit();
+
+		    IndexReader reader = IndexReader.Open(dir, true);
+		    Assert.AreEqual(7, reader.NumDocs());
+		    reader.Close();
+
+		    // Add 1 doc (so we will have something buffered)
+		    AddDoc(modifier, 99, value_Renamed);
+
+		    // Delete all
+		    modifier.DeleteAll();
+
+		    // Delete all shouldn't be on disk yet
+		    reader = IndexReader.Open(dir, true);
+		    Assert.AreEqual(7, reader.NumDocs());
+		    reader.Close();
+
+		    // Add a doc and update a doc (after the deleteAll, before the commit)
+		    AddDoc(modifier, 101, value_Renamed);
+		    UpdateDoc(modifier, 102, value_Renamed);
+
+		    // commit the delete all
+		    modifier.Commit();
+
+		    // Validate there are no docs left
+		    reader = IndexReader.Open(dir, true);
+		    Assert.AreEqual(2, reader.NumDocs());
+		    reader.Close();
+
+		    modifier.Close();
+		    dir.Close();
 		}
-		
-		// test rollback of deleteAll()
+
+        // test rollback of deleteAll()
 		[Test]
 		public virtual void  TestDeleteAllRollback()
 		{
 			Directory dir = new MockRAMDirectory();
-			IndexWriter modifier = new IndexWriter(dir, false, new WhitespaceAnalyzer(), true);
+            IndexWriter modifier = new IndexWriter(dir, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED);
 			modifier.SetMaxBufferedDocs(2);
 			modifier.SetMaxBufferedDeleteTerms(2);
 			
@@ -453,8 +426,8 @@ namespace Lucene.Net.Index
 			modifier.Commit();
 			
 			AddDoc(modifier, ++id, value_Renamed);
-			
-			IndexReader reader = IndexReader.Open(dir);
+
+		    IndexReader reader = IndexReader.Open(dir, true);
 			Assert.AreEqual(7, reader.NumDocs());
 			reader.Close();
 			
@@ -466,7 +439,7 @@ namespace Lucene.Net.Index
 			modifier.Close();
 			
 			// Validate that the docs are still there
-			reader = IndexReader.Open(dir);
+		    reader = IndexReader.Open(dir, true);
 			Assert.AreEqual(7, reader.NumDocs());
 			reader.Close();
 			
@@ -479,7 +452,7 @@ namespace Lucene.Net.Index
 		public virtual void  TestDeleteAllNRT()
 		{
 			Directory dir = new MockRAMDirectory();
-			IndexWriter modifier = new IndexWriter(dir, false, new WhitespaceAnalyzer(), true);
+            IndexWriter modifier = new IndexWriter(dir, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED);
 			modifier.SetMaxBufferedDocs(2);
 			modifier.SetMaxBufferedDeleteTerms(2);
 			
@@ -512,7 +485,7 @@ namespace Lucene.Net.Index
 			modifier.Close();
 			
 			// Validate that the docs are still there
-			reader = IndexReader.Open(dir);
+		    reader = IndexReader.Open(dir, true);
 			Assert.AreEqual(7, reader.NumDocs());
 			reader.Close();
 			
@@ -541,7 +514,7 @@ namespace Lucene.Net.Index
 		
 		private int GetHitCount(Directory dir, Term term)
 		{
-			IndexSearcher searcher = new IndexSearcher(dir);
+		    IndexSearcher searcher = new IndexSearcher(dir, true);
 			int hitCount = searcher.Search(new TermQuery(term), null, 1000).TotalHits;
 			searcher.Close();
 			return hitCount;
@@ -562,376 +535,371 @@ namespace Lucene.Net.Index
 		/// <summary> Make sure if modifier tries to commit but hits disk full that modifier
 		/// remains consistent and usable. Similar to TestIndexReader.testDiskFull().
 		/// </summary>
-		private void  TestOperationsOnDiskFull(bool updates)
+        private void TestOperationsOnDiskFull(bool updates)
 		{
-			
-			bool debug = false;
-			Term searchTerm = new Term("content", "aaa");
-			int START_COUNT = 157;
-			int END_COUNT = 144;
-			
-			for (int pass = 0; pass < 2; pass++)
-			{
-				bool autoCommit = (0 == pass);
-				
-				// First build up a starting index:
-				MockRAMDirectory startDir = new MockRAMDirectory();
-				IndexWriter writer = new IndexWriter(startDir, autoCommit, new WhitespaceAnalyzer(), true);
-				for (int i = 0; i < 157; i++)
-				{
-					Document d = new Document();
-					d.Add(new Field("id", System.Convert.ToString(i), Field.Store.YES, Field.Index.NOT_ANALYZED));
-					d.Add(new Field("content", "aaa " + i, Field.Store.NO, Field.Index.ANALYZED));
-					writer.AddDocument(d);
-				}
-				writer.Close();
-				
-				long diskUsage = startDir.SizeInBytes();
-				long diskFree = diskUsage + 10;
-				
-				System.IO.IOException err = null;
-				
-				bool done = false;
-				
-				// Iterate w/ ever increasing free disk space:
-				while (!done)
-				{
-					MockRAMDirectory dir = new MockRAMDirectory(startDir);
-					dir.SetPreventDoubleWrite(false);
-					IndexWriter modifier = new IndexWriter(dir, autoCommit, new WhitespaceAnalyzer());
-					
-					modifier.SetMaxBufferedDocs(1000); // use flush or close
-					modifier.SetMaxBufferedDeleteTerms(1000); // use flush or close
-					
-					// For each disk size, first try to commit against
-					// dir that will hit random IOExceptions & disk
-					// full; after, give it infinite disk space & turn
-					// off random IOExceptions & retry w/ same reader:
-					bool success = false;
-					
-					for (int x = 0; x < 2; x++)
-					{
-						
-						double rate = 0.1;
-						double diskRatio = ((double) diskFree) / diskUsage;
-						long thisDiskFree;
-						System.String testName;
-						
-						if (0 == x)
-						{
-							thisDiskFree = diskFree;
-							if (diskRatio >= 2.0)
-							{
-								rate /= 2;
-							}
-							if (diskRatio >= 4.0)
-							{
-								rate /= 2;
-							}
-							if (diskRatio >= 6.0)
-							{
-								rate = 0.0;
-							}
-							if (debug)
-							{
-								System.Console.Out.WriteLine("\ncycle: " + diskFree + " bytes");
-							}
-							testName = "disk full during reader.close() @ " + thisDiskFree + " bytes";
-						}
-						else
-						{
-							thisDiskFree = 0;
-							rate = 0.0;
-							if (debug)
-							{
-								System.Console.Out.WriteLine("\ncycle: same writer: unlimited disk space");
-							}
-							testName = "reader re-use after disk full";
-						}
-						
-						dir.SetMaxSizeInBytes(thisDiskFree);
-						dir.SetRandomIOExceptionRate(rate, diskFree);
-						
-						try
-						{
-							if (0 == x)
-							{
-								int docId = 12;
-								for (int i = 0; i < 13; i++)
-								{
-									if (updates)
-									{
-										Document d = new Document();
-										d.Add(new Field("id", System.Convert.ToString(i), Field.Store.YES, Field.Index.NOT_ANALYZED));
-										d.Add(new Field("content", "bbb " + i, Field.Store.NO, Field.Index.ANALYZED));
-										modifier.UpdateDocument(new Term("id", System.Convert.ToString(docId)), d);
-									}
-									else
-									{
-										// deletes
-										modifier.DeleteDocuments(new Term("id", System.Convert.ToString(docId)));
-										// modifier.setNorm(docId, "contents", (float)2.0);
-									}
-									docId += 12;
-								}
-							}
-							modifier.Close();
-							success = true;
-							if (0 == x)
-							{
-								done = true;
-							}
-						}
-						catch (System.IO.IOException e)
-						{
-							if (debug)
-							{
-								System.Console.Out.WriteLine("  hit IOException: " + e);
-								System.Console.Out.WriteLine(e.StackTrace);
-							}
-							err = e;
-							if (1 == x)
-							{
-								System.Console.Error.WriteLine(e.StackTrace);
-								Assert.Fail(testName + " hit IOException after disk space was freed up");
-							}
-						}
-						
-						// If the close() succeeded, make sure there are
-						// no unreferenced files.
-                        if (success)
-                        {
-                            Lucene.Net.Util._TestUtil.CheckIndex(dir);
-                            TestIndexWriter.AssertNoUnreferencedFiles(dir, "after writer.close");
-                        }
-						
-						// Finally, verify index is not corrupt, and, if
-						// we succeeded, we see all docs changed, and if
-						// we failed, we see either all docs or no docs
-						// changed (transactional semantics):
-						IndexReader newReader = null;
-						try
-						{
-							newReader = IndexReader.Open(dir);
-						}
-						catch (System.IO.IOException e)
-						{
-							System.Console.Error.WriteLine(e.StackTrace);
-							Assert.Fail(testName + ":exception when creating IndexReader after disk full during close: " + e);
-						}
-						
-						IndexSearcher searcher = new IndexSearcher(newReader);
-						ScoreDoc[] hits = null;
-						try
-						{
-							hits = searcher.Search(new TermQuery(searchTerm), null, 1000).ScoreDocs;
-						}
-						catch (System.IO.IOException e)
-						{
-							System.Console.Error.WriteLine(e.StackTrace);
-							Assert.Fail(testName + ": exception when searching: " + e);
-						}
-						int result2 = hits.Length;
-						if (success)
-						{
-							if (x == 0 && result2 != END_COUNT)
-							{
-								Assert.Fail(testName + ": method did not throw exception but hits.length for search on term 'aaa' is " + result2 + " instead of expected " + END_COUNT);
-							}
-							else if (x == 1 && result2 != START_COUNT && result2 != END_COUNT)
-							{
-								// It's possible that the first exception was
-								// "recoverable" wrt pending deletes, in which
-								// case the pending deletes are retained and
-								// then re-flushing (with plenty of disk
-								// space) will succeed in flushing the
-								// deletes:
-								Assert.Fail(testName + ": method did not throw exception but hits.length for search on term 'aaa' is " + result2 + " instead of expected " + START_COUNT + " or " + END_COUNT);
-							}
-						}
-						else
-						{
-							// On hitting exception we still may have added
-							// all docs:
-							if (result2 != START_COUNT && result2 != END_COUNT)
-							{
-								System.Console.Error.WriteLine(err.StackTrace);
-								Assert.Fail(testName + ": method did throw exception but hits.length for search on term 'aaa' is " + result2 + " instead of expected " + START_COUNT + " or " + END_COUNT);
-							}
-						}
-						
-						searcher.Close();
-						newReader.Close();
-						
-						if (result2 == END_COUNT)
-						{
-							break;
-						}
-					}
-					
-					dir.Close();
-					
-					// Try again with 10 more bytes of free space:
-					diskFree += 10;
-				}
-			}
+
+		    bool debug = false;
+		    Term searchTerm = new Term("content", "aaa");
+		    int START_COUNT = 157;
+		    int END_COUNT = 144;
+
+		    // First build up a starting index:
+		    MockRAMDirectory startDir = new MockRAMDirectory();
+            IndexWriter writer = new IndexWriter(startDir, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED);
+		    for (int i = 0; i < 157; i++)
+		    {
+		        Document d = new Document();
+		        d.Add(new Field("id", System.Convert.ToString(i), Field.Store.YES, Field.Index.NOT_ANALYZED));
+		        d.Add(new Field("content", "aaa " + i, Field.Store.NO, Field.Index.ANALYZED));
+		        writer.AddDocument(d);
+		    }
+		    writer.Close();
+
+		    long diskUsage = startDir.SizeInBytes();
+		    long diskFree = diskUsage + 10;
+
+		    System.IO.IOException err = null;
+
+		    bool done = false;
+
+		    // Iterate w/ ever increasing free disk space:
+		    while (!done)
+		    {
+		        MockRAMDirectory dir = new MockRAMDirectory(startDir);
+		        dir.SetPreventDoubleWrite(false);
+                IndexWriter modifier = new IndexWriter(dir, new WhitespaceAnalyzer(), IndexWriter.MaxFieldLength.UNLIMITED);
+
+		        modifier.SetMaxBufferedDocs(1000); // use flush or close
+		        modifier.SetMaxBufferedDeleteTerms(1000); // use flush or close
+
+		        // For each disk size, first try to commit against
+		        // dir that will hit random IOExceptions & disk
+		        // full; after, give it infinite disk space & turn
+		        // off random IOExceptions & retry w/ same reader:
+		        bool success = false;
+
+		        for (int x = 0; x < 2; x++)
+		        {
+
+		            double rate = 0.1;
+		            double diskRatio = ((double) diskFree)/diskUsage;
+		            long thisDiskFree;
+		            System.String testName;
+
+		            if (0 == x)
+		            {
+		                thisDiskFree = diskFree;
+		                if (diskRatio >= 2.0)
+		                {
+		                    rate /= 2;
+		                }
+		                if (diskRatio >= 4.0)
+		                {
+		                    rate /= 2;
+		                }
+		                if (diskRatio >= 6.0)
+		                {
+		                    rate = 0.0;
+		                }
+		                if (debug)
+		                {
+		                    System.Console.Out.WriteLine("\ncycle: " + diskFree + " bytes");
+		                }
+		                testName = "disk full during reader.close() @ " + thisDiskFree + " bytes";
+		            }
+		            else
+		            {
+		                thisDiskFree = 0;
+		                rate = 0.0;
+		                if (debug)
+		                {
+		                    System.Console.Out.WriteLine("\ncycle: same writer: unlimited disk space");
+		                }
+		                testName = "reader re-use after disk full";
+		            }
+
+		            dir.SetMaxSizeInBytes(thisDiskFree);
+		            dir.SetRandomIOExceptionRate(rate, diskFree);
+
+		            try
+		            {
+		                if (0 == x)
+		                {
+		                    int docId = 12;
+		                    for (int i = 0; i < 13; i++)
+		                    {
+		                        if (updates)
+		                        {
+		                            Document d = new Document();
+		                            d.Add(new Field("id", System.Convert.ToString(i), Field.Store.YES,
+		                                            Field.Index.NOT_ANALYZED));
+		                            d.Add(new Field("content", "bbb " + i, Field.Store.NO, Field.Index.ANALYZED));
+		                            modifier.UpdateDocument(new Term("id", System.Convert.ToString(docId)), d);
+		                        }
+		                        else
+		                        {
+		                            // deletes
+		                            modifier.DeleteDocuments(new Term("id", System.Convert.ToString(docId)));
+		                            // modifier.setNorm(docId, "contents", (float)2.0);
+		                        }
+		                        docId += 12;
+		                    }
+		                }
+		                modifier.Close();
+		                success = true;
+		                if (0 == x)
+		                {
+		                    done = true;
+		                }
+		            }
+		            catch (System.IO.IOException e)
+		            {
+		                if (debug)
+		                {
+		                    System.Console.Out.WriteLine("  hit IOException: " + e);
+		                    System.Console.Out.WriteLine(e.StackTrace);
+		                }
+		                err = e;
+		                if (1 == x)
+		                {
+		                    System.Console.Error.WriteLine(e.StackTrace);
+		                    Assert.Fail(testName + " hit IOException after disk space was freed up");
+		                }
+		            }
+
+		            // If the close() succeeded, make sure there are
+		            // no unreferenced files.
+		            if (success)
+		            {
+		                Lucene.Net.Util._TestUtil.CheckIndex(dir);
+		                TestIndexWriter.AssertNoUnreferencedFiles(dir, "after writer.close");
+		            }
+
+		            // Finally, verify index is not corrupt, and, if
+		            // we succeeded, we see all docs changed, and if
+		            // we failed, we see either all docs or no docs
+		            // changed (transactional semantics):
+		            IndexReader newReader = null;
+		            try
+		            {
+		                newReader = IndexReader.Open(dir, true);
+		            }
+		            catch (System.IO.IOException e)
+		            {
+		                System.Console.Error.WriteLine(e.StackTrace);
+		                Assert.Fail(testName + ":exception when creating IndexReader after disk full during close: " + e);
+		            }
+
+		            IndexSearcher searcher = new IndexSearcher(newReader);
+		            ScoreDoc[] hits = null;
+		            try
+		            {
+		                hits = searcher.Search(new TermQuery(searchTerm), null, 1000).ScoreDocs;
+		            }
+		            catch (System.IO.IOException e)
+		            {
+		                System.Console.Error.WriteLine(e.StackTrace);
+		                Assert.Fail(testName + ": exception when searching: " + e);
+		            }
+		            int result2 = hits.Length;
+		            if (success)
+		            {
+		                if (x == 0 && result2 != END_COUNT)
+		                {
+		                    Assert.Fail(testName +
+		                                ": method did not throw exception but hits.length for search on term 'aaa' is " +
+		                                result2 + " instead of expected " + END_COUNT);
+		                }
+		                else if (x == 1 && result2 != START_COUNT && result2 != END_COUNT)
+		                {
+		                    // It's possible that the first exception was
+		                    // "recoverable" wrt pending deletes, in which
+		                    // case the pending deletes are retained and
+		                    // then re-flushing (with plenty of disk
+		                    // space) will succeed in flushing the
+		                    // deletes:
+		                    Assert.Fail(testName +
+		                                ": method did not throw exception but hits.length for search on term 'aaa' is " +
+		                                result2 + " instead of expected " + START_COUNT + " or " + END_COUNT);
+		                }
+		            }
+		            else
+		            {
+		                // On hitting exception we still may have added
+		                // all docs:
+		                if (result2 != START_COUNT && result2 != END_COUNT)
+		                {
+		                    System.Console.Error.WriteLine(err.StackTrace);
+		                    Assert.Fail(testName + ": method did throw exception but hits.length for search on term 'aaa' is " +
+		                                result2 + " instead of expected " + START_COUNT + " or " + END_COUNT);
+		                }
+		            }
+
+		            searcher.Close();
+		            newReader.Close();
+
+		            if (result2 == END_COUNT)
+		            {
+		                break;
+		            }
+		        }
+
+		        dir.Close();
+
+		        // Try again with 10 more bytes of free space:
+		        diskFree += 10;
+		    }
 		}
-		
-		// This test tests that buffered deletes are cleared when
+
+        // This test tests that buffered deletes are cleared when
 		// an Exception is hit during flush.
-		[Test]
-		public virtual void  TestErrorAfterApplyDeletes()
-		{
-			
-			MockRAMDirectory.Failure failure = new AnonymousClassFailure(this);
-			
-			// create a couple of files
-			
-			System.String[] keywords = new System.String[]{"1", "2"};
-			System.String[] unindexed = new System.String[]{"Netherlands", "Italy"};
-			System.String[] unstored = new System.String[]{"Amsterdam has lots of bridges", "Venice has lots of canals"};
-			System.String[] text = new System.String[]{"Amsterdam", "Venice"};
-			
-			for (int pass = 0; pass < 2; pass++)
-			{
-				bool autoCommit = (0 == pass);
-				MockRAMDirectory dir = new MockRAMDirectory();
-				IndexWriter modifier = new IndexWriter(dir, autoCommit, new WhitespaceAnalyzer(), true);
-				modifier.SetUseCompoundFile(true);
-				modifier.SetMaxBufferedDeleteTerms(2);
-				
-				dir.FailOn(failure.Reset());
-				
-				for (int i = 0; i < keywords.Length; i++)
-				{
-					Document doc = new Document();
-					doc.Add(new Field("id", keywords[i], Field.Store.YES, Field.Index.NOT_ANALYZED));
-					doc.Add(new Field("country", unindexed[i], Field.Store.YES, Field.Index.NO));
-					doc.Add(new Field("contents", unstored[i], Field.Store.NO, Field.Index.ANALYZED));
-					doc.Add(new Field("city", text[i], Field.Store.YES, Field.Index.ANALYZED));
-					modifier.AddDocument(doc);
-				}
-				// flush (and commit if ac)
-				
-				modifier.Optimize();
-				modifier.Commit();
-				
-				// one of the two files hits
-				
-				Term term = new Term("city", "Amsterdam");
-				int hitCount = GetHitCount(dir, term);
-				Assert.AreEqual(1, hitCount);
-				
-				// open the writer again (closed above)
-				
-				// delete the doc
-				// max buf del terms is two, so this is buffered
-				
-				modifier.DeleteDocuments(term);
-				
-				// add a doc (needed for the !ac case; see below)
-				// doc remains buffered
-				
-				Document doc2 = new Document();
-				modifier.AddDocument(doc2);
-				
-				// commit the changes, the buffered deletes, and the new doc
-				
-				// The failure object will fail on the first write after the del
-				// file gets created when processing the buffered delete
-				
-				// in the ac case, this will be when writing the new segments
-				// files so we really don't need the new doc, but it's harmless
-				
-				// in the !ac case, a new segments file won't be created but in
-				// this 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)
-				
-				bool failed = false;
-				try
-				{
-					modifier.Commit();
-				}
-				catch (System.IO.IOException ioe)
-				{
-					failed = true;
-				}
-				
-				Assert.IsTrue(failed);
-				
-				// The commit above failed, so we need to retry it (which will
-				// succeed, because the failure is a one-shot)
-				
-				modifier.Commit();
-				
-				hitCount = GetHitCount(dir, term);
-				
-				// Make sure the delete was successfully flushed:
-				Assert.AreEqual(0, hitCount);
-				
-				modifier.Close();
-				dir.Close();
-			}
-		}
-		
-		// This test tests that the files created by the docs writer before
+        [Test]
+        public virtual void TestErrorAfterApplyDeletes()
+        {
+            MockRAMDirectory.Failure failure = new AnonymousClassFailure(this);
+
+            // create a couple of files
+
+            System.String[] keywords = new System.String[] {"1", "2"};
+            System.String[] unindexed = new System.String[] {"Netherlands", "Italy"};
+            System.String[] unstored = new System.String[]
+                                           {"Amsterdam has lots of bridges", "Venice has lots of canals"};
+            System.String[] text = new System.String[] {"Amsterdam", "Venice"};
+
+            MockRAMDirectory dir = new MockRAMDirectory();
+            IndexWriter modifier = new IndexWriter(dir, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED);
+            modifier.SetUseCompoundFile(true);
+            modifier.SetMaxBufferedDeleteTerms(2);
+
+            dir.FailOn(failure.Reset());
+
+            for (int i = 0; i < keywords.Length; i++)
+            {
+                Document doc = new Document();
+                doc.Add(new Field("id", keywords[i], Field.Store.YES, Field.Index.NOT_ANALYZED));
+                doc.Add(new Field("country", unindexed[i], Field.Store.YES, Field.Index.NO));
+                doc.Add(new Field("contents", unstored[i], Field.Store.NO, Field.Index.ANALYZED));
+                doc.Add(new Field("city", text[i], Field.Store.YES, Field.Index.ANALYZED));
+                modifier.AddDocument(doc);
+            }
+            // flush (and commit if ac)
+
+            modifier.Optimize();
+            modifier.Commit();
+
+            // one of the two files hits
+
+            Term term = new Term("city", "Amsterdam");
+            int hitCount = GetHitCount(dir, term);
+            Assert.AreEqual(1, hitCount);
+
+            // open the writer again (closed above)
+
+            // delete the doc
+            // max buf del terms is two, so this is buffered
+
+            modifier.DeleteDocuments(term);
+
+            // add a doc (needed for the !ac case; see below)
+            // doc remains buffered
+
+            Document doc2 = new Document();
+            modifier.AddDocument(doc2);
+
+            // commit the changes, the buffered deletes, and the new doc
+
+            // The failure object will fail on the first write after the del
+            // file gets created when processing the buffered delete
+
+            // in the ac case, this will be when writing the new segments
+            // files so we really don't need the new doc, but it's harmless
+
+            // in the !ac case, a new segments file won't be created but in
+            // this 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)
+
+            bool failed = false;
+            try
+            {
+                modifier.Commit();
+            }
+            catch (System.IO.IOException ioe)
+            {
+                failed = true;
+            }
+
+            Assert.IsTrue(failed);
+
+            // The commit above failed, so we need to retry it (which will
+            // succeed, because the failure is a one-shot)
+
+            modifier.Commit();
+
+            hitCount = GetHitCount(dir, term);
+
+            // Make sure the delete was successfully flushed:
+            Assert.AreEqual(0, hitCount);
+
+            modifier.Close();
+            dir.Close();
+        }
+
+        // This test tests that the files created by the docs writer before
 		// a segment is written are cleaned up if there's an i/o error
-		
-		[Test]
-		public virtual void  TestErrorInDocsWriterAdd()
-		{
-			
-			MockRAMDirectory.Failure failure = new AnonymousClassFailure1(this);
-			
-			// create a couple of files
-			
-			System.String[] keywords = new System.String[]{"1", "2"};
-			System.String[] unindexed = new System.String[]{"Netherlands", "Italy"};
-			System.String[] unstored = new System.String[]{"Amsterdam has lots of bridges", "Venice has lots of canals"};
-			System.String[] text = new System.String[]{"Amsterdam", "Venice"};
-			
-			for (int pass = 0; pass < 2; pass++)
-			{
-				bool autoCommit = (0 == pass);
-				MockRAMDirectory dir = new MockRAMDirectory();
-				IndexWriter modifier = new IndexWriter(dir, autoCommit, new WhitespaceAnalyzer(), true);
-				
-				dir.FailOn(failure.Reset());
-				
-				for (int i = 0; i < keywords.Length; i++)
-				{
-					Document doc = new Document();
-					doc.Add(new Field("id", keywords[i], Field.Store.YES, Field.Index.NOT_ANALYZED));
-					doc.Add(new Field("country", unindexed[i], Field.Store.YES, Field.Index.NO));
-					doc.Add(new Field("contents", unstored[i], Field.Store.NO, Field.Index.ANALYZED));
-					doc.Add(new Field("city", text[i], Field.Store.YES, Field.Index.ANALYZED));
-					try
-					{
-						modifier.AddDocument(doc);
-					}
-					catch (System.IO.IOException io)
-					{
-						break;
-					}
-				}
-				
-				System.String[] startFiles = dir.ListAll();
-				SegmentInfos infos = new SegmentInfos();
-				infos.Read(dir);
-				new IndexFileDeleter(dir, new KeepOnlyLastCommitDeletionPolicy(), infos, null, null,null);
-				System.String[] endFiles = dir.ListAll();
-				
-				if (!SupportClass.CollectionsHelper.CompareStringArrays(startFiles, endFiles))
-				{
-					Assert.Fail("docswriter abort() failed to delete unreferenced files:\n  before delete:\n    " + ArrayToString(startFiles) + "\n  after delete:\n    " + ArrayToString(endFiles));
-				}
-				
-				modifier.Close();
-			}
-		}
-		
-		private System.String ArrayToString(System.String[] l)
+
+        [Test]
+        public virtual void TestErrorInDocsWriterAdd()
+        {
+
+            MockRAMDirectory.Failure failure = new AnonymousClassFailure1(this);
+
+            // create a couple of files
+
+            System.String[] keywords = new System.String[] {"1", "2"};
+            System.String[] unindexed = new System.String[] {"Netherlands", "Italy"};
+            System.String[] unstored = new System.String[]
+                                           {"Amsterdam has lots of bridges", "Venice has lots of canals"};
+            System.String[] text = new System.String[] {"Amsterdam", "Venice"};
+
+            MockRAMDirectory dir = new MockRAMDirectory();
+            IndexWriter modifier = new IndexWriter(dir, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED);
+
+            dir.FailOn(failure.Reset());
+
+            for (int i = 0; i < keywords.Length; i++)
+            {
+                Document doc = new Document();
+                doc.Add(new Field("id", keywords[i], Field.Store.YES, Field.Index.NOT_ANALYZED));
+                doc.Add(new Field("country", unindexed[i], Field.Store.YES, Field.Index.NO));
+                doc.Add(new Field("contents", unstored[i], Field.Store.NO, Field.Index.ANALYZED));
+                doc.Add(new Field("city", text[i], Field.Store.YES, Field.Index.ANALYZED));
+                try
+                {
+                    modifier.AddDocument(doc);
+                }
+                catch (System.IO.IOException io)
+                {
+                    break;
+                }
+            }
+
+            System.String[] startFiles = dir.ListAll();
+            SegmentInfos infos = new SegmentInfos();
+            infos.Read(dir);
+            new IndexFileDeleter(dir, new KeepOnlyLastCommitDeletionPolicy(), infos, null, null, null);
+            System.String[] endFiles = dir.ListAll();
+
+            if (!CollectionsHelper.CompareStringArrays(startFiles, endFiles))
+            {
+                Assert.Fail("docswriter abort() failed to delete unreferenced files:\n  before delete:\n    " +
+                            ArrayToString(startFiles) + "\n  after delete:\n    " + ArrayToString(endFiles));
+            }
+
+            modifier.Close();
+        }
+
+        private System.String ArrayToString(System.String[] l)
 		{
 			System.String s = "";
 			for (int i = 0; i < l.Length; i++)

Modified: incubator/lucene.net/trunk/test/core/Index/TestIndexWriterExceptions.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/test/core/Index/TestIndexWriterExceptions.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/test/core/Index/TestIndexWriterExceptions.cs (original)
+++ incubator/lucene.net/trunk/test/core/Index/TestIndexWriterExceptions.cs Tue Feb 28 22:43:08 2012
@@ -16,7 +16,7 @@
  */
 
 using System;
-
+using Lucene.Net.Support;
 using NUnit.Framework;
 
 using Analyzer = Lucene.Net.Analysis.Analyzer;
@@ -48,7 +48,7 @@ namespace Lucene.Net.Index
             return tvSettings[random.Next(tvSettings.Length)];
         }
 		
-		private class IndexerThread:SupportClass.ThreadClass
+		private class IndexerThread:ThreadClass
 		{
 			private void  InitBlock(TestIndexWriterExceptions enclosingInstance)
 			{
@@ -110,7 +110,7 @@ namespace Lucene.Net.Index
 					{
 						if (Lucene.Net.Index.TestIndexWriterExceptions.DEBUG)
 						{
-							System.Console.Out.WriteLine(SupportClass.ThreadClass.CurrentThread().Name + ": EXC: ");
+							System.Console.Out.WriteLine(ThreadClass.CurrentThread().Name + ": EXC: ");
 							System.Console.Out.WriteLine(re.StackTrace);
 						}
 						try
@@ -119,7 +119,7 @@ namespace Lucene.Net.Index
 						}
 						catch (System.IO.IOException ioe)
 						{
-							System.Console.Out.WriteLine(SupportClass.ThreadClass.Current().Name + ": unexpected exception1");
+							System.Console.Out.WriteLine(ThreadClass.Current().Name + ": unexpected exception1");
 							System.Console.Out.WriteLine(ioe.StackTrace);
 							failure = ioe;
 							break;
@@ -127,7 +127,7 @@ namespace Lucene.Net.Index
 					}
 					catch (System.Exception t)
 					{
-						System.Console.Out.WriteLine(SupportClass.ThreadClass.Current().Name + ": unexpected exception2");
+						System.Console.Out.WriteLine(ThreadClass.Current().Name + ": unexpected exception2");
 						System.Console.Out.WriteLine(t.StackTrace);
 						failure = t;
 						break;
@@ -144,7 +144,7 @@ namespace Lucene.Net.Index
 					}
 					catch (System.Exception t)
 					{
-						System.Console.Out.WriteLine(SupportClass.ThreadClass.Current().Name + ": unexpected exception3");
+						System.Console.Out.WriteLine(ThreadClass.Current().Name + ": unexpected exception3");
 						System.Console.Out.WriteLine(t.StackTrace);
 						failure = t;
 						break;
@@ -183,10 +183,10 @@ namespace Lucene.Net.Index
 				{
 					if (Lucene.Net.Index.TestIndexWriterExceptions.DEBUG)
 					{
-						System.Console.Out.WriteLine(SupportClass.ThreadClass.Current().Name + ": NOW FAIL: " + name);
+						System.Console.Out.WriteLine(ThreadClass.Current().Name + ": NOW FAIL: " + name);
 						//new Throwable().printStackTrace(System.out);
 					}
-					throw new System.SystemException(SupportClass.ThreadClass.Current().Name + ": intentionally failing at " + name);
+					throw new System.SystemException(ThreadClass.Current().Name + ": intentionally failing at " + name);
 				}
 				return true;
 			}
@@ -232,7 +232,7 @@ namespace Lucene.Net.Index
 			}
 			
 			// Confirm that when doc hits exception partway through tokenization, it's deleted:
-			IndexReader r2 = IndexReader.Open(dir);
+			IndexReader r2 = IndexReader.Open(dir, true);
 			int count = r2.DocFreq(new Term("content4", "aaa"));
 			int count2 = r2.DocFreq(new Term("content4", "ddd"));
 			Assert.AreEqual(count, count2);
@@ -289,7 +289,7 @@ namespace Lucene.Net.Index
 			}
 			
 			// Confirm that when doc hits exception partway through tokenization, it's deleted:
-			IndexReader r2 = IndexReader.Open(dir);
+		    IndexReader r2 = IndexReader.Open(dir, true);
 			int count = r2.DocFreq(new Term("content4", "aaa"));
 			int count2 = r2.DocFreq(new Term("content4", "ddd"));
 			Assert.AreEqual(count, count2);

Modified: incubator/lucene.net/trunk/test/core/Index/TestIndexWriterLockRelease.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/test/core/Index/TestIndexWriterLockRelease.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/test/core/Index/TestIndexWriterLockRelease.cs (original)
+++ incubator/lucene.net/trunk/test/core/Index/TestIndexWriterLockRelease.cs Tue Feb 28 22:43:08 2012
@@ -16,7 +16,8 @@
  */
 
 using System;
-
+using Lucene.Net.Store;
+using Lucene.Net.Support;
 using NUnit.Framework;
 
 using LuceneTestCase = Lucene.Net.Util.LuceneTestCase;
@@ -35,7 +36,7 @@ namespace Lucene.Net.Index
     [TestFixture]
 	public class TestIndexWriterLockRelease:LuceneTestCase
 	{
-		private System.IO.FileInfo __test_dir;
+		private System.IO.DirectoryInfo __test_dir;
 		
 		[SetUp]
 		public override void  SetUp()
@@ -43,8 +44,8 @@ namespace Lucene.Net.Index
 			base.SetUp();
 			if (this.__test_dir == null)
 			{
-				System.String tmp_dir = SupportClass.AppSettings.Get("java.io.tmpdir", "tmp");
-				this.__test_dir = new System.IO.FileInfo(System.IO.Path.Combine(tmp_dir, "testIndexWriter"));
+				System.String tmp_dir = AppSettings.Get("java.io.tmpdir", "tmp");
+				this.__test_dir = new System.IO.DirectoryInfo(System.IO.Path.Combine(tmp_dir, "testIndexWriter"));
 				
 				bool tmpBool;
 				if (System.IO.File.Exists(this.__test_dir.FullName))
@@ -79,7 +80,7 @@ namespace Lucene.Net.Index
 			base.TearDown();
 			if (this.__test_dir != null)
 			{
-				System.IO.FileInfo[] files = SupportClass.FileSupport.GetFiles(this.__test_dir);
+				System.IO.FileInfo[] files = FileSupport.GetFiles(this.__test_dir);
 				
 				for (int i = 0; i < files.Length; ++i)
 				{
@@ -126,21 +127,25 @@ namespace Lucene.Net.Index
 		public virtual void  TestIndexWriterLockRelease_Renamed()
 		{
 			IndexWriter im;
-			
-			try
-			{
-				im = new IndexWriter(this.__test_dir, new Lucene.Net.Analysis.Standard.StandardAnalyzer(), false, IndexWriter.MaxFieldLength.LIMITED);
-			}
-			catch (System.IO.FileNotFoundException e)
-			{
-				try
-				{
-					im = new IndexWriter(this.__test_dir, new Lucene.Net.Analysis.Standard.StandardAnalyzer(), false, IndexWriter.MaxFieldLength.LIMITED);
-				}
-				catch (System.IO.FileNotFoundException e1)
-				{
-				}
-			}
+		    FSDirectory dir = FSDirectory.Open(this.__test_dir);
+            try
+            {
+                im = new IndexWriter(dir, new Lucene.Net.Analysis.Standard.StandardAnalyzer(Util.Version.LUCENE_CURRENT), false, IndexWriter.MaxFieldLength.LIMITED);
+            }
+            catch (System.IO.FileNotFoundException e)
+            {
+                try
+                {
+                    im = new IndexWriter(dir, new Lucene.Net.Analysis.Standard.StandardAnalyzer(Util.Version.LUCENE_CURRENT), false, IndexWriter.MaxFieldLength.LIMITED);
+                }
+                catch (System.IO.FileNotFoundException e1)
+                {
+                }
+            }
+            finally
+            {
+                dir.Close();
+            }
 		}
 	}
 }
\ No newline at end of file

Modified: incubator/lucene.net/trunk/test/core/Index/TestIndexWriterMergePolicy.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/test/core/Index/TestIndexWriterMergePolicy.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/test/core/Index/TestIndexWriterMergePolicy.cs (original)
+++ incubator/lucene.net/trunk/test/core/Index/TestIndexWriterMergePolicy.cs Tue Feb 28 22:43:08 2012
@@ -145,7 +145,7 @@ namespace Lucene.Net.Index
 		{
 			Directory dir = new RAMDirectory();
 			
-			IndexWriter writer = new IndexWriter(dir, true, new WhitespaceAnalyzer(), true);
+			IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED);
 			writer.SetMaxBufferedDocs(101);
 			writer.SetMergeFactor(101);
 			writer.SetMergePolicy(new LogDocMergePolicy(writer));
@@ -161,7 +161,7 @@ namespace Lucene.Net.Index
 				}
 				writer.Close();
 				
-				writer = new IndexWriter(dir, true, new WhitespaceAnalyzer(), false);
+				writer = new IndexWriter(dir, new WhitespaceAnalyzer(), false, IndexWriter.MaxFieldLength.UNLIMITED);
 				writer.SetMaxBufferedDocs(101);
 				writer.SetMergeFactor(101);
 				writer.SetMergePolicy(new LogDocMergePolicy(writer));
@@ -182,6 +182,9 @@ namespace Lucene.Net.Index
 			{
 				AddDoc(writer);
 			}
+		    writer.Commit();
+		    ((ConcurrentMergeScheduler) writer.GetMergeScheduler()).Sync();
+		    writer.Commit();
 			CheckInvariants(writer);
 			
 			writer.Close();
@@ -193,7 +196,7 @@ namespace Lucene.Net.Index
 		{
 			Directory dir = new RAMDirectory();
 			
-			IndexWriter writer = new IndexWriter(dir, true, new WhitespaceAnalyzer(), true);
+			IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED);
 			writer.SetMergePolicy(new LogDocMergePolicy(writer));
 			writer.SetMaxBufferedDocs(10);
 			writer.SetMergeFactor(100);
@@ -204,12 +207,12 @@ namespace Lucene.Net.Index
 				CheckInvariants(writer);
 			}
 			writer.Close();
-			
-			IndexReader reader = IndexReader.Open(dir);
+
+		    IndexReader reader = IndexReader.Open(dir, false);
 			reader.DeleteDocuments(new Term("content", "aaa"));
 			reader.Close();
 			
-			writer = new IndexWriter(dir, true, new WhitespaceAnalyzer(), false);
+			writer = new IndexWriter(dir, new WhitespaceAnalyzer(), false, IndexWriter.MaxFieldLength.UNLIMITED);
 			writer.SetMergePolicy(new LogDocMergePolicy(writer));
 			writer.SetMaxBufferedDocs(10);
 			writer.SetMergeFactor(5);
@@ -219,8 +222,11 @@ namespace Lucene.Net.Index
 			{
 				AddDoc(writer);
 			}
+		    writer.Commit();
+            ((ConcurrentMergeScheduler)writer.GetMergeScheduler()).Sync();
+		    writer.Commit();
 			CheckInvariants(writer);
-			Assert.AreEqual(10, writer.DocCount());
+			Assert.AreEqual(10, writer.MaxDoc());
 			
 			writer.Close();
 		}
@@ -260,7 +266,7 @@ namespace Lucene.Net.Index
 				{
 					if (upperBound * mergeFactor <= maxMergeDocs)
 					{
-						Assert.IsTrue(numSegments < mergeFactor);
+                        Assert.IsTrue(numSegments < mergeFactor, "maxMergeDocs=" + maxMergeDocs + "; numSegments=" + numSegments + "; upperBound=" + upperBound + "; mergeFactor=" + mergeFactor);
 					}
 					
 					do 

Modified: incubator/lucene.net/trunk/test/core/Index/TestIndexWriterMerging.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/test/core/Index/TestIndexWriterMerging.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/test/core/Index/TestIndexWriterMerging.cs (original)
+++ incubator/lucene.net/trunk/test/core/Index/TestIndexWriterMerging.cs Tue Feb 28 22:43:08 2012
@@ -34,7 +34,7 @@ namespace Lucene.Net.Index
 	public class TestIndexWriterMerging:LuceneTestCase
 	{
 		
-		/// <summary> Tests that index merging (specifically addIndexes()) doesn't
+		/// <summary> Tests that index merging (specifically AddIndexesNoOptimize()) doesn't
 		/// change the index order of documents.
 		/// </summary>
 		[Test]
@@ -62,10 +62,11 @@ namespace Lucene.Net.Index
 			
 			Directory merged = new MockRAMDirectory();
 			
-			IndexWriter writer = new IndexWriter(merged, new StandardAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
+			IndexWriter writer = new IndexWriter(merged, new StandardAnalyzer(Util.Version.LUCENE_CURRENT), true, IndexWriter.MaxFieldLength.LIMITED);
 			writer.SetMergeFactor(2);
 			
-			writer.AddIndexes(new Directory[]{indexA, indexB});
+			writer.AddIndexesNoOptimize(new []{indexA, indexB});
+            writer.Optimize();
 			writer.Close();
 			
 			fail = VerifyIndex(merged, 0);
@@ -77,7 +78,7 @@ namespace Lucene.Net.Index
 		private bool VerifyIndex(Directory directory, int startAt)
 		{
 			bool fail = false;
-			IndexReader reader = IndexReader.Open(directory);
+			IndexReader reader = IndexReader.Open(directory, true);
 			
 			int max = reader.MaxDoc();
 			for (int i = 0; i < max; i++)
@@ -98,7 +99,7 @@ namespace Lucene.Net.Index
 		private void  FillIndex(Directory dir, int start, int numDocs)
 		{
 			
-			IndexWriter writer = new IndexWriter(dir, new StandardAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
+			IndexWriter writer = new IndexWriter(dir, new StandardAnalyzer(Util.Version.LUCENE_CURRENT), true, IndexWriter.MaxFieldLength.LIMITED);
 			writer.SetMergeFactor(2);
 			writer.SetMaxBufferedDocs(2);
 			

Modified: incubator/lucene.net/trunk/test/core/Index/TestIndexWriterReader.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/test/core/Index/TestIndexWriterReader.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/test/core/Index/TestIndexWriterReader.cs (original)
+++ incubator/lucene.net/trunk/test/core/Index/TestIndexWriterReader.cs Tue Feb 28 22:43:08 2012
@@ -16,7 +16,7 @@
  */
 
 using System;
-
+using Lucene.Net.Support;
 using NUnit.Framework;
 
 using WhitespaceAnalyzer = Lucene.Net.Analysis.WhitespaceAnalyzer;
@@ -40,7 +40,7 @@ namespace Lucene.Net.Index
     [TestFixture]
 	public class TestIndexWriterReader:LuceneTestCase
 	{
-		private class AnonymousClassThread:SupportClass.ThreadClass
+		private class AnonymousClassThread:ThreadClass
 		{
 			public AnonymousClassThread(long endTime, Lucene.Net.Index.IndexWriter writer, Lucene.Net.Store.Directory[] dirs, System.Collections.IList excs, TestIndexWriterReader enclosingInstance)
 			{
@@ -83,7 +83,7 @@ namespace Lucene.Net.Index
 				}
 			}
 		}
-		private class AnonymousClassThread1:SupportClass.ThreadClass
+		private class AnonymousClassThread1:ThreadClass
 		{
 			public AnonymousClassThread1(long endTime, Lucene.Net.Index.IndexWriter writer, System.Collections.IList excs, TestIndexWriterReader enclosingInstance)
 			{
@@ -216,8 +216,8 @@ namespace Lucene.Net.Index
 			r1.Close();
 			writer.Close();
 			Assert.IsTrue(r2.IsCurrent());
-			
-			IndexReader r3 = IndexReader.Open(dir1);
+
+		    IndexReader r3 = IndexReader.Open(dir1, true);
 			Assert.IsTrue(r3.IsCurrent());
 			Assert.IsTrue(r2.IsCurrent());
 			Assert.AreEqual(0, Count(new Term("id", id10), r3));
@@ -402,8 +402,8 @@ namespace Lucene.Net.Index
 			Assert.IsTrue(addDirThreads.failures.Count == 0);
 			
 			_TestUtil.CheckIndex(mainDir);
-			
-			IndexReader reader = IndexReader.Open(mainDir);
+
+		    IndexReader reader = IndexReader.Open(mainDir, true);
 			Assert.AreEqual(addDirThreads.count.IntValue(), reader.NumDocs());
 			//Assert.AreEqual(100 + numDirs * (3 * numIter / 4) * addDirThreads.NUM_THREADS
 			//    * addDirThreads.NUM_INIT_DOCS, reader.numDocs());
@@ -415,7 +415,7 @@ namespace Lucene.Net.Index
 		
 		private class DeleteThreads
 		{
-			private class AnonymousClassThread2:SupportClass.ThreadClass
+			private class AnonymousClassThread2:ThreadClass
 			{
 				public AnonymousClassThread2(DeleteThreads enclosingInstance)
 				{
@@ -454,7 +454,7 @@ namespace Lucene.Net.Index
 			private void  InitBlock(TestIndexWriterReader enclosingInstance)
 			{
 				this.enclosingInstance = enclosingInstance;
-				threads = new SupportClass.ThreadClass[NUM_THREADS];
+				threads = new ThreadClass[NUM_THREADS];
 			}
 			private TestIndexWriterReader enclosingInstance;
 			public TestIndexWriterReader Enclosing_Instance
@@ -466,7 +466,7 @@ namespace Lucene.Net.Index
 				
 			}
 			internal const int NUM_THREADS = 5;
-			internal SupportClass.ThreadClass[] threads;
+			internal ThreadClass[] threads;
 			internal IndexWriter mainWriter;
 			internal System.Collections.IList deletedTerms = new System.Collections.ArrayList();
 			internal System.Collections.ArrayList toDeleteTerms = new System.Collections.ArrayList();
@@ -526,14 +526,14 @@ namespace Lucene.Net.Index
 					}
 					catch (System.Threading.ThreadInterruptedException ie)
 					{
-						SupportClass.ThreadClass.Current().Interrupt();
+					    throw;
 					}
 			}
 		}
 		
 		private class AddDirectoriesThreads
 		{
-			private class AnonymousClassThread2:SupportClass.ThreadClass
+			private class AnonymousClassThread2:ThreadClass
 			{
 				public AnonymousClassThread2(int numIter, AddDirectoriesThreads enclosingInstance)
 				{
@@ -585,7 +585,7 @@ namespace Lucene.Net.Index
 			private void  InitBlock(TestIndexWriterReader enclosingInstance)
 			{
 				this.enclosingInstance = enclosingInstance;
-				threads = new SupportClass.ThreadClass[NUM_THREADS];
+				threads = new ThreadClass[NUM_THREADS];
 			}
 			private TestIndexWriterReader enclosingInstance;
 			public TestIndexWriterReader Enclosing_Instance
@@ -600,7 +600,7 @@ namespace Lucene.Net.Index
 			internal const int NUM_THREADS = 5;
 			internal const int NUM_INIT_DOCS = 100;
 			internal int numDirs;
-			internal SupportClass.ThreadClass[] threads;
+			internal ThreadClass[] threads;
 			internal IndexWriter mainWriter;
 			internal System.Collections.IList failures = new System.Collections.ArrayList();
 			internal IndexReader[] readers;
@@ -626,7 +626,7 @@ namespace Lucene.Net.Index
 				
 				readers = new IndexReader[numDirs];
 				for (int i = 0; i < numDirs; i++)
-					readers[i] = IndexReader.Open(addDir);
+				    readers[i] = IndexReader.Open(addDir, false);
 			}
 			
 			internal virtual void  JoinThreads()
@@ -638,7 +638,7 @@ namespace Lucene.Net.Index
 					}
 					catch (System.Threading.ThreadInterruptedException ie)
 					{
-						SupportClass.ThreadClass.Current().Interrupt();
+					    throw;
 					}
 			}
 			
@@ -680,7 +680,8 @@ namespace Lucene.Net.Index
 				{
 					
 					case 0: 
-						mainWriter.AddIndexes(dirs);
+						mainWriter.AddIndexesNoOptimize(dirs);
+                        mainWriter.Optimize();
 						break;
 					
 					case 1: 
@@ -968,7 +969,7 @@ namespace Lucene.Net.Index
 			long endTime = (long) ((DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) + 1000.0 * SECONDS);
 			System.Collections.IList excs = (System.Collections.IList) System.Collections.ArrayList.Synchronized(new System.Collections.ArrayList(new System.Collections.ArrayList()));
 			
-			SupportClass.ThreadClass[] threads = new SupportClass.ThreadClass[NUM_THREAD];
+			ThreadClass[] threads = new ThreadClass[NUM_THREAD];
 			for (int i = 0; i < NUM_THREAD; i++)
 			{
 				threads[i] = new AnonymousClassThread(endTime, writer, dirs, excs, this);
@@ -1047,7 +1048,7 @@ namespace Lucene.Net.Index
             long endTime = (long)((DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) + 1000.0 * SECONDS);
             System.Collections.IList excs = (System.Collections.IList)System.Collections.ArrayList.Synchronized(new System.Collections.ArrayList(new System.Collections.ArrayList()));
 
-            SupportClass.ThreadClass[] threads = new SupportClass.ThreadClass[NUM_THREAD];
+            ThreadClass[] threads = new ThreadClass[NUM_THREAD];
             for (int i = 0; i < NUM_THREAD; i++)
             {
                 threads[i] = new AnonymousClassThread(endTime, writer, dirs, excs, this);
@@ -1103,7 +1104,7 @@ namespace Lucene.Net.Index
 			long endTime = (long) ((DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) + 1000.0 * SECONDS);
 			System.Collections.IList excs = (System.Collections.IList) System.Collections.ArrayList.Synchronized(new System.Collections.ArrayList(new System.Collections.ArrayList()));
 			
-			SupportClass.ThreadClass[] threads = new SupportClass.ThreadClass[NUM_THREAD];
+			ThreadClass[] threads = new ThreadClass[NUM_THREAD];
 			for (int i = 0; i < NUM_THREAD; i++)
 			{
 				threads[i] = new AnonymousClassThread1(endTime, writer, excs, this);
@@ -1157,7 +1158,7 @@ namespace Lucene.Net.Index
 			w.ExpungeDeletes();
 			w.Close();
 			r.Close();
-			r = IndexReader.Open(dir);
+			r = IndexReader.Open(dir, true);
 			Assert.AreEqual(1, r.NumDocs());
 			Assert.IsFalse(r.HasDeletions());
 			r.Close();

Modified: incubator/lucene.net/trunk/test/core/Index/TestLazyBug.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/test/core/Index/TestLazyBug.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/test/core/Index/TestLazyBug.cs (original)
+++ incubator/lucene.net/trunk/test/core/Index/TestLazyBug.cs Tue Feb 28 22:43:08 2012
@@ -96,13 +96,13 @@ namespace Lucene.Net.Index
                     dataset.Add(data[i], data[i]);
 
 			Directory dir = MakeIndex();
-			IndexReader reader = IndexReader.Open(dir);
+		    IndexReader reader = IndexReader.Open(dir, true);
 			for (int i = 0; i < docs.Length; i++)
 			{
 				Document d = reader.Document(docs[i], SELECTOR);
 				d.Get(MAGIC_FIELD);
 				
-				System.Collections.IList fields = d.GetFields();
+				var fields = d.GetFields();
 				for (System.Collections.IEnumerator fi = fields.GetEnumerator(); fi.MoveNext(); )
 				{
 					Fieldable f = null;

Modified: incubator/lucene.net/trunk/test/core/Index/TestLazyProxSkipping.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/test/core/Index/TestLazyProxSkipping.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/test/core/Index/TestLazyProxSkipping.cs (original)
+++ incubator/lucene.net/trunk/test/core/Index/TestLazyProxSkipping.cs Tue Feb 28 22:43:08 2012
@@ -164,7 +164,7 @@ namespace Lucene.Net.Index
 			}
 			
 			writer.Close();
-			IndexReader reader = IndexReader.Open(directory);
+		    IndexReader reader = IndexReader.Open(directory, true);
 			TermPositions tp = reader.TermPositions();
 			tp.Seek(new Term(this.field, "b"));
 			for (int i = 0; i < 10; i++)
@@ -201,6 +201,7 @@ namespace Lucene.Net.Index
 				
 			}
 			private IndexInput input;
+		    private bool isDisposed;
 			
 			
 			internal SeeksCountingStream(TestLazyProxSkipping enclosingInstance, IndexInput input)
@@ -218,11 +219,17 @@ namespace Lucene.Net.Index
 			{
 				this.input.ReadBytes(b, offset, len);
 			}
-			
-			public override void  Close()
-			{
-				this.input.Close();
-			}
+
+            protected override void Dispose(bool disposing)
+            {
+                if (isDisposed) return;
+
+                if (disposing)
+                {
+                    this.input.Close();
+                }
+                isDisposed = true;
+            }
 			
 			public override long GetFilePointer()
 			{

Modified: incubator/lucene.net/trunk/test/core/Index/TestMultiLevelSkipList.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/test/core/Index/TestMultiLevelSkipList.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/test/core/Index/TestMultiLevelSkipList.cs (original)
+++ incubator/lucene.net/trunk/test/core/Index/TestMultiLevelSkipList.cs Tue Feb 28 22:43:08 2012
@@ -57,7 +57,7 @@ namespace Lucene.Net.Index
 				d1.Add(new Field(term.Field(), term.Text(), Field.Store.NO, Field.Index.ANALYZED));
 				writer.AddDocument(d1);
 			}
-			writer.Flush();
+			writer.Commit();
 			writer.Optimize();
 			writer.Close();
 			
@@ -112,7 +112,7 @@ namespace Lucene.Net.Index
 			
 			protected internal PayloadFilter(TokenStream input):base(input)
 			{
-				payloadAtt = (PayloadAttribute) AddAttribute(typeof(PayloadAttribute));
+				payloadAtt =  AddAttribute<PayloadAttribute>();
 			}
 			
 			public override bool IncrementToken()
@@ -146,6 +146,7 @@ namespace Lucene.Net.Index
 				
 			}
 			private IndexInput input;
+		    private bool isDisposed;
 			
 			internal CountingStream(TestMultiLevelSkipList enclosingInstance, IndexInput input)
 			{
@@ -164,11 +165,17 @@ namespace Lucene.Net.Index
 				Enclosing_Instance.counter += len;
 				this.input.ReadBytes(b, offset, len);
 			}
-			
-			public override void  Close()
-			{
-				this.input.Close();
-			}
+
+            protected override void Dispose(bool disposing)
+            {
+                if (isDisposed) return;
+
+                if (disposing)
+                {
+                    this.input.Close();
+                }
+                isDisposed = true;
+            }
 			
 			public override long GetFilePointer()
 			{

Modified: incubator/lucene.net/trunk/test/core/Index/TestMultiReader.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/test/core/Index/TestMultiReader.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/test/core/Index/TestMultiReader.cs (original)
+++ incubator/lucene.net/trunk/test/core/Index/TestMultiReader.cs Tue Feb 28 22:43:08 2012
@@ -38,8 +38,8 @@ namespace Lucene.Net.Index
 			IndexReader reader;
 			
 			sis.Read(dir);
-			SegmentReader reader1 = SegmentReader.Get(sis.Info(0));
-			SegmentReader reader2 = SegmentReader.Get(sis.Info(1));
+			SegmentReader reader1 = SegmentReader.Get(false, sis.Info(0), IndexReader.DEFAULT_TERMS_INDEX_DIVISOR);
+            SegmentReader reader2 = SegmentReader.Get(false, sis.Info(1), IndexReader.DEFAULT_TERMS_INDEX_DIVISOR);
 			readers[0] = reader1;
 			readers[1] = reader2;
 			Assert.IsTrue(reader1 != null);

Modified: incubator/lucene.net/trunk/test/core/Index/TestNRTReaderWithThreads.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/test/core/Index/TestNRTReaderWithThreads.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/test/core/Index/TestNRTReaderWithThreads.cs (original)
+++ incubator/lucene.net/trunk/test/core/Index/TestNRTReaderWithThreads.cs Tue Feb 28 22:43:08 2012
@@ -16,7 +16,7 @@
  */
 
 using System;
-
+using Lucene.Net.Support;
 using NUnit.Framework;
 
 using WhitespaceAnalyzer = Lucene.Net.Analysis.WhitespaceAnalyzer;
@@ -77,7 +77,7 @@ namespace Lucene.Net.Index
 			mainDir.Close();
 		}
 		
-		public class RunThread:SupportClass.ThreadClass
+		public class RunThread:ThreadClass
 		{
 			private void  InitBlock(TestNRTReaderWithThreads enclosingInstance)
 			{

Modified: incubator/lucene.net/trunk/test/core/Index/TestNorms.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/test/core/Index/TestNorms.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/test/core/Index/TestNorms.cs (original)
+++ incubator/lucene.net/trunk/test/core/Index/TestNorms.cs Tue Feb 28 22:43:08 2012
@@ -88,7 +88,7 @@ namespace Lucene.Net.Index
 		{
 			base.SetUp();
 			similarityOne = new SimilarityOne(this);
-			anlzr = new StandardAnalyzer();
+			anlzr = new StandardAnalyzer(Util.Version.LUCENE_CURRENT);
 		}
 		
 		/// <summary> Test that norms values are preserved as the index is maintained.
@@ -107,7 +107,7 @@ namespace Lucene.Net.Index
 			}
 			
 			// test with a single index: index1
-			System.IO.FileInfo indexDir1 = new System.IO.FileInfo(System.IO.Path.Combine(tempDir, "lucenetestindex1"));
+			System.IO.DirectoryInfo indexDir1 = new System.IO.DirectoryInfo(System.IO.Path.Combine(tempDir, "lucenetestindex1"));
 			Directory dir1 = FSDirectory.Open(indexDir1);
 			
 			norms = new System.Collections.ArrayList();
@@ -125,21 +125,22 @@ namespace Lucene.Net.Index
 			modifiedNorms = new System.Collections.ArrayList();
 			numDocNorms = 0;
 			
-			System.IO.FileInfo indexDir2 = new System.IO.FileInfo(System.IO.Path.Combine(tempDir, "lucenetestindex2"));
+			System.IO.DirectoryInfo indexDir2 = new System.IO.DirectoryInfo(System.IO.Path.Combine(tempDir, "lucenetestindex2"));
 			Directory dir2 = FSDirectory.Open(indexDir2);
 			
 			CreateIndex(dir2);
 			DoTestNorms(dir2);
 			
 			// add index1 and index2 to a third index: index3
-			System.IO.FileInfo indexDir3 = new System.IO.FileInfo(System.IO.Path.Combine(tempDir, "lucenetestindex3"));
+			System.IO.DirectoryInfo indexDir3 = new System.IO.DirectoryInfo(System.IO.Path.Combine(tempDir, "lucenetestindex3"));
 			Directory dir3 = FSDirectory.Open(indexDir3);
 			
 			CreateIndex(dir3);
 			IndexWriter iw = new IndexWriter(dir3, anlzr, false, IndexWriter.MaxFieldLength.LIMITED);
 			iw.SetMaxBufferedDocs(5);
 			iw.SetMergeFactor(3);
-			iw.AddIndexes(new Directory[]{dir1, dir2});
+			iw.AddIndexesNoOptimize(new Directory[]{dir1, dir2});
+            iw.Optimize();
 			iw.Close();
 			
 			norms1.AddRange(norms);
@@ -192,18 +193,18 @@ namespace Lucene.Net.Index
 		
 		private void  ModifyNormsForF1(Directory dir)
 		{
-			IndexReader ir = IndexReader.Open(dir);
+			IndexReader ir = IndexReader.Open(dir, false);
 			int n = ir.MaxDoc();
 			for (int i = 0; i < n; i += 3)
 			{
 				// modify for every third doc
 				int k = (i * 3) % modifiedNorms.Count;
-				float origNorm = (float) ((System.Single) modifiedNorms[i]);
-				float newNorm = (float) ((System.Single) modifiedNorms[k]);
+				float origNorm = (float)modifiedNorms[i];
+                float newNorm = (float)modifiedNorms[k];
 				//System.out.println("Modifying: for "+i+" from "+origNorm+" to "+newNorm);
 				//System.out.println("      and: for "+k+" from "+newNorm+" to "+origNorm);
-				modifiedNorms[i] = (float) newNorm;
-				modifiedNorms[k] = (float) origNorm;
+				modifiedNorms[i] = newNorm;
+				modifiedNorms[k] = origNorm;
 				ir.SetNorm(i, "f" + 1, newNorm);
 				ir.SetNorm(k, "f" + 1, origNorm);
 			}
@@ -213,7 +214,7 @@ namespace Lucene.Net.Index
 		
 		private void  VerifyIndex(Directory dir)
 		{
-			IndexReader ir = IndexReader.Open(dir);
+		    IndexReader ir = IndexReader.Open(dir, false);
 			for (int i = 0; i < NUM_FIELDS; i++)
 			{
 				System.String field = "f" + i;
@@ -223,7 +224,7 @@ namespace Lucene.Net.Index
 				for (int j = 0; j < b.Length; j++)
 				{
 					float norm = Similarity.DecodeNorm(b[j]);
-					float norm1 = (float) ((System.Single) storedNorms[j]);
+					float norm1 = (float)storedNorms[j];
 					Assert.AreEqual(norm, norm1, 0.000001, "stored norm value of " + field + " for doc " + j + " is " + norm + " - a mismatch!");
 				}
 			}
@@ -273,8 +274,8 @@ namespace Lucene.Net.Index
 				norm += normDelta;
 			}
 			while (true);
-			norms.Insert(numDocNorms, (float) norm);
-			modifiedNorms.Insert(numDocNorms, (float) norm);
+			norms.Insert(numDocNorms, norm);
+			modifiedNorms.Insert(numDocNorms, norm);
 			//System.out.println("creating norm("+numDocNorms+"): "+norm);
 			numDocNorms++;
 			lastNorm = (norm > 10?0:norm); //there's a limit to how many distinct values can be stored in a ingle byte

Modified: incubator/lucene.net/trunk/test/core/Index/TestOmitTf.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/test/core/Index/TestOmitTf.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/test/core/Index/TestOmitTf.cs (original)
+++ incubator/lucene.net/trunk/test/core/Index/TestOmitTf.cs Tue Feb 28 22:43:08 2012
@@ -16,7 +16,7 @@
  */
 
 using System;
-
+using Lucene.Net.Search;
 using NUnit.Framework;
 
 using Analyzer = Lucene.Net.Analysis.Analyzer;
@@ -38,8 +38,6 @@ using _TestUtil = Lucene.Net.Util._TestU
 
 namespace Lucene.Net.Index
 {
-	
-	
     [TestFixture]
 	public class TestOmitTf:LuceneTestCase
 	{
@@ -203,6 +201,19 @@ namespace Lucene.Net.Index
 			}
 		}
 		
+        private class AnonymousIDFExplanation : Explanation.IDFExplanation
+        {
+            public override float GetIdf()
+            {
+                return 1.0f;
+            }
+
+            public override string Explain()
+            {
+                return "Inexplicable";
+            }
+        }
+
 		[Serializable]
 		public class SimpleSimilarity:Similarity
 		{
@@ -224,10 +235,6 @@ namespace Lucene.Net.Index
 			{
 				return 2.0f;
 			}
-			public override float Idf(System.Collections.ICollection terms, Searcher searcher)
-			{
-				return 1.0f;
-			}
 			public override float Idf(int docFreq, int numDocs)
 			{
 				return 1.0f;
@@ -236,6 +243,10 @@ namespace Lucene.Net.Index
 			{
 				return 1.0f;
 			}
+            public override Search.Explanation.IDFExplanation IdfExplain(System.Collections.Generic.ICollection<Term> terms, Searcher searcher)
+            {
+                return new AnonymousIDFExplanation();
+            }
 		}
 		
 		
@@ -244,7 +255,7 @@ namespace Lucene.Net.Index
 		public virtual void  TestOmitTermFreqAndPositions()
 		{
 			Directory ram = new MockRAMDirectory();
-			Analyzer analyzer = new StandardAnalyzer();
+			Analyzer analyzer = new StandardAnalyzer(Util.Version.LUCENE_CURRENT);
 			IndexWriter writer = new IndexWriter(ram, analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
 			Document d = new Document();
 			
@@ -292,7 +303,7 @@ namespace Lucene.Net.Index
 		public virtual void  TestMixedMerge()
 		{
 			Directory ram = new MockRAMDirectory();
-			Analyzer analyzer = new StandardAnalyzer();
+			Analyzer analyzer = new StandardAnalyzer(Util.Version.LUCENE_CURRENT);
 			IndexWriter writer = new IndexWriter(ram, analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
 			writer.SetMaxBufferedDocs(3);
 			writer.SetMergeFactor(2);
@@ -347,7 +358,7 @@ namespace Lucene.Net.Index
 		public virtual void  TestMixedRAM()
 		{
 			Directory ram = new MockRAMDirectory();
-			Analyzer analyzer = new StandardAnalyzer();
+			Analyzer analyzer = new StandardAnalyzer(Util.Version.LUCENE_CURRENT);
 			IndexWriter writer = new IndexWriter(ram, analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
 			writer.SetMaxBufferedDocs(10);
 			writer.SetMergeFactor(2);
@@ -398,7 +409,7 @@ namespace Lucene.Net.Index
 		public virtual void  TestNoPrxFile()
 		{
 			Directory ram = new MockRAMDirectory();
-			Analyzer analyzer = new StandardAnalyzer();
+			Analyzer analyzer = new StandardAnalyzer(Util.Version.LUCENE_CURRENT);
 			IndexWriter writer = new IndexWriter(ram, analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
 			writer.SetMaxBufferedDocs(3);
 			writer.SetMergeFactor(2);
@@ -431,7 +442,7 @@ namespace Lucene.Net.Index
 		public virtual void  TestBasic()
 		{
 			Directory dir = new MockRAMDirectory();
-			Analyzer analyzer = new StandardAnalyzer();
+			Analyzer analyzer = new StandardAnalyzer(Util.Version.LUCENE_CURRENT);
 			IndexWriter writer = new IndexWriter(dir, analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
 			writer.SetMergeFactor(2);
 			writer.SetMaxBufferedDocs(2);
@@ -464,7 +475,7 @@ namespace Lucene.Net.Index
 			/*
 			* Verify the index
 			*/
-			Searcher searcher = new IndexSearcher(dir);
+			Searcher searcher = new IndexSearcher(dir, true);
 			searcher.SetSimilarity(new SimpleSimilarity());
 			
 			Term a = new Term("noTf", term);