Remove redundant iterator classes, make ChainIterator inner class of ChainIterable
[idea/community.git] / python / testSrc / com / jetbrains / python / toolbox / IteratorsTest.java
1 /*
2  * Copyright 2000-2013 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.jetbrains.python.toolbox;
17
18 import junit.framework.TestCase;
19
20 import java.util.ArrayList;
21 import java.util.Arrays;
22 import java.util.List;
23
24 /**
25  * Tests all iterators and iterables.
26  * User: dcheryasov
27  * Date: Nov 20, 2009 3:42:51 AM
28  */
29 public class IteratorsTest extends TestCase {
30
31   public IteratorsTest() {
32     super();
33   }
34
35   public void testChainIterableByLists() {
36     List<String> list1 = Arrays.asList("foo", "bar", "baz");
37     List<String> list2 = Arrays.asList("ichi", "ni", "san");
38     List<String> list3 = Arrays.asList("a", "s", "d", "f");
39     List<String> all = new ArrayList<String>();
40     all.addAll(list1);
41     all.addAll(list2);
42     all.addAll(list3);
43     ChainIterable<String> tested = new ChainIterable<String>(list1).add(list2).add(list3);
44     int count = 0;
45     for (String what : tested) {
46       assertEquals(all.get(count), what);
47       count += 1;
48     }
49     assertEquals(all.size(), count);
50   }
51
52   public void testChainIterableEmptyFirst() {
53     List<String> list1 = Arrays.asList();
54     List<String> list2 = Arrays.asList("ichi", "ni", "san");
55     List<String> list3 = Arrays.asList("a", "s", "d", "f");
56     List<String> all = new ArrayList<String>();
57     all.addAll(list1);
58     all.addAll(list2);
59     all.addAll(list3);
60     ChainIterable<String> tested = new ChainIterable<String>(list1).add(list2).add(list3);
61     int count = 0;
62     for (String what : tested) {
63       assertEquals(all.get(count), what);
64       count += 1;
65     }
66     assertEquals(all.size(), count);
67   }
68
69   public void testChainIterableEmptyLast() {
70     List<String> list1 = Arrays.asList("foo", "bar", "baz");
71     List<String> list2 = Arrays.asList("ichi", "ni", "san");
72     List<String> list3 = Arrays.asList();
73     List<String> all = new ArrayList<String>();
74     all.addAll(list1);
75     all.addAll(list2);
76     all.addAll(list3);
77     ChainIterable<String> tested = new ChainIterable<String>(list1).add(list2).add(list3);
78     int count = 0;
79     for (String what : tested) {
80       assertEquals(all.get(count), what);
81       count += 1;
82     }
83     assertEquals(all.size(), count);
84   }
85
86   public void testChainIterableEmptyMiddle() {
87     List<String> list1 = Arrays.asList("foo", "bar", "baz");
88     List<String> list2 = Arrays.asList();
89     List<String> list3 = Arrays.asList("a", "s", "d", "f");
90     List<String> all = new ArrayList<String>();
91     all.addAll(list1);
92     all.addAll(list2);
93     all.addAll(list3);
94     ChainIterable<String> tested = new ChainIterable<String>(list1).add(list2).add(list3);
95     int count = 0;
96     for (String what : tested) {
97       assertEquals(all.get(count), what);
98       count += 1;
99     }
100     assertEquals(all.size(), count);
101   }
102
103   public void testToStringDoesntExhaustIterator() {
104     final ChainIterable<String> initial = new ChainIterable<String>();
105     initial.addItem("foo");
106     assertEquals("foo", initial.toString());;
107     assertEquals("foo", initial.toString());
108   }
109 }