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 [36/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/TestIndexReaderReopen.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/test/core/Index/TestIndexReaderReopen.cs?rev=1294875&r1=1294874&r2=1294875&view=diff
==============================================================================
--- incubator/lucene.net/trunk/test/core/Index/TestIndexReaderReopen.cs (original)
+++ incubator/lucene.net/trunk/test/core/Index/TestIndexReaderReopen.cs Tue Feb 28 22:43:08 2012
@@ -16,7 +16,8 @@
  */
 
 using System;
-
+using System.Collections.Generic;
+using Lucene.Net.Support;
 using NUnit.Framework;
 
 using KeywordAnalyzer = Lucene.Net.Analysis.KeywordAnalyzer;
@@ -43,318 +44,21 @@ namespace Lucene.Net.Index
     [TestFixture]
 	public class TestIndexReaderReopen:LuceneTestCase
 	{
-		private class AnonymousClassTestReopen:TestReopen
-		{
-			public AnonymousClassTestReopen(Lucene.Net.Store.Directory dir1, TestIndexReaderReopen enclosingInstance)
-			{
-				InitBlock(dir1, enclosingInstance);
-			}
-			private void  InitBlock(Lucene.Net.Store.Directory dir1, TestIndexReaderReopen enclosingInstance)
-			{
-				this.dir1 = dir1;
-				this.enclosingInstance = enclosingInstance;
-			}
-			private Lucene.Net.Store.Directory dir1;
-			private TestIndexReaderReopen enclosingInstance;
-			public TestIndexReaderReopen Enclosing_Instance
-			{
-				get
-				{
-					return enclosingInstance;
-				}
-				
-			}
-			
-			protected internal override void  ModifyIndex(int i)
-			{
-				TestIndexReaderReopen.ModifyIndex(i, dir1);
-			}
-			
-			protected internal override IndexReader OpenReader()
-			{
-				return IndexReader.Open(dir1);
-			}
-		}
-		private class AnonymousClassTestReopen1:TestReopen
-		{
-			public AnonymousClassTestReopen1(Lucene.Net.Store.Directory dir2, TestIndexReaderReopen enclosingInstance)
-			{
-				InitBlock(dir2, enclosingInstance);
-			}
-			private void  InitBlock(Lucene.Net.Store.Directory dir2, TestIndexReaderReopen enclosingInstance)
-			{
-				this.dir2 = dir2;
-				this.enclosingInstance = enclosingInstance;
-			}
-			private Lucene.Net.Store.Directory dir2;
-			private TestIndexReaderReopen enclosingInstance;
-			public TestIndexReaderReopen Enclosing_Instance
-			{
-				get
-				{
-					return enclosingInstance;
-				}
-				
-			}
-			
-			protected internal override void  ModifyIndex(int i)
-			{
-				TestIndexReaderReopen.ModifyIndex(i, dir2);
-			}
-			
-			protected internal override IndexReader OpenReader()
-			{
-				return IndexReader.Open(dir2);
-			}
-		}
-		private class AnonymousClassTestReopen2:TestReopen
-		{
-			public AnonymousClassTestReopen2(Lucene.Net.Store.Directory dir1, Lucene.Net.Store.Directory dir2, TestIndexReaderReopen enclosingInstance)
-			{
-				InitBlock(dir1, dir2, enclosingInstance);
-			}
-			private void  InitBlock(Lucene.Net.Store.Directory dir1, Lucene.Net.Store.Directory dir2, TestIndexReaderReopen enclosingInstance)
-			{
-				this.dir1 = dir1;
-				this.dir2 = dir2;
-				this.enclosingInstance = enclosingInstance;
-			}
-			private Lucene.Net.Store.Directory dir1;
-			private Lucene.Net.Store.Directory dir2;
-			private TestIndexReaderReopen enclosingInstance;
-			public TestIndexReaderReopen Enclosing_Instance
-			{
-				get
-				{
-					return enclosingInstance;
-				}
-				
-			}
-			
-			protected internal override void  ModifyIndex(int i)
-			{
-				TestIndexReaderReopen.ModifyIndex(i, dir1);
-				TestIndexReaderReopen.ModifyIndex(i, dir2);
-			}
-			
-			protected internal override IndexReader OpenReader()
-			{
-				ParallelReader pr = new ParallelReader();
-				pr.Add(IndexReader.Open(dir1));
-				pr.Add(IndexReader.Open(dir2));
-				return pr;
-			}
-		}
-		private class AnonymousClassTestReopen3:TestReopen
-		{
-			public AnonymousClassTestReopen3(Lucene.Net.Store.Directory dir3, Lucene.Net.Store.Directory dir4, TestIndexReaderReopen enclosingInstance)
-			{
-				InitBlock(dir3, dir4, enclosingInstance);
-			}
-			private void  InitBlock(Lucene.Net.Store.Directory dir3, Lucene.Net.Store.Directory dir4, TestIndexReaderReopen enclosingInstance)
-			{
-				this.dir3 = dir3;
-				this.dir4 = dir4;
-				this.enclosingInstance = enclosingInstance;
-			}
-			private Lucene.Net.Store.Directory dir3;
-			private Lucene.Net.Store.Directory dir4;
-			private TestIndexReaderReopen enclosingInstance;
-			public TestIndexReaderReopen Enclosing_Instance
-			{
-				get
-				{
-					return enclosingInstance;
-				}
-				
-			}
-			
-			protected internal override void  ModifyIndex(int i)
-			{
-				TestIndexReaderReopen.ModifyIndex(i, dir3);
-				TestIndexReaderReopen.ModifyIndex(i, dir4);
-			}
-			
-			protected internal override IndexReader OpenReader()
-			{
-				ParallelReader pr = new ParallelReader();
-				pr.Add(IndexReader.Open(dir3));
-				pr.Add(IndexReader.Open(dir4));
-				// Does not implement reopen, so
-				// hits exception:
-				pr.Add(new FilterIndexReader(IndexReader.Open(dir3)));
-				return pr;
-			}
-		}
-		private class AnonymousClassTestReopen4:TestReopen
-		{
-			public AnonymousClassTestReopen4(Lucene.Net.Store.Directory dir1, Lucene.Net.Store.Directory dir2, TestIndexReaderReopen enclosingInstance)
-			{
-				InitBlock(dir1, dir2, enclosingInstance);
-			}
-			private void  InitBlock(Lucene.Net.Store.Directory dir1, Lucene.Net.Store.Directory dir2, TestIndexReaderReopen enclosingInstance)
-			{
-				this.dir1 = dir1;
-				this.dir2 = dir2;
-				this.enclosingInstance = enclosingInstance;
-			}
-			private Lucene.Net.Store.Directory dir1;
-			private Lucene.Net.Store.Directory dir2;
-			private TestIndexReaderReopen enclosingInstance;
-			public TestIndexReaderReopen Enclosing_Instance
-			{
-				get
-				{
-					return enclosingInstance;
-				}
-				
-			}
-			
-			protected internal override void  ModifyIndex(int i)
-			{
-				TestIndexReaderReopen.ModifyIndex(i, dir1);
-				TestIndexReaderReopen.ModifyIndex(i, dir2);
-			}
-			
-			protected internal override IndexReader OpenReader()
-			{
-				return new MultiReader(new IndexReader[]{IndexReader.Open(dir1), IndexReader.Open(dir2)});
-			}
-		}
-		private class AnonymousClassTestReopen5:TestReopen
-		{
-			public AnonymousClassTestReopen5(Lucene.Net.Store.Directory dir3, Lucene.Net.Store.Directory dir4, TestIndexReaderReopen enclosingInstance)
-			{
-				InitBlock(dir3, dir4, enclosingInstance);
-			}
-			private void  InitBlock(Lucene.Net.Store.Directory dir3, Lucene.Net.Store.Directory dir4, TestIndexReaderReopen enclosingInstance)
-			{
-				this.dir3 = dir3;
-				this.dir4 = dir4;
-				this.enclosingInstance = enclosingInstance;
-			}
-			private Lucene.Net.Store.Directory dir3;
-			private Lucene.Net.Store.Directory dir4;
-			private TestIndexReaderReopen enclosingInstance;
-			public TestIndexReaderReopen Enclosing_Instance
-			{
-				get
-				{
-					return enclosingInstance;
-				}
-				
-			}
-			
-			protected internal override void  ModifyIndex(int i)
-			{
-				TestIndexReaderReopen.ModifyIndex(i, dir3);
-				TestIndexReaderReopen.ModifyIndex(i, dir4);
-			}
-			
-			protected internal override IndexReader OpenReader()
-			{
-				return new MultiReader(new IndexReader[]{IndexReader.Open(dir3), IndexReader.Open(dir4), new FilterIndexReader(IndexReader.Open(dir3))});
-			}
-		}
-		private class AnonymousClassTestReopen6:TestReopen
-		{
-			public AnonymousClassTestReopen6(Lucene.Net.Store.Directory dir1, Lucene.Net.Store.Directory dir4, Lucene.Net.Store.Directory dir5, Lucene.Net.Store.Directory dir2, Lucene.Net.Store.Directory dir3, TestIndexReaderReopen enclosingInstance)
-			{
-				InitBlock(dir1, dir4, dir5, dir2, dir3, enclosingInstance);
-			}
-			private void  InitBlock(Lucene.Net.Store.Directory dir1, Lucene.Net.Store.Directory dir4, Lucene.Net.Store.Directory dir5, Lucene.Net.Store.Directory dir2, Lucene.Net.Store.Directory dir3, TestIndexReaderReopen enclosingInstance)
-			{
-				this.dir1 = dir1;
-				this.dir4 = dir4;
-				this.dir5 = dir5;
-				this.dir2 = dir2;
-				this.dir3 = dir3;
-				this.enclosingInstance = enclosingInstance;
-			}
-			private Lucene.Net.Store.Directory dir1;
-			private Lucene.Net.Store.Directory dir4;
-			private Lucene.Net.Store.Directory dir5;
-			private Lucene.Net.Store.Directory dir2;
-			private Lucene.Net.Store.Directory dir3;
-			private TestIndexReaderReopen enclosingInstance;
-			public TestIndexReaderReopen Enclosing_Instance
-			{
-				get
-				{
-					return enclosingInstance;
-				}
-				
-			}
-			
-			protected internal override void  ModifyIndex(int i)
-			{
-				// only change norms in this index to maintain the same number of docs for each of ParallelReader's subreaders
-				if (i == 1)
-					TestIndexReaderReopen.ModifyIndex(i, dir1);
-				
-				TestIndexReaderReopen.ModifyIndex(i, dir4);
-				TestIndexReaderReopen.ModifyIndex(i, dir5);
-			}
-			
-			protected internal override IndexReader OpenReader()
-			{
-				ParallelReader pr = new ParallelReader();
-				pr.Add(IndexReader.Open(dir1));
-				pr.Add(IndexReader.Open(dir2));
-				MultiReader mr = new MultiReader(new IndexReader[]{IndexReader.Open(dir3), IndexReader.Open(dir4)});
-				return new MultiReader(new IndexReader[]{pr, mr, IndexReader.Open(dir5)});
-			}
-		}
-		private class AnonymousClassTestReopen7:TestReopen
-		{
-			public AnonymousClassTestReopen7(Lucene.Net.Store.Directory dir, int n, TestIndexReaderReopen enclosingInstance)
-			{
-				InitBlock(dir, n, enclosingInstance);
-			}
-			private void  InitBlock(Lucene.Net.Store.Directory dir, int n, TestIndexReaderReopen enclosingInstance)
-			{
-				this.dir = dir;
-				this.n = n;
-				this.enclosingInstance = enclosingInstance;
-			}
-			private Lucene.Net.Store.Directory dir;
-			private int n;
-			private TestIndexReaderReopen enclosingInstance;
-			public TestIndexReaderReopen Enclosing_Instance
-			{
-				get
-				{
-					return enclosingInstance;
-				}
-				
-			}
-			protected internal override void  ModifyIndex(int i)
-			{
-				if (i % 3 == 0)
-				{
-					IndexReader modifier = IndexReader.Open(dir);
-					modifier.SetNorm(i, "field1", 50);
-					modifier.Close();
-				}
-				else if (i % 3 == 1)
-				{
-					IndexReader modifier = IndexReader.Open(dir);
-					modifier.DeleteDocument(i % modifier.MaxDoc());
-					modifier.Close();
-				}
-				else
-				{
-					IndexWriter modifier = new IndexWriter(dir, new StandardAnalyzer(), IndexWriter.MaxFieldLength.LIMITED);
-					modifier.AddDocument(Lucene.Net.Index.TestIndexReaderReopen.CreateDocument(n + i, 6));
-					modifier.Close();
-				}
-			}
-			
-			protected internal override IndexReader OpenReader()
-			{
-				return IndexReader.Open(dir);
-			}
-		}
+        private class InjectableTestReopen : TestReopen
+        {
+            public Func<IndexReader> OpenReaderFunc { get; set; }
+            public Action<int> ModifyIndexAction { get; set; }
+            protected internal override IndexReader OpenReader()
+            {
+                return OpenReaderFunc.Invoke();
+            }
+
+            protected internal override void ModifyIndex(int i)
+            {
+                ModifyIndexAction.Invoke(i);
+            }
+        }
+
 		private class AnonymousClassReaderThreadTask:ReaderThreadTask
 		{
 			public AnonymousClassReaderThreadTask(int index, Lucene.Net.Index.IndexReader r, Lucene.Net.Index.TestIndexReaderReopen.TestReopen test, System.Collections.Hashtable readersToClose, System.Collections.IList readers, System.Random rnd, TestIndexReaderReopen enclosingInstance)
@@ -395,8 +99,8 @@ namespace Lucene.Net.Index
 					{
 						// refresh reader synchronized
 						ReaderCouple c = (Enclosing_Instance.RefreshReader(r, test, index, true));
-						SupportClass.CollectionsHelper.AddIfNotContains(readersToClose, c.newReader);
-						SupportClass.CollectionsHelper.AddIfNotContains(readersToClose, c.refreshedReader);
+						CollectionsHelper.AddIfNotContains(readersToClose, c.newReader);
+						CollectionsHelper.AddIfNotContains(readersToClose, c.refreshedReader);
 						readers.Add(c);
 						// prevent too many readers
 						break;
@@ -424,7 +128,7 @@ namespace Lucene.Net.Index
 						{
 							refreshed.Close();
 						}
-						SupportClass.CollectionsHelper.AddIfNotContains(readersToClose, refreshed);
+						CollectionsHelper.AddIfNotContains(readersToClose, refreshed);
 					}
 					lock (this)
 					{
@@ -475,7 +179,7 @@ namespace Lucene.Net.Index
 			}
 		}
 		
-		private System.IO.FileInfo indexDir;
+		private System.IO.DirectoryInfo indexDir;
 		
 		[Test]
 		public virtual void  TestReopen_Renamed()
@@ -483,13 +187,21 @@ namespace Lucene.Net.Index
 			Directory dir1 = new MockRAMDirectory();
 			
 			CreateIndex(dir1, false);
-			PerformDefaultTests(new AnonymousClassTestReopen(dir1, this));
+		    PerformDefaultTests(new InjectableTestReopen
+		                            {
+		                                ModifyIndexAction = i => ModifyIndex(i, dir1),
+		                                OpenReaderFunc = () => IndexReader.Open(dir1, false)
+                                    });
 			dir1.Close();
 			
 			Directory dir2 = new MockRAMDirectory();
 			
 			CreateIndex(dir2, true);
-			PerformDefaultTests(new AnonymousClassTestReopen1(dir2, this));
+		    PerformDefaultTests(new InjectableTestReopen
+		                            {
+		                                ModifyIndexAction = i => ModifyIndex(i, dir2),
+                                        OpenReaderFunc = () => IndexReader.Open(dir2, false)
+                                     });
 			dir2.Close();
 		}
 		
@@ -501,7 +213,21 @@ namespace Lucene.Net.Index
 			Directory dir2 = new MockRAMDirectory();
 			CreateIndex(dir2, true);
 			
-			PerformDefaultTests(new AnonymousClassTestReopen2(dir1, dir2, this));
+            PerformDefaultTests(new InjectableTestReopen
+                                    {
+                                        ModifyIndexAction = i =>
+                                                                {
+                                                                    ModifyIndex(i, dir1);
+                                                                    ModifyIndex(i, dir2);
+                                                                },
+                                        OpenReaderFunc = () =>
+                                                             {
+                                                                 ParallelReader pr = new ParallelReader();
+                                                                 pr.Add(IndexReader.Open(dir1, false));
+                                                                 pr.Add(IndexReader.Open(dir2, false));
+                                                                 return pr;
+                                                             }
+                                    });
 			dir1.Close();
 			dir2.Close();
 			
@@ -510,7 +236,24 @@ namespace Lucene.Net.Index
 			Directory dir4 = new MockRAMDirectory();
 			CreateIndex(dir4, true);
 			
-			PerformTestsWithExceptionInReopen(new AnonymousClassTestReopen3(dir3, dir4, this));
+            PerformTestsWithExceptionInReopen(new InjectableTestReopen
+                                                  {
+                                                      ModifyIndexAction = i =>
+                                                                              {
+                                                                                  ModifyIndex(i, dir3);
+                                                                                  ModifyIndex(i, dir4);
+                                                                              },
+                                                      OpenReaderFunc = () =>
+                                                                           {
+                                                                               ParallelReader pr = new ParallelReader();
+                                                                               pr.Add(IndexReader.Open(dir3, false));
+                                                                               pr.Add(IndexReader.Open(dir4, false));
+                                                                               // Does not implement reopen, so
+                                                                               // hits exception:
+                                                                               pr.Add(new FilterIndexReader(IndexReader.Open(dir3, false)));
+                                                                               return pr;
+                                                                           }
+                                                  });
 			dir3.Close();
 			dir4.Close();
 		}
