blob: 16b2787de145d72934d544f2e75f5ed98cbaedf9 [file] [log] [blame]
using Lucene.Net.Util;
using NUnit.Framework;
using System;
using Lucene.Net.Index;
namespace Lucene.Net.Codecs
{
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
public class TestDefaultPostingsFormatFactory : LuceneTestCase
{
[Test]
public void TestScanLucene()
{
var factory = new DefaultPostingsFormatFactory();
var postingsFormats = factory.AvailableServices;
assertEquals(11, postingsFormats.Count);
assertTrue(postingsFormats.Contains("Lucene41"));
assertTrue(postingsFormats.Contains("Lucene40"));
assertTrue(postingsFormats.Contains("SimpleText"));
assertTrue(postingsFormats.Contains("Pulsing41"));
assertTrue(postingsFormats.Contains("Direct"));
assertTrue(postingsFormats.Contains("FSTOrd41"));
assertTrue(postingsFormats.Contains("FSTOrdPulsing41"));
assertTrue(postingsFormats.Contains("FST41"));
assertTrue(postingsFormats.Contains("FSTPulsing41"));
assertTrue(postingsFormats.Contains("Memory"));
assertTrue(postingsFormats.Contains("BloomFilter"));
}
private class ScanningPostingsFormatFactory : DefaultPostingsFormatFactory
{
protected override void Initialize()
{
base.Initialize();
base.ScanForPostingsFormats(this.GetType().Assembly);
}
}
[Test]
public void TestScanCustom()
{
var factory = new ScanningPostingsFormatFactory();
var postingsFormats = factory.AvailableServices;
assertEquals(13, postingsFormats.Count);
assertTrue(postingsFormats.Contains("Lucene41"));
assertTrue(postingsFormats.Contains("Lucene40"));
assertTrue(postingsFormats.Contains("SimpleText"));
assertTrue(postingsFormats.Contains("Pulsing41"));
assertTrue(postingsFormats.Contains("Direct"));
assertTrue(postingsFormats.Contains("FSTOrd41"));
assertTrue(postingsFormats.Contains("FSTOrdPulsing41"));
assertTrue(postingsFormats.Contains("FST41"));
assertTrue(postingsFormats.Contains("FSTPulsing41"));
assertTrue(postingsFormats.Contains("Memory"));
assertTrue(postingsFormats.Contains("BloomFilter"));
assertTrue(postingsFormats.Contains("Public"));
assertTrue(postingsFormats.Contains("NotIgnored"));
// Ensure our local Lucene40 named type overrides
// the default.
assertEquals(typeof(TestLucene40PostingsFormat), factory.GetPostingsFormat("Lucene40").GetType());
}
private class ExplicitPostingsFormatFactory : DefaultPostingsFormatFactory
{
protected override void Initialize()
{
base.Initialize();
base.PutPostingsFormatType(typeof(PrivatePostingsFormat));
}
}
[Test]
public void TestPutExplicit()
{
var factory = new ExplicitPostingsFormatFactory();
var postingsFormats = factory.AvailableServices;
assertTrue(postingsFormats.Contains("Private"));
}
private class InvalidNamePostingsFormatFactory : DefaultPostingsFormatFactory
{
protected override void Initialize()
{
base.Initialize();
base.PutPostingsFormatType(typeof(InvalidNamedPostingsFormat));
}
}
[Test]
public void TestInvalidName()
{
var factory = new InvalidNamePostingsFormatFactory();
Assert.Throws<ArgumentException>(() => factory.GetPostingsFormat("SomeFormat"));
}
private class CustomNamePostingsFormatFactory : DefaultPostingsFormatFactory
{
protected override void Initialize()
{
base.Initialize();
base.PutPostingsFormatType(typeof(CustomNamedPostingsFormat));
}
}
[Test]
public void TestCustomName()
{
var factory = new CustomNamePostingsFormatFactory();
assertTrue(factory.AvailableServices.Contains("FooBar"));
}
[Test]
public void TestRetrieve()
{
var factory = new DefaultPostingsFormatFactory();
var PostingsFormat = factory.GetPostingsFormat("Lucene41");
assertNotNull(PostingsFormat);
#pragma warning disable 612, 618
assertEquals(typeof(Lucene41.Lucene41PostingsFormat), PostingsFormat.GetType());
#pragma warning restore 612, 618
}
[Test]
public void TestRetrieveCustomNamed()
{
var factory = new CustomNamePostingsFormatFactory();
var PostingsFormat = factory.GetPostingsFormat("FooBar");
assertNotNull(PostingsFormat);
assertEquals(typeof(CustomNamedPostingsFormat), PostingsFormat.GetType());
}
private class ReplacePostingsFormatFactory : DefaultPostingsFormatFactory
{
protected override void Initialize()
{
base.Initialize();
base.PutPostingsFormatType(typeof(TestLucene40PostingsFormat));
}
}
[Test]
public void TestReplace()
{
var factory = new ReplacePostingsFormatFactory();
var PostingsFormat = factory.GetPostingsFormat("Lucene40");
assertNotNull(PostingsFormat);
assertEquals(typeof(TestLucene40PostingsFormat), PostingsFormat.GetType());
}
private class CustomInstanceFactory : DefaultPostingsFormatFactory
{
public override PostingsFormat GetPostingsFormat(string name)
{
if (name.Equals("ThisIsATest", StringComparison.Ordinal))
{
return new NotIgnoredPostingsFormat();
}
return base.GetPostingsFormat(name);
}
// NOTE: Typically, this would be the only method you need to override
// for dependency injection support.
protected override PostingsFormat GetPostingsFormat(Type type)
{
#pragma warning disable 612, 618
if (type.Equals(typeof(Lucene40.Lucene40PostingsFormat)))
#pragma warning restore 612, 618
{
return new CustomNamedPostingsFormat();
}
return base.GetPostingsFormat(type);
}
}
/// <summary>
/// This is a test to simulate what would happen if a dependency injection
/// container were used to supply the instance
/// </summary>
[Test]
public void TestCustomInstanceByName()
{
var factory = new CustomInstanceFactory();
var PostingsFormat = factory.GetPostingsFormat("ThisIsATest");
assertNotNull(PostingsFormat);
assertEquals(typeof(NotIgnoredPostingsFormat), PostingsFormat.GetType());
}
/// <summary>
/// This is a test to simulate what would happen if a dependency injection
/// container were used to supply the instance
/// </summary>
[Test]
public void TestCustomInstanceByType()
{
var factory = new CustomInstanceFactory();
var PostingsFormat = factory.GetPostingsFormat("Lucene40");
assertNotNull(PostingsFormat);
assertEquals(typeof(CustomNamedPostingsFormat), PostingsFormat.GetType());
}
}
#region Test Classes
public class PublicPostingsFormat : PostingsFormat
{
public override FieldsConsumer FieldsConsumer(SegmentWriteState state)
{
throw new NotImplementedException();
}
public override FieldsProducer FieldsProducer(SegmentReadState state)
{
throw new NotImplementedException();
}
}
internal class PrivatePostingsFormat : PostingsFormat
{
public override FieldsConsumer FieldsConsumer(SegmentWriteState state)
{
throw new NotImplementedException();
}
public override FieldsProducer FieldsProducer(SegmentReadState state)
{
throw new NotImplementedException();
}
}
public class NotIgnoredPostingsFormat : PostingsFormat
{
public override FieldsConsumer FieldsConsumer(SegmentWriteState state)
{
throw new NotImplementedException();
}
public override FieldsProducer FieldsProducer(SegmentReadState state)
{
throw new NotImplementedException();
}
}
[ExcludePostingsFormatFromScan]
[PostingsFormatName("FooBar")]
public class CustomNamedPostingsFormat : PostingsFormat
{
public override FieldsConsumer FieldsConsumer(SegmentWriteState state)
{
throw new NotImplementedException();
}
public override FieldsProducer FieldsProducer(SegmentReadState state)
{
throw new NotImplementedException();
}
}
[ExcludePostingsFormatFromScan]
[PostingsFormatName("My-PostingsFormat|With-Bad_Name")]
public class InvalidNamedPostingsFormat : PostingsFormat
{
public override FieldsConsumer FieldsConsumer(SegmentWriteState state)
{
throw new NotImplementedException();
}
public override FieldsProducer FieldsProducer(SegmentReadState state)
{
throw new NotImplementedException();
}
}
[PostingsFormatName("Lucene40")]
public class TestLucene40PostingsFormat : PostingsFormat
{
public override FieldsConsumer FieldsConsumer(SegmentWriteState state)
{
throw new NotImplementedException();
}
public override FieldsProducer FieldsProducer(SegmentReadState state)
{
throw new NotImplementedException();
}
}
#endregion Test Classes
}