/*
* 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.
*/
package org.apache.jena.util.iterator.test;
import java.util.List ;
import junit.framework.TestSuite ;
import org.apache.jena.rdf.model.test.ModelTestBase ;
import org.apache.jena.util.iterator.ExtendedIterator ;
import org.apache.jena.util.iterator.NiceIterator ;
import org.apache.jena.util.iterator.WrappedIterator ;
public class TestAndThen extends ModelTestBase
{
public TestAndThen( String name )
{ super( name ); }
public static TestSuite suite()
{ return new TestSuite( TestAndThen.class ); }
public void testAndThen()
{
ExtendedIterator<String> L = iteratorOfStrings( "a b c" );
ExtendedIterator<String> R = iteratorOfStrings( "d e f" );
assertInstanceOf( NiceIterator.class, L );
assertInstanceOf( NiceIterator.class, R );
assertEquals( listOfStrings( "a b c d e f" ), iteratorToList( L.andThen( R ) ) );
}
public void testAndThenExtension()
{
ExtendedIterator<String> L = iteratorOfStrings( "a b c" );
ExtendedIterator<String> R = iteratorOfStrings( "d e f" );
ExtendedIterator<String> X = iteratorOfStrings( "g h i" );
ExtendedIterator<String> LR = L.andThen( R );
ExtendedIterator<String> LRX = LR.andThen( X );
assertSame( LR, LRX );
List<String> aToI = listOfStrings( "a b c d e f g h i" );
assertEquals( aToI, iteratorToList( LRX ) );
}
public void testClosingConcatenationClosesRemainingIterators()
{
LoggingClosableIterator<String> L = new LoggingClosableIterator<>( iteratorOfStrings( "only" ) );
LoggingClosableIterator<String> M = new LoggingClosableIterator<>( iteratorOfStrings( "single" ) );
LoggingClosableIterator<String> R = new LoggingClosableIterator<>( iteratorOfStrings( "it" ) );
ExtendedIterator<String> cat = L.andThen( M ).andThen( R );
cat.next();
cat.close();
assertTrue( "middle iterator should have been closed", M.isClosed() );
assertTrue( "final iterator should have been closed", R.isClosed() );
}
public void testRemove1()
{
List<String> L = listOfStrings("a b c");
List<String> R = listOfStrings("d e f");
ExtendedIterator<String> Lit = WrappedIterator.create(L.iterator());
ExtendedIterator<String> Rit = WrappedIterator.create(R.iterator());
ExtendedIterator<String> LR = Lit.andThen( Rit ) ;
while (LR.hasNext())
{
String s = LR.next();
if ("c".equals(s))
{
LR.hasNext(); // test for JENA-60
LR.remove();
}
}
assertEquals("ab", concatAsString(L));
assertEquals("def", concatAsString(R));
}
public void testRemove2()
{
List<String> L = listOfStrings("a b c");
List<String> R = listOfStrings("d e f");
ExtendedIterator<String> Lit = WrappedIterator.create(L.iterator());
ExtendedIterator<String> Rit = WrappedIterator.create(R.iterator());
ExtendedIterator<String> LR = Lit.andThen( Rit ) ;
while (LR.hasNext())
{
String s = LR.next();
if ("d".equals(s))
{
LR.hasNext(); // test for JENA-60
LR.remove();
}
}
assertEquals("abc", concatAsString(L));
assertEquals("ef", concatAsString(R));
}
public void testRemove3()
{
List<String> L = listOfStrings("a b c");
List<String> R = listOfStrings("d e f");
ExtendedIterator<String> Lit = WrappedIterator.create(L.iterator());
ExtendedIterator<String> Rit = WrappedIterator.create(R.iterator());
ExtendedIterator<String> LR = Lit.andThen( Rit ) ;
while (LR.hasNext())
{
LR.next();
}
LR.remove();
assertEquals("abc", concatAsString(L));
assertEquals("de", concatAsString(R));
}
private String concatAsString(List<String> strings)
{
String toReturn = "";
for(String s : strings)
{
toReturn += s;
}
return toReturn;
}
}