@@ -552,7 +295,7 @@ namespace Lucene.Net.Index
 		{
 			IndexWriter iwriter = new IndexWriter(dir, new KeywordAnalyzer(), true, MaxFieldLength.LIMITED);
 			iwriter.SetMergeScheduler(new SerialMergeScheduler());
-			IndexReader reader = IndexReader.Open(dir);
+			IndexReader reader = IndexReader.Open(dir, false);
 			try
 			{
 				int M = 3;
@@ -590,7 +333,7 @@ namespace Lucene.Net.Index
 					{
 						// recreate
 						reader.Close();
-						reader = IndexReader.Open(dir);
+						reader = IndexReader.Open(dir, false);
 					}
 				}
 			}
@@ -611,7 +354,19 @@ namespace Lucene.Net.Index
 			Directory dir2 = new MockRAMDirectory();
 			CreateIndex(dir2, true);
 			
-			PerformDefaultTests(new AnonymousClassTestReopen4(dir1, dir2, this));
+            PerformDefaultTests(new InjectableTestReopen
+                                    {
+                                        ModifyIndexAction = i =>
+                                                                {
+                                                                    ModifyIndex(i, dir1);
+                                                                    ModifyIndex(i, dir2);
+                                                                },
+                                        OpenReaderFunc = () => new MultiReader(new[]
+                                                                                   {
+                                                                                       IndexReader.Open(dir1, false),
+                                                                                       IndexReader.Open(dir2, false)
+                                                                                   })
+                                    });
 			
 			dir1.Close();
 			dir2.Close();
