package manualTests;
import net.tomp2p.storage.Data;
import org.testng.annotations.Test;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Random;
import java.util.TreeSet;
/**
* Created by Leif on 2014-04-15.
*/
public class SerializerTest {
/**
* Relations seem to be preserved after serialization!
* @throws IOException
* @throws ClassNotFoundException
*/
@Test
public void serial() throws IOException, ClassNotFoundException {
Ser ser = new Ser();
ser.list1 = new ArrayList<>();
ser.list2 = ser.list1;
assert ser.list2.size() == 0;
ser.list1.add("Hi");
assert ser.list2.size() == 1;
Object obj = new Data(ser).getObject();
Ser deserialized = (Ser) obj;
assert deserialized.list1.size() == 1;
assert deserialized.list2.size() == 1;
deserialized.list1.add("Some string");
assert deserialized.list2.size() == 2;
}
private static class Ser implements Serializable {
private ArrayList<String> list1;
private ArrayList<String> list2;
}
@Test
public void serial2_1() throws IOException, ClassNotFoundException {
boolean exceptionThrown = false;
Ser2 ser = new Ser2();
ser.set = new TreeSet<>(Ser2.comparator);
Object obj = null;
try {
obj = new Data(ser).getObject();
} catch (Exception e) {
exceptionThrown = true;
}
assert exceptionThrown;
}
@Test
public void serial2_2() throws IOException, ClassNotFoundException {
Ser2 ser = new Ser2();
ser.set = new TreeSet<>(new Ser2.Comp());
Object obj = new Data(ser).getObject();
Ser2 deserialized = (Ser2) obj;
deserialized.set.add("Hejsan");
deserialized.set.add("Hej2");
}
private static class Ser2 implements Serializable{
private final static Comparator<String> comparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return 0;
}
};
private static class Comp implements Comparator<String>, Serializable{
@Override
public int compare(String o1, String o2) {
System.out.println("HEJSAN!");
return 0;
}
}
private TreeSet<String> set;
private String string = "1";
}
@Test
public void transientTest() throws IOException, ClassNotFoundException {
TransientTester transientTester = new TransientTester("Hello");
Object obj = new Data(transientTester).getObject();
TransientTester deserialized = (TransientTester) obj;
assert deserialized.random == null;
}
private static class TransientTester implements Serializable{
private final String string;
private transient Random random = new Random();
private TransientTester(String string) {
this.string = string;
random = new Random();
}
}
}