CommandObjectTest.java
package redis.clients.jedis;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import org.junit.jupiter.api.Test;
public class CommandObjectTest {
private CommandObject<String> command() {
return new CommandObject<>(new CommandArguments(Protocol.Command.GET).key("k"),
BuilderFactory.STRING);
}
@Test
public void hooksAreEmptyByDefault() {
assertTrue(command().getPreProcessHooks().isEmpty());
}
@Test
public void withPreProcessHookAppendsInOrderWithoutTouchingSource() {
CommandObject<String> source = command();
List<String> ran = new ArrayList<>();
Consumer<Connection> first = conn -> ran.add("first");
Consumer<Connection> second = conn -> ran.add("second");
CommandObject<String> modified = source.withPreProcessHook(first).withPreProcessHook(second);
assertTrue(source.getPreProcessHooks().isEmpty());
assertEquals(2, modified.getPreProcessHooks().size());
modified.getPreProcessHooks().forEach(hook -> hook.accept(null));
assertEquals("first", ran.get(0));
assertEquals("second", ran.get(1));
}
@Test
public void withPreProcessHookOnCopyKeepsExistingHooks() {
List<String> ran = new ArrayList<>();
CommandObject<String> once = command().withPreProcessHook(conn -> ran.add("first"));
CommandObject<String> twice = once.withPreProcessHook(conn -> ran.add("second"));
assertEquals(1, once.getPreProcessHooks().size());
assertEquals(2, twice.getPreProcessHooks().size());
twice.getPreProcessHooks().forEach(hook -> hook.accept(null));
assertEquals("first", ran.get(0));
assertEquals("second", ran.get(1));
}
@Test
public void modifiedCopyIsSameCommand() {
CommandObject<String> source = command();
CommandObject<String> modified = source.withPreProcessHook(conn -> {
});
assertEquals(source, modified);
assertEquals(source.hashCode(), modified.hashCode());
}
@Test
public void hookListIsUnmodifiable() {
CommandObject<String> modified = command().withPreProcessHook(conn -> {
});
assertThrows(UnsupportedOperationException.class,
() -> modified.getPreProcessHooks().add(conn -> {
}));
}
}