package de.ugoe.cs.quest.ui;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
import java.util.Collection;
import java.util.LinkedList;
import org.junit.Before;
import org.junit.Test;
/**
* The class WindowsEventTest
contains tests for the class
* {@link WindowsEvent}
.
*
* @author Steffen Herbold
* @version 1.0
*/
public class GlobalDataContainerTest {
private static void assertCollectionContent(Collection> c1, Collection> c2) {
assertEquals(c1.size(), c2.size());
for (Object obj : c1) {
assertTrue(c2.contains(obj));
}
}
@Test
public void testGlobalDataContainer_1() throws Exception {
// assure that all constructors are private
Constructor>[] constructors = GlobalDataContainer.class.getDeclaredConstructors();
for (int i = 0; i < constructors.length; i++) {
int modifier = constructors[i].getModifiers();
if (modifier != Modifier.PRIVATE) {
fail(constructors[i].getName() + " - " + Modifier.toString(modifier));
}
}
}
@Test
public void testGetInstance_1() throws Exception {
GlobalDataContainer instance1 = GlobalDataContainer.getInstance();
GlobalDataContainer instance2 = GlobalDataContainer.getInstance();
assertNotNull(instance1);
assertSame(instance1, instance2);
}
@Test
public void testDatahandling_1() throws Exception {
// test is data can be added and retrieved as expected
GlobalDataContainer instance = GlobalDataContainer.getInstance();
String key1 = "key1";
String data1 = "data1";
String key2 = "key2";
String data2 = "data2";
String key3 = "key3";
Integer data3 = 1;
String key4 = "key4";
Integer data4 = 2;
String key5 = "key5";
Integer data5 = 3;
assertFalse(instance.addData(key1, data1));
assertFalse(instance.addData(key2, data2));
assertFalse(instance.addData(key3, data3));
assertFalse(instance.addData(key4, data4));
assertFalse(instance.addData(key5, data5));
assertEquals(data1, instance.getData(key1));
assertEquals(data2, instance.getData(key2));
assertEquals(data3, instance.getData(key3));
assertEquals(data4, instance.getData(key4));
assertEquals(data5, instance.getData(key5));
}
@Test
public void testDatahandling_2() throws Exception {
// test is data can be added, overwritten, and retrieved as expected
GlobalDataContainer instance = GlobalDataContainer.getInstance();
String key1 = "key1";
String data1 = "data1";
String data1changed = "data1changed";
String key2 = "key2";
String data2 = "data2";
String data2changed = "data2changed";
String key3 = "key3";
Integer data3 = 1;
Integer data3changed = 11;
String key4 = "key4";
Integer data4 = 2;
Integer data4changed = 22;
String key5 = "key5";
Integer data5 = 3;
Integer data5changed = 33;
assertFalse(instance.addData(key1, data1));
assertFalse(instance.addData(key2, data2));
assertFalse(instance.addData(key3, data3));
assertFalse(instance.addData(key4, data4));
assertFalse(instance.addData(key5, data5));
assertTrue(instance.addData(key1, data1changed));
assertTrue(instance.addData(key2, data2changed));
assertTrue(instance.addData(key3, data3changed));
assertTrue(instance.addData(key4, data4changed));
assertTrue(instance.addData(key5, data5changed));
assertEquals(data1changed, instance.getData(key1));
assertEquals(data2changed, instance.getData(key2));
assertEquals(data3changed, instance.getData(key3));
assertEquals(data4changed, instance.getData(key4));
assertEquals(data5changed, instance.getData(key5));
}
@Test
public void testDatahandling_3() throws Exception {
// test is data can be removed as expected
GlobalDataContainer instance = GlobalDataContainer.getInstance();
String key1 = "key1";
String data1 = "data1";
String key2 = "key2";
String data2 = "data2";
String key3 = "key3";
Integer data3 = 1;
String key4 = "key4";
Integer data4 = 2;
String key5 = "key5";
Integer data5 = 3;
assertFalse(instance.addData(key1, data1));
assertFalse(instance.addData(key2, data2));
assertFalse(instance.addData(key3, data3));
assertFalse(instance.addData(key4, data4));
assertFalse(instance.addData(key5, data5));
assertFalse(instance.removeData("keyNotFound"));
assertTrue(instance.removeData(key1));
assertNull(instance.getData(key1));
}
@Test
public void testDatahandling_4() throws Exception {
// test is data can be removed as expected
GlobalDataContainer instance = GlobalDataContainer.getInstance();
String key1 = "key1";
String data1 = "data1";
String key2 = "key2";
String data2 = "data2";
String key3 = "key3";
Integer data3 = 1;
String key4 = "key4";
Integer data4 = 2;
String key5 = "key5";
Integer data5 = 3;
assertFalse(instance.addData(key1, data1));
assertFalse(instance.addData(key2, data2));
assertFalse(instance.addData(key3, data3));
assertFalse(instance.addData(key4, data4));
assertFalse(instance.addData(key5, data5));
assertNull(instance.getData("keyNotFound"));
}
@Test
public void testReset_1() throws Exception {
// check if data container is empty after reset
GlobalDataContainer instance = GlobalDataContainer.getInstance();
String key1 = "key1";
String data1 = "data1";
String key2 = "key2";
String data2 = "data2";
String key3 = "key3";
Integer data3 = 1;
String key4 = "key4";
Integer data4 = 2;
String key5 = "key5";
Integer data5 = 3;
assertFalse(instance.addData(key1, data1));
assertFalse(instance.addData(key2, data2));
assertFalse(instance.addData(key3, data3));
assertFalse(instance.addData(key4, data4));
assertFalse(instance.addData(key5, data5));
instance.reset();
assertNull(instance.getData(key1));
assertNull(instance.getData(key2));
assertNull(instance.getData(key3));
assertNull(instance.getData(key4));
assertNull(instance.getData(key5));
}
@Test
public void testGetAllKeys_1() throws Exception {
// check if data container is empty after reset
GlobalDataContainer instance = GlobalDataContainer.getInstance();
String key1 = "key1";
String data1 = "data1";
String key2 = "key2";
String data2 = "data2";
String key3 = "key3";
Integer data3 = 1;
String key4 = "key4";
Integer data4 = 2;
String key5 = "key5";
Integer data5 = 3;
assertFalse(instance.addData(key1, data1));
assertFalse(instance.addData(key2, data2));
assertFalse(instance.addData(key3, data3));
assertFalse(instance.addData(key4, data4));
assertFalse(instance.addData(key5, data5));
Collection expected = new LinkedList();
expected.add(key1);
expected.add(key2);
expected.add(key3);
expected.add(key4);
expected.add(key5);
assertCollectionContent(expected, instance.getAllKeys());
}
@Test
public void testSerialization_1() throws Exception {
GlobalDataContainer instance = GlobalDataContainer.getInstance();
String key1 = "key1";
String data1 = "data1";
String key2 = "key2";
String data2 = "data2";
String key3 = "key3";
Integer data3 = 1;
String key4 = "key4";
Integer data4 = 2;
String key5 = "key5";
Integer data5 = 3;
String key6 = "key6";
Double data6 = 6.0d;
assertFalse(instance.addData(key1, data1));
assertFalse(instance.addData(key2, data2));
assertFalse(instance.addData(key3, data3));
assertFalse(instance.addData(key4, data4));
assertFalse(instance.addData(key5, data5));
// serialize
ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(out);
oos.writeObject(instance);
oos.close();
instance.reset();
assertFalse(instance.addData(key6, data6));
// deserialize
byte[] pickled = out.toByteArray();
InputStream in = new ByteArrayInputStream(pickled);
ObjectInputStream ois = new ObjectInputStream(in);
ois.readObject();
ois.close();
// test the result
assertEquals(data1, instance.getData(key1));
assertEquals(data2, instance.getData(key2));
assertEquals(data3, instance.getData(key3));
assertEquals(data4, instance.getData(key4));
assertEquals(data5, instance.getData(key5));
assertNull(instance.getData(key6));
}
@Before
public void setUp() {
GlobalDataContainer.getInstance().reset();
}
}