c7e8d7f68faa31f74179c04b751a931c5297d4b1
[idea/community.git] / platform / util / testSrc / com / intellij / util / containers / ContainerUtilTest.java
1 /*
2  * Copyright 2000-2009 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
17 package com.intellij.util.containers;
18
19 import com.intellij.openapi.util.Condition;
20
21 import java.util.*;
22
23 public class ContainerUtilTest extends junit.framework.TestCase {
24   public void testFindInstanceOf() {
25     Iterator<Object> iterator = Arrays.<Object>asList(new Integer(1), new ArrayList(), "1").iterator();
26     String string = (String)ContainerUtil.find(iterator, FilteringIterator.instanceOf(String.class));
27     junit.framework.Assert.assertEquals("1", string);
28   }
29
30   public void testConcatMulti() {
31     List<Integer> l = ContainerUtil.concat(Arrays.asList(1, 2), Collections.EMPTY_LIST, Arrays.asList(3, 4));
32     assertEquals(4, l.size());
33     assertEquals(1, (int)l.get(0));
34     assertEquals(2, (int)l.get(1));
35     assertEquals(3, (int)l.get(2));
36     assertEquals(4, (int)l.get(3));
37
38     try {
39       l.get(-1);
40       fail();
41     }
42     catch (IndexOutOfBoundsException ignore) {
43     }
44
45     try {
46       l.get(4);
47       fail();
48     }
49     catch (IndexOutOfBoundsException ignore) {
50     }
51   }
52
53   public void testIterateWithCondition() throws Exception {
54     Condition<Integer> cond = new Condition<Integer>() {
55       @Override
56       public boolean value(Integer integer) {
57         return integer > 2;
58       }
59     };
60
61     asserIterating(Arrays.asList(1, 4, 2, 5), cond, 4, 5);
62     asserIterating(Arrays.asList(1, 2), cond);
63     asserIterating(Collections.<Integer>emptyList(), cond);
64     asserIterating(Arrays.asList(4), cond, 4);
65   }
66
67   private static void asserIterating(List<Integer> collection, Condition<Integer> condition, Integer... expected) {
68     Iterable<Integer> it = ContainerUtil.iterate(collection, condition);
69     List<Integer> actual = new ArrayList<Integer>();
70     for (Integer each : it) {
71       actual.add(each);
72     }
73     assertEquals(Arrays.asList(expected), actual);
74   }
75
76   public void testIteratingBackward() throws Exception {
77     List<String> ss = new ArrayList<String>();
78     ss.add("a");
79     ss.add("b");
80     ss.add("c");
81
82     String log = "";
83     for (String s : ss) {
84       log += s;
85     }
86
87     for (String s : ContainerUtil.iterateBackward(ss)) {
88       log += s;
89     }
90
91     assertEquals("abccba", log);
92   }
93 }