Skip to content

Commit 3df0c3b

Browse files
committed
Retain direction for empty KeysetScrollPosition.
We now retain the direction when an empty KeysetScrollPosition is created. Closes #2840
1 parent 80b8e12 commit 3df0c3b

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

src/main/java/org/springframework/data/domain/KeysetScrollPosition.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,12 @@
3434
*/
3535
public final class KeysetScrollPosition implements ScrollPosition {
3636

37-
private static final KeysetScrollPosition INITIAL = new KeysetScrollPosition(Collections.emptyMap(),
37+
private static final KeysetScrollPosition EMPTY_FORWARD = new KeysetScrollPosition(Collections.emptyMap(),
3838
Direction.FORWARD);
3939

40+
private static final KeysetScrollPosition EMPTY_BACKWARD = new KeysetScrollPosition(Collections.emptyMap(),
41+
Direction.BACKWARD);
42+
4043
private final Map<String, Object> keys;
4144
private final Direction direction;
4245

@@ -55,7 +58,7 @@ private KeysetScrollPosition(Map<String, Object> keys, Direction direction) {
5558
* @return will never be {@literal null}.
5659
*/
5760
static KeysetScrollPosition initial() {
58-
return INITIAL;
61+
return EMPTY_FORWARD;
5962
}
6063

6164
/**
@@ -70,8 +73,7 @@ static KeysetScrollPosition of(Map<String, ?> keys, Direction direction) {
7073
Assert.notNull(keys, "Keys must not be null");
7174
Assert.notNull(direction, "Direction must not be null");
7275

73-
return keys.isEmpty()
74-
? initial()
76+
return keys.isEmpty() ? (direction == Direction.FORWARD ? EMPTY_FORWARD : EMPTY_BACKWARD)
7577
: new KeysetScrollPosition(Collections.unmodifiableMap(new LinkedHashMap<>(keys)), direction);
7678
}
7779

src/test/java/org/springframework/data/domain/ScrollPositionUnitTests.java

+13-1
Original file line numberDiff line numberDiff line change
@@ -129,12 +129,24 @@ void initialOffsetPosition() {
129129
assertThat(position.getOffset()).isEqualTo(0);
130130
}
131131

132-
@Test // GH-2824
132+
@Test // GH-2824, GH-2840
133133
void initialKeysetPosition() {
134134

135135
KeysetScrollPosition keyset = ScrollPosition.keyset();
136136

137137
assertThat(keyset.isInitial()).isTrue();
138138
assertThat(keyset.scrollsForward()).isTrue();
139+
140+
keyset = ScrollPosition.of(Collections.emptyMap(), Direction.FORWARD);
141+
142+
assertThat(keyset.isInitial()).isTrue();
143+
assertThat(keyset.scrollsForward()).isTrue();
144+
assertThat(keyset.scrollsBackward()).isFalse();
145+
146+
keyset = ScrollPosition.of(Collections.emptyMap(), Direction.BACKWARD);
147+
148+
assertThat(keyset.isInitial()).isTrue();
149+
assertThat(keyset.scrollsForward()).isFalse();
150+
assertThat(keyset.scrollsBackward()).isTrue();
139151
}
140152
}

0 commit comments

Comments
 (0)