@@ -621,8 +376,23 @@ namespace Lucene.Net.Index
 			
 			Directory dir4 = new MockRAMDirectory();
 			CreateIndex(dir4, true);
-			
-			PerformTestsWithExceptionInReopen(new AnonymousClassTestReopen5(dir3, dir4, this));
+
+		    PerformTestsWithExceptionInReopen(new InjectableTestReopen
+		                                          {
+		                                              ModifyIndexAction = i =>
+		                                                                      {
+		                                                                          ModifyIndex(i, dir3);
+		                                                                          ModifyIndex(i, dir4);
+		                                                                      },
+		                                              OpenReaderFunc = () => new MultiReader(new[]
+		                                                                                         {
+		                                                                                             IndexReader.Open(dir3, false),
+		                                                                                             IndexReader.Open(dir4, false),
+		                                                                                             //does not implement reopen,
+		                                                                                             //so hits exception
+		                                                                                             new FilterIndexReader(IndexReader.Open(dir3, false))
+		                                                                                         })
+		                                          });
 			dir3.Close();
 			dir4.Close();
 		}
@@ -641,7 +411,29 @@ namespace Lucene.Net.Index
 			Directory dir5 = new MockRAMDirectory();
 			CreateIndex(dir5, false);
 			
-			PerformDefaultTests(new AnonymousClassTestReopen6(dir1, dir4, dir5, dir2, dir3, this));
+			//PerformDefaultTests(new AnonymousClassTestReopen6(dir1, dir4, dir5, dir2, dir3, this));
+            PerformDefaultTests(new InjectableTestReopen
+                                    {
+                                        ModifyIndexAction = i =>
+                                                                {
+                                                                    // only change norms in this index to maintain the same number of docs for each of ParallelReader's subreaders
+                                                                    if (i == 1) ModifyIndex(i, dir1);
+                                                                    ModifyIndex(i, dir4);
+                                                                    ModifyIndex(i, dir5);
+                                                                },
+                                        OpenReaderFunc = () =>
+                                                             {
+                                                                 ParallelReader pr = new ParallelReader();
+                                                                 pr.Add(IndexReader.Open(dir1, false));
+                                                                 pr.Add(IndexReader.Open(dir2, false));
+                                                                 MultiReader mr = new MultiReader(new []{IndexReader.Open(dir3, false), IndexReader.Open(dir4, false)});
+                                                                 return new MultiReader(new[]
+                                                                                             {
+                                                                                                 pr, mr,
+                                                                                                 IndexReader.Open(dir5, false)
+                                                                                             });
+                                                             }
+                                    });
 			dir1.Close();
 			dir2.Close();
 			dir3.Close();
