blob: ea7e9c4c2420792af65dba694a937619d961a89c [file] [log] [blame]
/*
* Copyright 2017 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.emultest.java8.util;
import com.google.gwt.emultest.java.util.EmulTestBase;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.ListIterator;
import java.util.function.Consumer;
/** Tests for Collections that require Java8 syntax. */
public class CollectionsTest extends EmulTestBase {
public void testUnmodifiableList() {
List<String> list = Collections.unmodifiableList(Arrays.asList("1", "2", "3"));
doTestModificationsToList(list);
doTestModificationsToListViaIterator(list);
}
public void testUnmodifiableList_emptyList() {
List<String> list = Collections.unmodifiableList(new ArrayList<>());
doTestModificationsToList(list);
}
private void doTestModificationsToList(List<String> list) {
assertUnmodifiableContract(list, l -> l.add("4"));
assertUnmodifiableContract(list, l -> l.add(0, "5"));
assertUnmodifiableContract(list, l -> l.addAll(Arrays.asList("6")));
assertUnmodifiableContract(list, l -> l.addAll(0, Arrays.asList("7")));
assertUnmodifiableContract(list, l -> l.addAll(Arrays.asList()));
assertUnmodifiableContract(list, l -> l.clear());
assertUnmodifiableContract(list, l -> l.replaceAll((s) -> s + "asdf"));
assertUnmodifiableContract(list, l -> l.remove("1"));
assertUnmodifiableContract(list, l -> l.remove(0));
assertUnmodifiableContract(list, l -> l.removeAll(Arrays.asList("1")));
assertUnmodifiableContract(list, l -> l.removeIf((s) -> true));
assertUnmodifiableContract(list, l -> l.retainAll(Arrays.asList("4")));
assertUnmodifiableContract(list, l -> l.set(0, "24"));
assertUnmodifiableContract(
list, l -> l.sort((s1, s2) -> Integer.valueOf(s2) - Integer.valueOf(s1)));
assertUnmodifiableContract(list, l -> l.subList(0, 0).remove(0));
}
private void doTestModificationsToListViaIterator(List<String> list) {
assertUnmodifiableContractThroughIterator(list, i -> i.add("4"));
assertUnmodifiableContractThroughIterator(list, i -> i.remove());
assertUnmodifiableContractThroughIterator(list, i -> i.set("4"));
}
private static void assertUnmodifiableContractThroughIterator(
List<String> list, Consumer<ListIterator<String>> consumer) {
assertUnmodifiableContract(
list,
l -> {
ListIterator<String> listIterator = l.listIterator();
listIterator.next();
consumer.accept(listIterator);
});
assertUnmodifiableContract(
list,
l -> {
ListIterator<String> listIterator = l.listIterator(1);
listIterator.next();
consumer.accept(listIterator);
});
}
private static void assertUnmodifiableContract(
List<String> list, Consumer<List<String>> consumer) {
List<?> originalContent = new ArrayList<>(list);
try {
consumer.accept(list);
fail();
} catch (UnsupportedOperationException e) {
}
assertEquals(originalContent, list);
}
}