001 /* 002 * LAPIS lightweight structured text processing system 003 * 004 * Copyright (C) 2003 Massachusetts Institute of Technology. 005 * All rights reserved. 006 * 007 * This library is free software; you can redistribute it 008 * and/or modify it under the terms of the GNU General 009 * Public License as published by the Free Software 010 * Foundation, version 2. 011 * 012 * LAPIS homepage: http://graphics.lcs.mit.edu/lapis/ 013 */ 014 015 package lapisx.iterator; 016 017 import junit.framework.*; 018 import java.util.*; 019 020 /** 021 * Test case for ConcatIterator. 022 */ 023 public class ConcatIteratorTest extends TestCase { 024 025 public ConcatIteratorTest (String name) { 026 super(name); 027 } 028 029 protected void setUp () { 030 } 031 032 public static Test suite () { 033 return new TestSuite (ConcatIteratorTest.class); 034 } 035 036 public void testConcat () { 037 List l1 = Arrays.asList (new String[] {"a", "b", "c"}); 038 List l2 = Arrays.asList (new String[] {"d", "e", "f"}); 039 List l3 = Arrays.asList (new String[] {"g", "h"}); 040 Iterator EMPTY = Collections.EMPTY_LIST.iterator (); 041 042 // concatenate two iterators 043 Iterator g1 = new ConcatIterator (l1.iterator (), l2.iterator ()); 044 assertEquals (Arrays.asList (new String[] {"a", "b", "c", "d", "e", "f"}), accumulate (g1)); 045 046 // append empty iterator 047 Iterator g2 = new ConcatIterator (l1.iterator (), EMPTY); 048 assertEquals (Arrays.asList (new String[] {"a", "b", "c"}), accumulate (g2)); 049 050 // prefix empty iterator 051 Iterator g3 = new ConcatIterator (EMPTY, l2.iterator ()); 052 assertEquals (Arrays.asList (new String[] {"d", "e", "f"}), accumulate (g3)); 053 054 // concatenate three iterators 055 Iterator g4 = new ConcatIterator (Arrays.asList (new Iterator[] {l2.iterator (), l3.iterator (), l1.iterator ()})); 056 assertEquals (Arrays.asList (new String[] {"d", "e", "f", "g", "h", "a", "b", "c", }), accumulate (g4)); 057 058 // concatenate one iterator 059 Iterator g5 = new ConcatIterator (Collections.singleton (l3.iterator ())); 060 assertEquals (Arrays.asList (new String[] {"g", "h"}), accumulate (g5)); 061 062 // concatenate no iterators 063 Iterator g6 = new ConcatIterator (Collections.EMPTY_LIST); 064 assertEquals (Collections.EMPTY_LIST, accumulate (g6)); 065 066 // concatenate three empty iterators 067 Iterator g7 = new ConcatIterator (Collections.nCopies (3, EMPTY)); 068 assertEquals (Collections.EMPTY_LIST, accumulate (g7)); 069 070 // remove from concatenated iterator 071 List ml1 = new ArrayList (); ml1.add ("x"); ml1.add ("y"); 072 List ml2 = new ArrayList (); ml2.add ("z"); 073 Iterator g8 = new ConcatIterator (ml1.iterator (), ml2.iterator ()); 074 while (g8.hasNext ()) { 075 g8.next (); 076 g8.remove(); 077 } 078 assertEquals (Collections.EMPTY_LIST, ml1); 079 assertEquals (Collections.EMPTY_LIST, ml2); 080 } 081 082 private List accumulate (Iterator g) { 083 List s = new ArrayList (); 084 while (g.hasNext ()) 085 s.add (g.next ()); 086 return s; 087 } 088 }