public override bool IncrementToken()
{
if (input.IncrementToken())
{
// capture state lazily - maybe no SinkFilter accepts this state
AttributeSource.State state = null;
foreach (WeakReference<SinkTokenStream> @ref in sinks)
{
SinkTokenStream sink;
if (@ref.TryGetTarget(out sink))
{
if (sink.Accept(this))
{
if (state == null)
{
state = CaptureState();
}
sink.AddState(state);
}
}
}
return true;
}
return false;
}
public virtual void Test() { TokenRangeSinkFilter sinkFilter = new TokenRangeSinkFilter(2, 4); string test = "The quick red fox jumped over the lazy brown dogs"; TeeSinkTokenFilter tee = new TeeSinkTokenFilter(new MockTokenizer(new StringReader(test), MockTokenizer.WHITESPACE, false)); TeeSinkTokenFilter.SinkTokenStream rangeToks = tee.NewSinkTokenStream(sinkFilter); int count = 0; tee.Reset(); while (tee.IncrementToken()) { count++; } int sinkCount = 0; rangeToks.Reset(); while (rangeToks.IncrementToken()) { sinkCount++; } assertTrue(count + " does not equal: " + 10, count == 10); assertTrue("rangeToks Size: " + sinkCount + " is not: " + 2, sinkCount == 2); }