diff --git a/src/main/java/org/springframework/data/domain/KeysetScrollPosition.java b/src/main/java/org/springframework/data/domain/KeysetScrollPosition.java index 0729bc9e8..a05ae2216 100644 --- a/src/main/java/org/springframework/data/domain/KeysetScrollPosition.java +++ b/src/main/java/org/springframework/data/domain/KeysetScrollPosition.java @@ -34,9 +34,12 @@ import org.springframework.util.ObjectUtils; */ public final class KeysetScrollPosition implements ScrollPosition { - private static final KeysetScrollPosition INITIAL = new KeysetScrollPosition(Collections.emptyMap(), + private static final KeysetScrollPosition EMPTY_FORWARD = new KeysetScrollPosition(Collections.emptyMap(), Direction.FORWARD); + private static final KeysetScrollPosition EMPTY_BACKWARD = new KeysetScrollPosition(Collections.emptyMap(), + Direction.BACKWARD); + private final Map keys; private final Direction direction; @@ -55,7 +58,7 @@ public final class KeysetScrollPosition implements ScrollPosition { * @return will never be {@literal null}. */ static KeysetScrollPosition initial() { - return INITIAL; + return EMPTY_FORWARD; } /** @@ -70,8 +73,7 @@ public final class KeysetScrollPosition implements ScrollPosition { Assert.notNull(keys, "Keys must not be null"); Assert.notNull(direction, "Direction must not be null"); - return keys.isEmpty() - ? initial() + return keys.isEmpty() ? (direction == Direction.FORWARD ? EMPTY_FORWARD : EMPTY_BACKWARD) : new KeysetScrollPosition(Collections.unmodifiableMap(new LinkedHashMap<>(keys)), direction); } diff --git a/src/test/java/org/springframework/data/domain/ScrollPositionUnitTests.java b/src/test/java/org/springframework/data/domain/ScrollPositionUnitTests.java index f4ad67b32..e9ce51983 100644 --- a/src/test/java/org/springframework/data/domain/ScrollPositionUnitTests.java +++ b/src/test/java/org/springframework/data/domain/ScrollPositionUnitTests.java @@ -129,12 +129,24 @@ class ScrollPositionUnitTests { assertThat(position.getOffset()).isEqualTo(0); } - @Test // GH-2824 + @Test // GH-2824, GH-2840 void initialKeysetPosition() { KeysetScrollPosition keyset = ScrollPosition.keyset(); assertThat(keyset.isInitial()).isTrue(); assertThat(keyset.scrollsForward()).isTrue(); + + keyset = ScrollPosition.of(Collections.emptyMap(), Direction.FORWARD); + + assertThat(keyset.isInitial()).isTrue(); + assertThat(keyset.scrollsForward()).isTrue(); + assertThat(keyset.scrollsBackward()).isFalse(); + + keyset = ScrollPosition.of(Collections.emptyMap(), Direction.BACKWARD); + + assertThat(keyset.isInitial()).isTrue(); + assertThat(keyset.scrollsForward()).isFalse(); + assertThat(keyset.scrollsBackward()).isTrue(); } }