@@ -706,7 +498,7 @@ namespace Lucene.Net.Index
 				Directory dir1 = new MockRAMDirectory();
 				CreateIndex(dir1, true);
 				
-				IndexReader reader0 = IndexReader.Open(dir1);
+				IndexReader reader0 = IndexReader.Open(dir1, false);
 				AssertRefCountEquals(1, reader0);
 				
 				Assert.IsTrue(reader0 is DirectoryReader);
@@ -717,7 +509,7 @@ namespace Lucene.Net.Index
 				}
 				
 				// delete first document, so that only one of the subReaders have to be re-opened
-				IndexReader modifier = IndexReader.Open(dir1);
+				IndexReader modifier = IndexReader.Open(dir1, false);
 				modifier.DeleteDocument(0);
 				modifier.Close();
 				
@@ -740,7 +532,7 @@ namespace Lucene.Net.Index
 				}
 				
 				// delete first document, so that only one of the subReaders have to be re-opened
-				modifier = IndexReader.Open(dir1);
+				modifier = IndexReader.Open(dir1, false);
 				modifier.DeleteDocument(1);
 				modifier.Close();
 				
@@ -836,10 +628,10 @@ namespace Lucene.Net.Index
 				Directory dir2 = new MockRAMDirectory();
 				CreateIndex(dir2, true);
 				
