package com.github.davidmoten.rx; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.File; import java.util.Arrays; import java.util.List; import org.junit.Test; import rx.Observable; public class SerializedTest { @Test public void testSerializeAndDeserializeOfNonEmptyStream() { File file = new File("target/temp1"); file.delete(); Observable<Integer> source = Observable.just(1, 2, 3); Serialized.write(source, file).subscribe(); assertTrue(file.exists()); assertTrue(file.length() > 0); List<Integer> list = Serialized.<Integer> read(file).toList().toBlocking().single(); assertEquals(Arrays.asList(1, 2, 3), list); } @Test public void testSerializeAndDeserializeOfNonEmptyStreamWithSmallBuffer() { File file = new File("target/temp2"); file.delete(); Observable<Integer> source = Observable.just(1, 2, 3); Serialized.write(source, file, false, 1).subscribe(); assertTrue(file.exists()); assertTrue(file.length() > 0); List<Integer> list = Serialized.<Integer> read(file, 1).toList().toBlocking().single(); assertEquals(Arrays.asList(1, 2, 3), list); } @Test public void testSerializeAndDeserializeOfEmptyStream() { File file = new File("target/temp3"); file.delete(); Observable<Integer> source = Observable.empty(); Serialized.write(source, file).subscribe(); assertTrue(file.exists()); List<Integer> list = Serialized.<Integer> read(file).toList().toBlocking().single(); assertTrue(list.isEmpty()); } @Test public void testSerializeAndDeserializeOfNonEmptyStreamUsingKryo() { File file = new File("target/temp4"); file.delete(); Observable<Integer> source = Observable.just(1, 2, 3); Serialized.kryo().write(source, file).subscribe(); assertTrue(file.exists()); assertTrue(file.length() > 0); List<Integer> list = Serialized.kryo().read(Integer.class, file).toList().toBlocking() .single(); assertEquals(Arrays.asList(1, 2, 3), list); } @Test public void testSerializeAndDeserializeOfEmptyStreamUsingKryo() { File file = new File("target/temp5"); file.delete(); Observable<Integer> source = Observable.empty(); Serialized.kryo().write(source, file).subscribe(); assertTrue(file.exists()); List<Integer> list = Serialized.kryo().read(Integer.class, file).toList().toBlocking() .single(); assertTrue(list.isEmpty()); } @Test public void testSerializeAndDeserializeOfPersonStreamUsingKryo() { File file = new File("target/temp6"); file.delete(); Observable<Person> source = Observable.just(new Person("fred", 24), new Person("jane", 32)); Serialized.kryo().write(source, file).subscribe(); assertTrue(file.exists()); List<Person> list = Serialized.kryo().read(Person.class, file).toList().toBlocking() .single(); assertEquals(2, list.size()); assertEquals("fred", list.get(0).name); assertEquals(24, list.get(0).age); assertEquals("jane", list.get(1).name); assertEquals(32, list.get(1).age); } static class Person { // Note Person class doesn't need to implement Serializable to be // serialized by kryo final String name; final int age; Person() { // requires no-arg constructor to be serialized by kryo this("", 0); } Person(String name, int age) { this.name = name; this.age = age; } } }