package com.nicewuerfel.blockown;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
public class TestUser {
private static List<UUID> ids;
@BeforeClass
public static void init() {
Set<UUID> ids = new HashSet<>(40);
for (int i = 0; i < 20; i++) {
if (!ids.add(UUID.randomUUID())) {
i--;
}
}
TestUser.ids = Collections.unmodifiableList(listFromSet(ids));
}
private static <T> List<T> listFromSet(Set<T> ids) {
List<T> list = new ArrayList<>(ids.size());
list.addAll(ids);
return list;
}
@Rule
public ExpectedException expected = ExpectedException.none();
@Test
public void testIntegrity() {
assertEquals(0, User.class.getConstructors().length);
User u1 = User.getInstance(ids.get(0));
User u1_2 = User.getInstance(ids.get(0));
User u2 = User.getInstance(ids.get(1));
assertSame(u1, u1_2);
assertNotSame(u1, u2);
User u2_2 = User.getInstance(ids.get(1), null);
assertSame(u2_2, u2);
expected.expect(NullPointerException.class);
@SuppressWarnings("unused")
User noob = User.getInstance(null);
}
@Test
public void testEquals() {
User u1 = User.getInstance(ids.get(0));
User u1_2 = User.getInstance(ids.get(0));
User u1_3 = User.getInstance(ids.get(0));
User u2 = User.getInstance(ids.get(1));
// Integrity
assertFalse(u1.equals(u2));
assertFalse(u2.equals(u1));
// Reflexivity
assertTrue(u1.equals(u1));
// Transivity
assertTrue(u1.equals(u1_2));
assertTrue(u1_2.equals(u1_3));
assertTrue(u1.equals(u1_3));
// Symmetry
assertTrue(u1.equals(u1_2));
assertTrue(u1_2.equals(u1));
assertFalse(u1.equals(u2));
assertFalse(u2.equals(u1));
}
@Test
public void testHashCode() {
User u1 = User.getInstance(ids.get(0));
User u1_2 = User.getInstance(ids.get(0));
User u2 = User.getInstance(ids.get(1));
assertEquals(u1.hashCode(), u1_2.hashCode());
assertEquals(u2.hashCode(), u2.hashCode());
}
@Test
public void testToString() {
// Just to make sure no NullPointers are thrown
User u1 = User.getInstance(ids.get(0));
u1.toString();
}
}