-				IndexReader reader1 = IndexReader.Open(dir1);
+				IndexReader reader1 = IndexReader.Open(dir1, false);
 				AssertRefCountEquals(1, reader1);
 				
-				IndexReader initReader2 = IndexReader.Open(dir2);
+				IndexReader initReader2 = IndexReader.Open(dir2, false);
 				IndexReader multiReader1 = new MultiReader(new IndexReader[]{reader1, initReader2}, (mode == 0));
 				ModifyIndex(0, dir2);
 				AssertRefCountEquals(1 + mode, reader1);
@@ -911,12 +703,12 @@ namespace Lucene.Net.Index
 				Directory dir2 = new MockRAMDirectory();
 				CreateIndex(dir2, true);
 				
-				IndexReader reader1 = IndexReader.Open(dir1);
+				IndexReader reader1 = IndexReader.Open(dir1, false);
 				AssertRefCountEquals(1, reader1);
 				
 				ParallelReader parallelReader1 = new ParallelReader(mode == 0);
 				parallelReader1.Add(reader1);
-				IndexReader initReader2 = IndexReader.Open(dir2);
+                IndexReader initReader2 = IndexReader.Open(dir2, false);
 				parallelReader1.Add(initReader2);
 				ModifyIndex(1, dir2);
 				AssertRefCountEquals(1 + mode, reader1);
