### Question:
MultiReadable implements CharReadable { @Override public void close() throws IOException { closeCurrent(); } MultiReadable( RawIterator<CharReadable,IOException> readers ); @Override void close(); @Override String sourceDescription(); @Override long position(); @Override SectionedCharBuffer read( SectionedCharBuffer buffer, int from ); @Override int read( char[] into, int offset, int length ); @Override long length();  }### Answer:
@Test void shouldReadFromMultipleReaders() throws Exception { String[][] data = new String[][] { {"this is", "the first line"}, {"where this", "is the second line"}, {"and here comes", "the third line"} }; RawIterator<CharReadable,IOException> readers = readerIteratorFromStrings( data, null ); CharSeeker seeker = CharSeekers.charSeeker( new MultiReadable( readers ), CONFIG, true ); for ( String[] line : data ) { assertNextLine( line, seeker, mark, extractors ); } assertFalse( seeker.seek( mark, delimiter ) ); seeker.close(); }
@Test void shouldHandleSourcesEndingWithNewLine() throws Exception { String[][] data = new String[][] { {"this is", "the first line"}, {"where this", "is the second line"}, }; RawIterator<CharReadable,IOException> readers = readerIteratorFromStrings( data, '\n' ); CharSeeker seeker = CharSeekers.charSeeker( new MultiReadable( readers ), CONFIG, true ); for ( String[] line : data ) { assertNextLine( line, seeker, mark, extractors ); } assertFalse( seeker.seek( mark, delimiter ) ); seeker.close(); }