package com.aol.micro.server.async.data.writer;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;
import cyclops.collections.ListX;
import org.junit.Before;
import org.junit.Test;
public class MultiDataWriterTest {
MultiDataWriter<String> writer;
MultiDataWriter<String> empty;
private DummyDataWriter dataWriter1;
private DummyDataWriter dataWriter2;
@Before
public void setup() {
dataWriter1 = new DummyDataWriter();
dataWriter2 = new DummyDataWriter();
writer = new MultiDataWriter<>(
ListX.of(dataWriter1, dataWriter2));
empty = new MultiDataWriter<>(
ListX.empty());
}
@Test
public void bothDataWritersUpdated() {
writer.saveAndIncrement("hello world");
assertThat(dataWriter1.loadAndGet()
.get(),
equalTo("hello world"));
assertThat(dataWriter2.loadAndGet()
.get(),
equalTo("hello world"));
}
@Test
public void emptySaveAndIncrement() {
assertThat(empty.saveAndIncrement("hello world")
.get(),
equalTo(null));
}
@Test
public void loadAndGetReturnsDataFromFirst() {
dataWriter1.setData("one");
dataWriter2.setData("two");
String data = writer.loadAndGet()
.get();
assertThat(data, equalTo("one"));
}
@Test
public void loadAndGetReturnsNullForEmpty() {
String data = empty.loadAndGet()
.get();
assertThat(data, equalTo(null));
}
@Test
public void isOutOfDateReturnsFalseIfSecondOnlyIsFalse() {
dataWriter1.setOutofdate(true);
dataWriter2.setOutofdate(false);
boolean outofdate = writer.isOutOfDate()
.get();
assertThat(outofdate, equalTo(true));
}
@Test
public void isOutOfDateReturnsFalseIfFirstOnlyIsFalse() {
dataWriter1.setOutofdate(false);
dataWriter2.setOutofdate(true);
boolean outofdate = writer.isOutOfDate()
.get();
assertThat(outofdate, equalTo(true));
}
@Test
public void isOutOfDateReturnsFalseIfBothAreFalse() {
dataWriter1.setOutofdate(false);
dataWriter2.setOutofdate(false);
boolean outofdate = writer.isOutOfDate()
.get();
assertThat(outofdate, equalTo(false));
}
@Test
public void isOutOfDateReturnsTrueIfBothAreTrue() {
dataWriter1.setOutofdate(true);
dataWriter2.setOutofdate(true);
boolean outofdate = writer.isOutOfDate()
.get();
assertThat(outofdate, equalTo(true));
}
@Test
public void isOutofDateWorksEmpty() {
boolean outofdate = empty.isOutOfDate()
.get();
assertThat(outofdate, equalTo(false));
}
}