@@ -985,27 +777,27 @@ namespace Lucene.Net.Index
 		{
 			Directory dir1 = new MockRAMDirectory();
 			CreateIndex(dir1, false);
-			
-			IndexReader reader1 = IndexReader.Open(dir1);
+
+            IndexReader reader1 = IndexReader.Open(dir1, false);
 			SegmentReader segmentReader1 = SegmentReader.GetOnlySegmentReader(reader1);
-			IndexReader modifier = IndexReader.Open(dir1);
+            IndexReader modifier = IndexReader.Open(dir1, false);
 			modifier.DeleteDocument(0);
 			modifier.Close();
 			
 			IndexReader reader2 = reader1.Reopen();
-			modifier = IndexReader.Open(dir1);
+            modifier = IndexReader.Open(dir1, false);
 			modifier.SetNorm(1, "field1", 50);
 			modifier.SetNorm(1, "field2", 50);
 			modifier.Close();
 			
 			IndexReader reader3 = reader2.Reopen();
 			SegmentReader segmentReader3 = SegmentReader.GetOnlySegmentReader(reader3);
-			modifier = IndexReader.Open(dir1);
+            modifier = IndexReader.Open(dir1, false);
 			modifier.DeleteDocument(2);
 			modifier.Close();
 			
 			IndexReader reader4 = reader3.Reopen();
-			modifier = IndexReader.Open(dir1);
+            modifier = IndexReader.Open(dir1, false);
 			modifier.DeleteDocument(3);
 			modifier.Close();
 			
@@ -1082,18 +874,48 @@ namespace Lucene.Net.Index
 			Directory dir = new MockRAMDirectory();
 			int n = 150;
 			
-			IndexWriter writer = new IndexWriter(dir, new StandardAnalyzer(), IndexWriter.MaxFieldLength.LIMITED);
+			IndexWriter writer = new IndexWriter(dir, new StandardAnalyzer(Util.Version.LUCENE_CURRENT), IndexWriter.MaxFieldLength.LIMITED);
 			for (int i = 0; i < n; i++)
 			{
 				writer.AddDocument(CreateDocument(i, 3));
 			}
 			writer.Optimize();
 			writer.Close();
-			
-			TestReopen test = new AnonymousClassTestReopen7(dir, n, this);
+
+		    TestReopen test = new InjectableTestReopen
+		                          {
+                                      OpenReaderFunc = () => IndexReader.Open(dir, false),
+		                              ModifyIndexAction = i =>
+		                                                      {
+		                                                          if (i%3 == 0)
+		                                                          {
+		                                                              IndexReader modifier = IndexReader.Open(dir, false);
+		                                                              modifier.SetNorm(i, "field1", 50);
+		                                                              modifier.Close();
+		                                                          }
+		                                                          else if (i%3 == 1)
+		                                                          {
+		                                                              IndexReader modifier = IndexReader.Open(dir, false);
+		                                                              modifier.DeleteDocument(i%modifier.MaxDoc());
+		                                                              modifier.Close();
+		                                                          }
+		                                                          else
+		                                                          {
+		                                                              IndexWriter modifier = new IndexWriter(dir,
+		                                                                                                     new StandardAnalyzer
+		                                                                                                         (Util.Version
+		                                                                                                              .
+		                                                                                                              LUCENE_CURRENT),
+		                                                                                                     IndexWriter.
+		                                                                                                         MaxFieldLength
+		                                                                                                         .LIMITED);
+		                                                              modifier.AddDocument(CreateDocument(n + i, 6));
+		                                                              modifier.Close();
+		                                                          }
+		                                                      }};
 			
 			System.Collections.IList readers = (System.Collections.IList) System.Collections.ArrayList.Synchronized(new System.Collections.ArrayList(new System.Collections.ArrayList()));
-			IndexReader firstReader = IndexReader.Open(dir);
+			IndexReader firstReader = IndexReader.Open(dir, false);
 			IndexReader reader = firstReader;
 			System.Random rnd = NewRandom();
 			
@@ -1107,7 +929,7 @@ namespace Lucene.Net.Index
 					IndexReader refreshed = reader.Reopen();
 					if (refreshed != reader)
 					{
-						SupportClass.CollectionsHelper.AddIfNotContains(readersToClose, reader);
+						CollectionsHelper.AddIfNotContains(readersToClose, reader);
 					}
 					reader = refreshed;
 				}
