package org.testory.common;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import static org.testory.common.Collections.immutable;
import static org.testory.testing.Fakes.newObject;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
public class TestCollectionsImmutable {
private Object a, b, c;
private Collection<Object> elements, immutable;
private List<Object> list;
private Set<Object> set;
@Before
public void before() {
a = newObject("a");
b = newObject("b");
c = newObject("c");
elements = Arrays.asList(a, b, c);
}
@Test
public void list_is_equal() {
immutable = immutable(list(elements));
assertEquals(list(elements), immutable);
}
@Test
public void list_is_unmodifiable() {
immutable = immutable(list(elements));
try {
immutable.clear();
fail();
} catch (UnsupportedOperationException e) {}
}
@Test
public void list_is_defensive_copied() {
list = list(elements);
immutable = immutable(list);
list.clear();
assertEquals(list(elements), immutable);
}
@Test
public void set_is_equal() {
immutable = immutable(set(elements));
assertEquals(set(elements), immutable);
}
@Test
public void set_is_unmodifiable() {
immutable = immutable(set(elements));
try {
immutable.clear();
fail();
} catch (UnsupportedOperationException e) {}
}
@Test
public void set_is_defensive_copied() {
set = set(elements);
immutable = immutable(set);
set.clear();
assertEquals(set(elements), immutable);
}
private static <E> List<E> list(Collection<E> elements) {
return new ArrayList<>(elements);
}
private static <E> Set<E> set(Collection<E> elements) {
return new HashSet<>(elements);
}
}