blob: 5c5f7c939e545fc3f6cf10c52e75d832010f8e2e [file] [log] [blame]
using NUnit.Framework;
using System;
using Assert = Lucene.Net.TestFramework.Assert;
namespace Lucene.Net.Search
{
/*
* 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.
*/
using AtomicReaderContext = Lucene.Net.Index.AtomicReaderContext;
using LuceneTestCase = Lucene.Net.Util.LuceneTestCase;
[TestFixture]
public class MultiCollectorTest : LuceneTestCase
{
private class DummyCollector : ICollector
{
internal bool AcceptsDocsOutOfOrderCalled { get; private set; } = false;
internal bool CollectCalled { get; private set; } = false;
internal bool SetNextReaderCalled { get; private set; } = false;
internal bool SetScorerCalled { get; private set; } = false;
public virtual bool AcceptsDocsOutOfOrder
{
get
{
AcceptsDocsOutOfOrderCalled = true;
return true;
}
}
public virtual void Collect(int doc)
{
CollectCalled = true;
}
public virtual void SetNextReader(AtomicReaderContext context)
{
SetNextReaderCalled = true;
}
public virtual void SetScorer(Scorer scorer)
{
SetScorerCalled = true;
}
}
[Test]
public virtual void TestNullCollectors()
{
// Tests that the collector rejects all null collectors.
try
{
MultiCollector.Wrap(null, null);
Assert.Fail("only null collectors should not be supported");
}
#pragma warning disable 168
catch (ArgumentException e)
#pragma warning restore 168
{
// expected
}
// Tests that the collector handles some null collectors well. If it
// doesn't, an NPE would be thrown.
ICollector c = MultiCollector.Wrap(new DummyCollector(), null, new DummyCollector());
Assert.IsTrue(c is MultiCollector);
Assert.IsTrue(c.AcceptsDocsOutOfOrder);
c.Collect(1);
c.SetNextReader(null);
c.SetScorer(null);
}
[Test]
public virtual void TestSingleCollector()
{
// Tests that if a single Collector is input, it is returned (and not MultiCollector).
DummyCollector dc = new DummyCollector();
Assert.AreSame(dc, MultiCollector.Wrap(dc));
Assert.AreSame(dc, MultiCollector.Wrap(dc, null));
}
[Test]
public virtual void TestCollector()
{
// Tests that the collector delegates calls to input collectors properly.
// Tests that the collector handles some null collectors well. If it
// doesn't, an NPE would be thrown.
DummyCollector[] dcs = new DummyCollector[] { new DummyCollector(), new DummyCollector() };
ICollector c = MultiCollector.Wrap(dcs);
Assert.IsTrue(c.AcceptsDocsOutOfOrder);
c.Collect(1);
c.SetNextReader(null);
c.SetScorer(null);
foreach (DummyCollector dc in dcs)
{
Assert.IsTrue(dc.AcceptsDocsOutOfOrderCalled);
Assert.IsTrue(dc.CollectCalled);
Assert.IsTrue(dc.SetNextReaderCalled);
Assert.IsTrue(dc.SetScorerCalled);
}
}
}
}