@@ -1200,7 +1022,7 @@ namespace Lucene.Net.Index
 			public abstract void  Run();
 		}
 		
-		private class ReaderThread:SupportClass.ThreadClass
+		private class ReaderThread:ThreadClass
 		{
 			private ReaderThreadTask task;
 			internal /*private*/ System.Exception error;
@@ -1293,7 +1115,7 @@ namespace Lucene.Net.Index
 				w.AddDocument(CreateDocument(i, 4));
 				if (multiSegment && (i % 10) == 0)
 				{
-					w.Flush();
+					w.Commit();
 				}
 			}
 			
@@ -1304,7 +1126,7 @@ namespace Lucene.Net.Index
 			
 			w.Close();
 			
-			IndexReader r = IndexReader.Open(dir);
+			IndexReader r = IndexReader.Open(dir, false);
 			if (multiSegment)
 			{
 				Assert.IsTrue(r.GetSequentialSubReaders().Length > 1);
@@ -1348,7 +1170,7 @@ namespace Lucene.Net.Index
 					}
 				
 				case 1:  {
-						IndexReader reader = IndexReader.Open(dir);
+						IndexReader reader = IndexReader.Open(dir, false);
 						reader.SetNorm(4, "field1", 123);
 						reader.SetNorm(44, "field2", 222);
 						reader.SetNorm(44, "field4", 22);
@@ -1374,7 +1196,7 @@ namespace Lucene.Net.Index
 					}
 				
 				case 4:  {
-						IndexReader reader = IndexReader.Open(dir);
+						IndexReader reader = IndexReader.Open(dir, false);
 						reader.SetNorm(5, "field1", 123);
 						reader.SetNorm(55, "field2", 222);
 						reader.Close();
@@ -1463,85 +1285,15 @@ namespace Lucene.Net.Index
 			System.String tempDir = System.IO.Path.GetTempPath();
 			if (tempDir == null)
 				throw new System.IO.IOException("java.io.tmpdir undefined, cannot run test");
-			indexDir = new System.IO.FileInfo(System.IO.Path.Combine(tempDir, "IndexReaderReopen"));
-		}
-		
-		// LUCENE-1453
-		[Test]
-		public virtual void  TestFSDirectoryReopen()
-		{
-			Directory dir1 = FSDirectory.GetDirectory(indexDir, null);
-			CreateIndex(dir1, false);
-			dir1.Close();
-			
-			IndexReader ir = IndexReader.Open(indexDir);
-			ModifyIndex(3, ir.Directory());
-			IndexReader newIr = ir.Reopen();
-			ModifyIndex(3, newIr.Directory());
-			IndexReader newIr2 = newIr.Reopen();
-			ModifyIndex(3, newIr2.Directory());
-			IndexReader newIr3 = newIr2.Reopen();
-			
-			ir.Close();
-			newIr.Close();
-			newIr2.Close();
-			
-			// shouldn't throw Directory AlreadyClosedException
-			ModifyIndex(3, newIr3.Directory());
-			newIr3.Close();
+			indexDir = new System.IO.DirectoryInfo(System.IO.Path.Combine(tempDir, "IndexReaderReopen"));
 		}
