1b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// Protocol Buffers - Google's data interchange format
2b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// Copyright 2008 Google Inc.  All rights reserved.
3b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// https://developers.google.com/protocol-buffers/
4b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//
5b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// Redistribution and use in source and binary forms, with or without
6b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// modification, are permitted provided that the following conditions are
7b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// met:
8b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//
9b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//     * Redistributions of source code must retain the above copyright
10b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// notice, this list of conditions and the following disclaimer.
11b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//     * Redistributions in binary form must reproduce the above
12b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// copyright notice, this list of conditions and the following disclaimer
13b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// in the documentation and/or other materials provided with the
14b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// distribution.
15b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//     * Neither the name of Google Inc. nor the names of its
16b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// contributors may be used to endorse or promote products derived from
17b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// this software without specific prior written permission.
18b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer//
19b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
31b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerpackage com.google.protobuf;
32b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
33b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerimport static java.util.Arrays.asList;
34b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
35b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerimport junit.framework.TestCase;
36b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
37b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerimport java.util.Collections;
38b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerimport java.util.ConcurrentModificationException;
39b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerimport java.util.Iterator;
40b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerimport java.util.List;
41b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
42b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer/**
43b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer * Tests for {@link ProtobufArrayList}.
44b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer */
45b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerpublic class ProtobufArrayListTest extends TestCase {
46b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
47b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  private static final ProtobufArrayList<Integer> UNARY_LIST = newImmutableProtoArrayList(1);
48b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  private static final ProtobufArrayList<Integer> TERTIARY_LIST =
49b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      newImmutableProtoArrayList(1, 2, 3);
50b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
51b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  private ProtobufArrayList<Integer> list;
52b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
53b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  @Override
54b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  protected void setUp() throws Exception {
55b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list = new ProtobufArrayList<Integer>();
56b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  }
57b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
58b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  public void testEmptyListReturnsSameInstance() {
59b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    assertSame(ProtobufArrayList.emptyList(), ProtobufArrayList.emptyList());
60b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  }
61b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
62b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  public void testEmptyListIsImmutable() {
63b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    assertImmutable(ProtobufArrayList.<Integer>emptyList());
64b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  }
65b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
66b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  public void testModificationWithIteration() {
67b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.addAll(asList(1, 2, 3, 4));
68b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    Iterator<Integer> iterator = list.iterator();
69b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    assertEquals(4, list.size());
70b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    assertEquals(1, (int) list.get(0));
71b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    assertEquals(1, (int) iterator.next());
72b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
73b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.remove(0);
74b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
75b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      iterator.next();
76b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
77b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (ConcurrentModificationException e) {
78b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
79b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
80b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
81b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    iterator = list.iterator();
82b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.set(0, 1);
83b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
84b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      iterator.next();
85b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
86b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (ConcurrentModificationException e) {
87b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
88b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
89b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
90b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    iterator = list.iterator();
91b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.add(0, 0);
92b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
93b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      iterator.next();
94b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
95b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (ConcurrentModificationException e) {
96b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
97b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
98b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  }
99b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
100b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  public void testMakeImmutable() {
101b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.add(2);
102b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.add(4);
103b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.add(6);
104b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.add(8);
105b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.makeImmutable();
106b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    assertImmutable(list);
107b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  }
108b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
109b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  public void testRemove() {
110b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.add(2);
111b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.add(4);
112b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.add(6);
113b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
114b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.remove(1);
115b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    assertEquals(asList(2, 6), list);
116b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
117b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.remove(1);
118b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    assertEquals(asList(2), list);
119b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
120b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.remove(0);
121b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    assertEquals(asList(), list);
122b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  }
123b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
124b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  public void testGet() {
125b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.add(2);
126b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.add(6);
127b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
128b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    assertEquals(2, (int) list.get(0));
129b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    assertEquals(6, (int) list.get(1));
130b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  }
131b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
132b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  public void testSet() {
133b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.add(2);
134b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.add(6);
135b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
136b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.set(0, 1);
137b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    assertEquals(1, (int) list.get(0));
138b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.set(1, 2);
139b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    assertEquals(2, (int) list.get(1));
140b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  }
141b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
142b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  private void assertImmutable(List<Integer> list) {
143b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    if (list.contains(1)) {
144b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      throw new RuntimeException("Cannot test the immutability of lists that contain 1.");
145b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
146b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
147b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
148b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      list.add(1);
149b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
150b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (UnsupportedOperationException e) {
151b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
152b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
153b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
154b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
155b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      list.add(0, 1);
156b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
157b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (UnsupportedOperationException e) {
158b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
159b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
160b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
161b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
162b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      list.addAll(Collections.<Integer>emptyList());
163b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
164b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (UnsupportedOperationException e) {
165b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
166b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
167b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
168b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
169b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      list.addAll(Collections.singletonList(1));
170b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
171b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (UnsupportedOperationException e) {
172b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
173b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
174b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
175b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
176b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      list.addAll(new ProtobufArrayList<Integer>());
177b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
178b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (UnsupportedOperationException e) {
179b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
180b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
181b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
182b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
183b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      list.addAll(UNARY_LIST);
184b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
185b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (UnsupportedOperationException e) {
186b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
187b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
188b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
189b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
190b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      list.addAll(0, Collections.singleton(1));
191b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
192b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (UnsupportedOperationException e) {
193b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
194b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
195b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
196b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
197b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      list.addAll(0, UNARY_LIST);
198b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
199b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (UnsupportedOperationException e) {
200b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
201b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
202b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
203b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
204b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      list.addAll(0, Collections.<Integer>emptyList());
205b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
206b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (UnsupportedOperationException e) {
207b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
208b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
209b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
210b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
211b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      list.clear();
212b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
213b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (UnsupportedOperationException e) {
214b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
215b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
216b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
217b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
218b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      list.remove(1);
219b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
220b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (UnsupportedOperationException e) {
221b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
222b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
223b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
224b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
225b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      list.remove(new Object());
226b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
227b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (UnsupportedOperationException e) {
228b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
229b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
230b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
231b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
232b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      list.removeAll(Collections.emptyList());
233b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
234b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (UnsupportedOperationException e) {
235b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
236b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
237b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
238b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
239b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      list.removeAll(Collections.singleton(1));
240b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
241b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (UnsupportedOperationException e) {
242b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
243b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
244b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
245b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
246b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      list.removeAll(UNARY_LIST);
247b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
248b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (UnsupportedOperationException e) {
249b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
250b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
251b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
252b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
253b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      list.retainAll(Collections.emptyList());
254b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
255b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (UnsupportedOperationException e) {
256b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
257b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
258b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
259b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
260b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      list.retainAll(Collections.singleton(1));
261b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
262b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (UnsupportedOperationException e) {
263b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
264b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
265b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
266b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
267b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      list.retainAll(UNARY_LIST);
268b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
269b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (UnsupportedOperationException e) {
270b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
271b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
272b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
273b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    try {
274b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      list.set(0, 0);
275b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      fail();
276b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    } catch (UnsupportedOperationException e) {
277b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      // expected
278b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
279b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  }
280b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer
281b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  private static ProtobufArrayList<Integer> newImmutableProtoArrayList(int... elements) {
282b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    ProtobufArrayList<Integer> list = new ProtobufArrayList<Integer>();
283b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    for (int element : elements) {
284b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer      list.add(element);
285b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    }
286b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    list.makeImmutable();
287b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer    return list;
288b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer  }
289b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer}
290