1cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/*
2cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  Licensed to the Apache Software Foundation (ASF) under one or more
3cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  contributor license agreements.  See the NOTICE file distributed with
4cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  this work for additional information regarding copyright ownership.
5cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  The ASF licenses this file to You under the Apache License, Version 2.0
6cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  (the "License"); you may not use this file except in compliance with
7cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  the License.  You may obtain a copy of the License at
8cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *
9cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *     http://www.apache.org/licenses/LICENSE-2.0
10cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *
11cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  Unless required by applicable law or agreed to in writing, software
12cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  distributed under the License is distributed on an "AS IS" BASIS,
13cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  See the License for the specific language governing permissions and
15cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  limitations under the License.
16cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */
17cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
18ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.util;
19cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
20cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.AbstractCollection;
21cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Arrays;
22cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Collection;
23cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Iterator;
24cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport junit.framework.TestCase;
25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic class AbstractCollectionTest extends TestCase {
27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.util.AbstractCollection#add(java.lang.Object)
30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_addLjava_lang_Object() {
32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        AbstractCollection<Object> ac = new AbstractCollection<Object>() {
33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            @Override
35cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public Iterator<Object> iterator() {
36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                fail("iterator should not get called");
37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return null;
38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            @Override
41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public int size() {
42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                fail("size should not get called");
43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return 0;
44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        };
47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ac.add(null);
49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (UnsupportedOperationException e) {
50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
51cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
52cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
53cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.util.AbstractCollection#addAll(java.util.Collection)
55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_addAllLjava_util_Collection() {
57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        final Collection<String> fixtures = Arrays.asList("0", "1", "2");
58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        AbstractCollection<String> ac = new AbstractCollection<String>() {
59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            @Override
61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public boolean add(String object) {
62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                assertTrue(fixtures.contains(object));
63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return true;
64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            @Override
67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public Iterator<String> iterator() {
68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                fail("iterator should not get called");
69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return null;
70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            @Override
73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public int size() {
74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                fail("size should not get called");
75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return 0;
76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        };
79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(ac.addAll(fixtures));
80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.util.AbstractCollection#containsAll(java.util.Collection)
84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_containsAllLjava_util_Collection() {
86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        final Collection<String> fixtures = Arrays.asList("0", "1", "2");
87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        AbstractCollection<String> ac = new AbstractCollection<String>() {
88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            @Override
90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public boolean contains(Object object) {
91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                assertTrue(fixtures.contains(object));
92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return true;
93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            @Override
96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public Iterator<String> iterator() {
97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                fail("iterator should not get called");
98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return null;
99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            @Override
102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public int size() {
103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                fail("size should not get called");
104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return 0;
105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        };
108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(ac.containsAll(fixtures));
109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.util.AbstractCollection#isEmpty()
113cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
114cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_isEmpty() {
115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        final boolean[] sizeCalled = new boolean[1];
116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        AbstractCollection<Object> ac = new AbstractCollection<Object>() {
117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            @Override
118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public Iterator<Object> iterator() {
119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                fail("iterator should not get called");
120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return null;
121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            @Override
124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public int size() {
125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                sizeCalled[0] = true;
126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return 0;
127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        };
129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(ac.isEmpty());
130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(sizeCalled[0]);
131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
132cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
134cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.util.AbstractCollection#removeAll(java.util.Collection)
135cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
136cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_removeAllLjava_util_Collection() {
137cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        final String[] removed = new String[3];
138cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        AbstractCollection<String> ac = new AbstractCollection<String>() {
139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
140cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            @Override
141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public Iterator<String> iterator() {
142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return new Iterator<String>() {
143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    String[] values = new String[] { "0", "1", "2" };
144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    int index;
145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    public boolean hasNext() {
147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        return index < values.length;
148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    }
149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    public String next() {
151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        return values[index++];
152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    }
153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    public void remove() {
155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        removed[index - 1] = values[index - 1];
156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    }
157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                };
159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            @Override
162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public int size() {
163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                fail("size should not get called");
164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return 0;
165cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
166cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
167cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        };
168cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(ac.removeAll(Arrays.asList("0", "1", "2")));
169cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (String r : removed) {
170cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            if (!"0".equals(r) && !"1".equals(r) && !"2".equals(r)) {
171cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                fail("an unexpected element was removed");
172cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
173cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
174cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
175cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
176cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
177cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.util.AbstractCollection#retainAll(java.util.Collection)
178cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
179cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_retainAllLjava_util_Collection() {
180cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        final String[] removed = new String[1];
181cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        AbstractCollection<String> ac = new AbstractCollection<String>() {
182cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
183cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            @Override
184cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public Iterator<String> iterator() {
185cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return new Iterator<String>() {
186cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    String[] values = new String[] { "0", "1", "2" };
187cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    int index;
188cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
189cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    public boolean hasNext() {
190cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        return index < values.length;
191cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    }
192cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
193cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    public String next() {
194cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        return values[index++];
195cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    }
196cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
197cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    public void remove() {
198cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        removed[index - 1] = values[index - 1];
199cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    }
200cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
201cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                };
202cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
203cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
204cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            @Override
205cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public int size() {
206cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                fail("size should not get called");
207cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return 0;
208cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
209cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
210cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        };
211cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(ac.retainAll(Arrays.asList("1", "2")));
212cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("0", removed[0]);
213cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
214cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
215cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
216cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.util.AbstractCollection#toArray()
217cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
218cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_toArray() {
219cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        AbstractCollection<String> ac = new AbstractCollection<String>() {
220cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            @Override
221cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public Iterator<String> iterator() {
222cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return new Iterator<String>() {
223cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    String[] values = new String[] { "0", "1", "2" };
224cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    int index;
225cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
226cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    public boolean hasNext() {
227cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        return index < values.length;
228cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    }
229cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
230cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    public String next() {
231cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        return values[index++];
232cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    }
233cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
234cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    public void remove() {
235cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        fail("remove should not get called");
236cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    }
237cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
238cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                };
239cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
240cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
241cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            @Override
242cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public int size() {
243cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return 3;
244cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
245cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        };
246cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
247cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Object[] array = ac.toArray();
248cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(3, array.length);
249cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (Object o : array) {
250cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            if (!"0".equals(o) && !"1".equals(o) && !"2".equals(o)) {
251cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                fail("an unexpected element was removed");
252cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
253cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
254cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
255cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
256cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
257cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.util.AbstractCollection#toArray(java.lang.Object[])
258cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
259cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_toArray$Ljava_lang_Object() {
260cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        AbstractCollection<String> ac = new AbstractCollection<String>() {
261cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            @Override
262cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public Iterator<String> iterator() {
263cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return new Iterator<String>() {
264cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    String[] values = new String[] { "0", "1", "2" };
265cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    int index;
266cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
267cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    public boolean hasNext() {
268cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        return index < values.length;
269cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    }
270cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
271cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    public String next() {
272cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        return values[index++];
273cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    }
274cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
275cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    public void remove() {
276cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        fail("remove should not get called");
277cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    }
278cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
279cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                };
280cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
281cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
282cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            @Override
283cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public int size() {
284cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return 3;
285cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
286cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        };
287cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
288cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ac.toArray(null);
289cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("No expected NullPointerException");
290cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
291cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
292cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
293cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
294cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
295cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ac.toArray(new StringBuffer[ac.size()]);
296cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("No expected ArrayStoreException");
297cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (ArrayStoreException e) {
298cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
299cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
300cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
301cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String[] a = new String[3];
302cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertSame(a, ac.toArray(a));
303cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
304cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        a = new String[0];
305cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertNotSame(a, ac.toArray(a));
306cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        a = ac.toArray(a);
307cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(3, a.length);
308cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
309cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        CharSequence[] csa = new CharSequence[3];
310cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        ac.toArray(csa);
311cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(3, csa.length);
312cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("0", csa[0]);
313cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("1", csa[1]);
314cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("2", csa[2]);
315cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
316cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
317cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
318cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.util.AbstractCollection#toString()
319cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
320cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_toString() {
321cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // see HARMONY-1522
322cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // collection that returns null iterator(this is against the spec.)
323cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        AbstractCollection<?> c = new AbstractCollection<Object>() {
324cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            @Override
325cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public int size() {
326cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                // return non-zero value to pass 'isEmpty' check
327cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return 1;
328cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
329cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
330cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            @Override
331cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public Iterator<Object> iterator() {
332cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                // this violates the spec.
333cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return null;
334cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
335cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        };
336cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
337cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
338cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // AbstractCollection.toString() doesn't verify
339cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // whether iterator() returns null value or not
340cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            c.toString();
341cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("No expected NullPointerException");
342cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
343cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
344cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
345cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath}
346