-		
-		// LUCENE-1453
-		[Test]
-		public virtual void  TestFSDirectoryReopen2()
-		{
-			
-			System.String tempDir = System.IO.Path.GetTempPath();
-			if (tempDir == null)
-				throw new System.IO.IOException("java.io.tmpdir undefined, cannot run test");
-			System.IO.FileInfo indexDir2 = new System.IO.FileInfo(System.IO.Path.Combine(tempDir, "IndexReaderReopen2"));
-			
-			Directory dir1 = FSDirectory.GetDirectory(indexDir2);
-			CreateIndex(dir1, false);
-			
-			IndexReader lastReader = IndexReader.Open(indexDir2);
-			
-			System.Random r = NewRandom();
-			for (int i = 0; i < 10; i++)
-			{
-				int mod = r.Next(5);
-				ModifyIndex(mod, lastReader.Directory());
-				IndexReader reader = lastReader.Reopen();
-				if (reader != lastReader)
-				{
-					lastReader.Close();
-					lastReader = reader;
-				}
-			}
-			lastReader.Close();
-			
-			// Make sure we didn't pick up too many incRef's along
-			// the way -- this close should be the final close:
-			dir1.Close();
-			
-			try
-			{
-				dir1.ListAll();
-				Assert.Fail("did not hit AlreadyClosedException");
-			}
-			catch (AlreadyClosedException ace)
-			{
-				// expected
-			}
-		}
-		
 		[Test]
 		public virtual void  TestCloseOrig()
 		{
 			Directory dir = new MockRAMDirectory();
 			CreateIndex(dir, false);
-			IndexReader r1 = IndexReader.Open(dir);
-			IndexReader r2 = IndexReader.Open(dir);
+			IndexReader r1 = IndexReader.Open(dir, false);
+            IndexReader r2 = IndexReader.Open(dir, false);
 			r2.DeleteDocument(0);
 			r2.Close();
 			
@@ -1569,8 +1321,8 @@ namespace Lucene.Net.Index
 			
 			ModifyIndex(0, dir); // Get delete bitVector on 1st segment
 			ModifyIndex(5, dir); // Add a doc (2 segments)
-			
-			IndexReader r1 = IndexReader.Open(dir); // MSR
+
+            IndexReader r1 = IndexReader.Open(dir, false); // MSR
 			
 			ModifyIndex(5, dir); // Add another doc (3 segments)
 			
@@ -1603,7 +1355,7 @@ namespace Lucene.Net.Index
 			CreateIndex(dir, false);
 			// Get delete bitVector
 			ModifyIndex(0, dir);
-			IndexReader r1 = IndexReader.Open(dir);
+            IndexReader r1 = IndexReader.Open(dir, false);
 			
 			// Add doc:
 			ModifyIndex(5, dir);
@@ -1629,10 +1381,10 @@ namespace Lucene.Net.Index
 		
 		private class KeepAllCommits : IndexDeletionPolicy
 		{
-			public virtual void  OnInit(System.Collections.IList commits)
+            public virtual void OnInit<T>(IList<T> commits) where T : IndexCommit
 			{
 			}
-			public virtual void  OnCommit(System.Collections.IList commits)
+            public virtual void OnCommit<T>(IList<T> commits) where T : IndexCommit
 			{
 			}
 		}
@@ -1659,8 +1411,8 @@ namespace Lucene.Net.Index
 				writer.Commit(data);
 			}
 			writer.Close();
-			
-			IndexReader r = IndexReader.Open(dir);
+
+            IndexReader r = IndexReader.Open(dir, false);
 			Assert.AreEqual(0, r.NumDocs());
 			Assert.AreEqual(4, r.MaxDoc());