Browse Source
Moved general-purpose factory methods to the common ScrollPosition interface. Introduced a couple of domain specific methods to conveniently work with both Keyset- (to e.g. change direction) and OffsetScrollPosition (to e.g. advance the offset). Consolidated unit tests accordingly. Moved WindowIterator to ….data.support package. Fixed case of Direction enum values. Fixes #2824.pull/2825/head
14 changed files with 385 additions and 212 deletions
@ -1,43 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright 2023 the original author or authors. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
*/ |
|
||||||
package org.springframework.data.domain; |
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.*; |
|
||||||
|
|
||||||
import java.util.Collections; |
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test; |
|
||||||
import org.springframework.data.domain.KeysetScrollPosition.Direction; |
|
||||||
|
|
||||||
/** |
|
||||||
* Unit tests for {@link KeysetScrollPosition}. |
|
||||||
* |
|
||||||
* @author Mark Paluch |
|
||||||
*/ |
|
||||||
class KeysetScrollPositionUnitTests { |
|
||||||
|
|
||||||
@Test // GH-2151
|
|
||||||
void equalsAndHashCode() { |
|
||||||
|
|
||||||
KeysetScrollPosition foo1 = KeysetScrollPosition.of(Collections.singletonMap("k", "v")); |
|
||||||
KeysetScrollPosition foo2 = KeysetScrollPosition.of(Collections.singletonMap("k", "v")); |
|
||||||
KeysetScrollPosition bar = KeysetScrollPosition.of(Collections.singletonMap("k", "v"), Direction.Backward); |
|
||||||
|
|
||||||
assertThat(foo1).isEqualTo(foo2).hasSameClassAs(foo2); |
|
||||||
assertThat(foo1).isNotEqualTo(bar).doesNotHaveSameHashCodeAs(bar); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
@ -1,50 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright 2023 the original author or authors. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
*/ |
|
||||||
package org.springframework.data.domain; |
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.*; |
|
||||||
import static org.springframework.data.domain.OffsetScrollPosition.*; |
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test; |
|
||||||
|
|
||||||
/** |
|
||||||
* Unit tests for {@link OffsetScrollPosition}. |
|
||||||
* |
|
||||||
* @author Mark Paluch |
|
||||||
*/ |
|
||||||
class OffsetScrollPositionUnitTests { |
|
||||||
|
|
||||||
@Test // GH-2151
|
|
||||||
void equalsAndHashCode() { |
|
||||||
|
|
||||||
OffsetScrollPosition foo1 = OffsetScrollPosition.of(1); |
|
||||||
OffsetScrollPosition foo2 = OffsetScrollPosition.of(1); |
|
||||||
OffsetScrollPosition bar = OffsetScrollPosition.of(2); |
|
||||||
|
|
||||||
assertThat(foo1).isEqualTo(foo2).hasSameClassAs(foo2); |
|
||||||
assertThat(foo1).isNotEqualTo(bar).doesNotHaveSameHashCodeAs(bar); |
|
||||||
} |
|
||||||
|
|
||||||
@Test // GH-2151
|
|
||||||
void shouldCreateCorrectIndexPosition() { |
|
||||||
|
|
||||||
assertThat(positionFunction(0).apply(0)).isEqualTo(OffsetScrollPosition.of(1)); |
|
||||||
assertThat(positionFunction(0).apply(1)).isEqualTo(OffsetScrollPosition.of(2)); |
|
||||||
|
|
||||||
assertThat(positionFunction(100).apply(0)).isEqualTo(OffsetScrollPosition.of(101)); |
|
||||||
assertThat(positionFunction(100).apply(1)).isEqualTo(OffsetScrollPosition.of(102)); |
|
||||||
} |
|
||||||
} |
|
||||||
@ -0,0 +1,140 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2023 the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
package org.springframework.data.domain; |
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.*; |
||||||
|
import static org.springframework.data.domain.OffsetScrollPosition.*; |
||||||
|
|
||||||
|
import java.util.Collections; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test; |
||||||
|
import org.springframework.data.domain.ScrollPosition.Direction; |
||||||
|
|
||||||
|
/** |
||||||
|
* Unit tests for {@link KeysetScrollPosition}. |
||||||
|
* |
||||||
|
* @author Mark Paluch |
||||||
|
* @author Oliver Drotbohm |
||||||
|
*/ |
||||||
|
class ScrollPositionUnitTests { |
||||||
|
|
||||||
|
private static final Map<String, ?> KEYS = Collections.singletonMap("k", "v"); |
||||||
|
|
||||||
|
@Test // GH-2151
|
||||||
|
void equalsAndHashCodeForKeysets() { |
||||||
|
|
||||||
|
ScrollPosition foo1 = ScrollPosition.forward(KEYS); |
||||||
|
ScrollPosition foo2 = ScrollPosition.forward(KEYS); |
||||||
|
ScrollPosition bar = ScrollPosition.backward(KEYS); |
||||||
|
|
||||||
|
assertThat(foo1).isEqualTo(foo2).hasSameClassAs(foo2); |
||||||
|
assertThat(foo1).isNotEqualTo(bar).doesNotHaveSameHashCodeAs(bar); |
||||||
|
} |
||||||
|
|
||||||
|
@Test // GH-2151
|
||||||
|
void equalsAndHashCodeForOffsets() { |
||||||
|
|
||||||
|
ScrollPosition foo1 = ScrollPosition.offset(1); |
||||||
|
ScrollPosition foo2 = ScrollPosition.offset(1); |
||||||
|
ScrollPosition bar = ScrollPosition.offset(2); |
||||||
|
|
||||||
|
assertThat(foo1).isEqualTo(foo2).hasSameClassAs(foo2); |
||||||
|
assertThat(foo1).isNotEqualTo(bar).doesNotHaveSameHashCodeAs(bar); |
||||||
|
} |
||||||
|
|
||||||
|
@Test // GH-2151
|
||||||
|
void shouldCreateCorrectIndexPosition() { |
||||||
|
|
||||||
|
assertThat(positionFunction(0).apply(0)).isEqualTo(ScrollPosition.offset(1)); |
||||||
|
assertThat(positionFunction(0).apply(1)).isEqualTo(ScrollPosition.offset(2)); |
||||||
|
|
||||||
|
assertThat(positionFunction(100).apply(0)).isEqualTo(ScrollPosition.offset(101)); |
||||||
|
assertThat(positionFunction(100).apply(1)).isEqualTo(ScrollPosition.offset(102)); |
||||||
|
} |
||||||
|
|
||||||
|
@Test // GH-2151
|
||||||
|
void rejectsNegativeOffset() { |
||||||
|
assertThatIllegalArgumentException().isThrownBy(() -> ScrollPosition.offset(-1)); |
||||||
|
} |
||||||
|
|
||||||
|
@Test // GH-2151
|
||||||
|
void advanceOffsetBelowZeroCapsAtZero() { |
||||||
|
|
||||||
|
OffsetScrollPosition offset = ScrollPosition.offset(5); |
||||||
|
|
||||||
|
assertThat(offset.getOffset()).isEqualTo(5); |
||||||
|
assertThat(offset.advanceBy(-10)).isEqualTo(ScrollPosition.offset(0)); |
||||||
|
} |
||||||
|
|
||||||
|
@Test // GH-2824
|
||||||
|
void setsUpForwardScrolling() { |
||||||
|
|
||||||
|
KeysetScrollPosition position = ScrollPosition.forward(KEYS); |
||||||
|
|
||||||
|
assertThat(position.getKeys()).isEqualTo(KEYS); |
||||||
|
assertThat(position.getDirection()).isEqualTo(Direction.FORWARD); |
||||||
|
assertThat(position.scrollsForward()).isTrue(); |
||||||
|
assertThat(position.scrollsBackward()).isFalse(); |
||||||
|
|
||||||
|
KeysetScrollPosition backward = position.backward(); |
||||||
|
|
||||||
|
assertThat(backward.getKeys()).isEqualTo(KEYS); |
||||||
|
assertThat(backward.getDirection()).isEqualTo(Direction.BACKWARD); |
||||||
|
assertThat(backward.scrollsForward()).isFalse(); |
||||||
|
assertThat(backward.scrollsBackward()).isTrue(); |
||||||
|
|
||||||
|
assertThat(position.reverse()).isEqualTo(backward); |
||||||
|
} |
||||||
|
|
||||||
|
@Test // GH-2824
|
||||||
|
void setsUpBackwardScrolling() { |
||||||
|
|
||||||
|
KeysetScrollPosition position = ScrollPosition.backward(KEYS); |
||||||
|
|
||||||
|
assertThat(position.getKeys()).isEqualTo(KEYS); |
||||||
|
assertThat(position.getDirection()).isEqualTo(Direction.BACKWARD); |
||||||
|
assertThat(position.scrollsForward()).isFalse(); |
||||||
|
assertThat(position.scrollsBackward()).isTrue(); |
||||||
|
|
||||||
|
KeysetScrollPosition forward = position.forward(); |
||||||
|
|
||||||
|
assertThat(forward.getKeys()).isEqualTo(KEYS); |
||||||
|
assertThat(forward.getDirection()).isEqualTo(Direction.FORWARD); |
||||||
|
assertThat(forward.scrollsForward()).isTrue(); |
||||||
|
assertThat(forward.scrollsBackward()).isFalse(); |
||||||
|
|
||||||
|
assertThat(position.reverse()).isEqualTo(forward); |
||||||
|
} |
||||||
|
|
||||||
|
@Test // GH-2824
|
||||||
|
void initialOffsetPosition() { |
||||||
|
|
||||||
|
OffsetScrollPosition position = ScrollPosition.offset(); |
||||||
|
|
||||||
|
assertThat(position.isInitial()).isTrue(); |
||||||
|
assertThat(position.getOffset()).isEqualTo(0); |
||||||
|
} |
||||||
|
|
||||||
|
@Test // GH-2824
|
||||||
|
void initialKeysetPosition() { |
||||||
|
|
||||||
|
KeysetScrollPosition keyset = ScrollPosition.keyset(); |
||||||
|
|
||||||
|
assertThat(keyset.isInitial()).isTrue(); |
||||||
|
assertThat(keyset.scrollsForward()).isTrue(); |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue