package de.javakaffee.kryoserializers.guava;
import static de.javakaffee.kryoserializers.KryoTest.deserialize;
import static de.javakaffee.kryoserializers.KryoTest.serialize;
import static org.testng.Assert.*;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import com.esotericsoftware.kryo.Kryo;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableTable;
import com.google.common.collect.Lists;
import com.google.common.collect.Table;
/**
* Test for {@link ImmutableListSerializer}.
*/
public class ImmutableListSerializerTest {
private Kryo _kryo;
@BeforeTest
public void setUp() throws Exception {
_kryo = new Kryo();
ImmutableListSerializer.registerSerializers(_kryo);
}
@Test( enabled = true )
public void testEmpty() {
final ImmutableList<?> obj = ImmutableList.of();
final byte[] serialized = serialize( _kryo, obj );
final ImmutableList<?> deserialized = deserialize(_kryo, serialized, ImmutableList.class);
assertTrue(deserialized.isEmpty());
assertEquals(deserialized.size(), obj.size());
}
@Test( enabled = true )
public void testSingleton() {
final ImmutableList<?> obj = ImmutableList.of(3);
final byte[] serialized = serialize( _kryo, obj );
final ImmutableList<?> deserialized = deserialize(_kryo, serialized, ImmutableList.class);
assertEquals(deserialized, obj);
}
@Test( enabled = true )
public void testRegular() {
final ImmutableList<?> obj = ImmutableList.of(3, 4, 5, 6);
final byte[] serialized = serialize( _kryo, obj );
final ImmutableList<?> deserialized = deserialize(_kryo, serialized, ImmutableList.class);
assertEquals(deserialized, obj);
}
@Test( enabled = true )
public void testSubList() {
final ImmutableList<?> obj = ImmutableList.of(3, 4, 5, 6).subList(1, 3);
final byte[] serialized = serialize( _kryo, obj );
final ImmutableList<?> deserialized = deserialize(_kryo, serialized, ImmutableList.class);
assertEquals(deserialized, obj);
}
@Test( enabled = true )
public void testReverse() {
final ImmutableList<?> obj = ImmutableList.of(3,4,5).reverse();
final byte[] serialized = serialize( _kryo, obj );
final ImmutableList<?> deserialized = deserialize(_kryo, serialized, ImmutableList.class);
assertEquals(deserialized, obj);
}
@Test( enabled = true )
public void testStringAsImmutableList() {
final ImmutableList<?> obj = Lists.charactersOf("KryoRocks");
final byte[] serialized = serialize( _kryo, obj );
final ImmutableList<?> deserialized = deserialize(_kryo, serialized, ImmutableList.class);
assertEquals(deserialized, obj);
}
@Test( enabled = true )
public void testValues() {
Table<Integer,Integer,Integer> baseTable = HashBasedTable.create();
baseTable.put(1, 2, 3);
baseTable.put(4, 5, 6);
Table<Integer, Integer, Integer> table = ImmutableTable.copyOf(baseTable);
final ImmutableList<?> obj = (ImmutableList<?>) table.values();
final byte[] serialized = serialize( _kryo, obj );
final ImmutableList<?> deserialized = deserialize(_kryo, serialized, ImmutableList.class);
assertEquals(deserialized, obj);
}
// Kryo#copy tests
@Test( enabled = true )
public void testCopyEmpty() {
final ImmutableList<?> obj = ImmutableList.of();
final ImmutableList<?> copied = _kryo.copy(obj);
assertSame(copied, obj);
}
@Test( enabled = true )
public void testCopySingleton() {
final ImmutableList<?> obj = ImmutableList.of(1);
final ImmutableList<?> copied = _kryo.copy(obj);
assertSame(copied, obj);
}
@Test( enabled = true )
public void testCopyRegular() {
final ImmutableList<?> obj = ImmutableList.of(1, 2, 3);
final ImmutableList<?> copied = _kryo.copy(obj);
assertSame(copied, obj);
}
@Test( enabled = true )
public void testCopySubList() {
final ImmutableList<?> obj = ImmutableList.of(1, 2, 3, 4).subList(1, 3);
final ImmutableList<?> copied = _kryo.copy(obj);
assertSame(copied, obj);
}
@Test( enabled = true )
public void testCopyReverse() {
final ImmutableList<?> obj = ImmutableList.of(1,2,3).reverse();
final ImmutableList<?> copied = _kryo.copy(obj);
assertSame(copied, obj);
}
@Test( enabled = true )
public void testCopyStringAsImmutableList() {
final ImmutableList<?> obj = Lists.charactersOf("KryoRocks");
final ImmutableList<?> copied = _kryo.copy(obj);
assertSame(copied, obj);
}
@Test( enabled = true )
public void testCopyValues() {
Table<Integer,Integer,Integer> baseTable = HashBasedTable.create();
baseTable.put(1, 2, 3);
baseTable.put(4, 5, 6);
Table<Integer, Integer, Integer> table = ImmutableTable.copyOf(baseTable);
final ImmutableList<?> obj = (ImmutableList<?>) table.values();
final ImmutableList<?> copied = _kryo.copy(obj);
assertSame(copied, obj);
}
}