diff --git a/firebase-firestore/src/androidTest/java/com/google/firebase/firestore/QueryTest.java b/firebase-firestore/src/androidTest/java/com/google/firebase/firestore/QueryTest.java index 1f4ed810eaa..56834eaa60d 100644 --- a/firebase-firestore/src/androidTest/java/com/google/firebase/firestore/QueryTest.java +++ b/firebase-firestore/src/androidTest/java/com/google/firebase/firestore/QueryTest.java @@ -156,6 +156,50 @@ public void testListenUnlistenRelistenSequenceOfMirrorQueries() { assertEquals(asList(map("k", "e", "sort", -1L), map("k", "a", "sort", -2L)), data); } + @Test + public void testLimitToLastQueriesWithCursors() { + CollectionReference collection = + testCollectionWithDocs( + map( + "a", map("k", "a", "sort", 0), + "b", map("k", "b", "sort", 1), + "c", map("k", "c", "sort", 1), + "d", map("k", "d", "sort", 2))); + + Query query = collection.limitToLast(3).orderBy("sort").endBefore(2); + QuerySnapshot set = waitFor(query.get()); + List> data = querySnapshotToValues(set); + assertEquals( + asList(map("k", "a", "sort", 0L), map("k", "b", "sort", 1L), map("k", "c", "sort", 1L)), + data); + + query = collection.limitToLast(3).orderBy("sort").endAt(1); + set = waitFor(query.get()); + data = querySnapshotToValues(set); + assertEquals( + asList(map("k", "a", "sort", 0L), map("k", "b", "sort", 1L), map("k", "c", "sort", 1L)), + data); + + query = collection.limitToLast(3).orderBy("sort").startAt(2); + set = waitFor(query.get()); + data = querySnapshotToValues(set); + assertEquals(asList(map("k", "d", "sort", 2L)), data); + + query = collection.limitToLast(3).orderBy("sort").startAfter(0); + set = waitFor(query.get()); + data = querySnapshotToValues(set); + assertEquals( + asList(map("k", "b", "sort", 1L), map("k", "c", "sort", 1L), map("k", "d", "sort", 2L)), + data); + + query = collection.limitToLast(3).orderBy("sort").startAfter(-1); + set = waitFor(query.get()); + data = querySnapshotToValues(set); + assertEquals( + asList(map("k", "b", "sort", 1L), map("k", "c", "sort", 1L), map("k", "d", "sort", 2L)), + data); + } + @Test public void testKeyOrderIsDescendingForDescendingInequality() { CollectionReference collection = diff --git a/firebase-firestore/src/main/java/com/google/firebase/firestore/core/Query.java b/firebase-firestore/src/main/java/com/google/firebase/firestore/core/Query.java index 896e8292cdb..e788e755f12 100644 --- a/firebase-firestore/src/main/java/com/google/firebase/firestore/core/Query.java +++ b/firebase-firestore/src/main/java/com/google/firebase/firestore/core/Query.java @@ -497,11 +497,11 @@ public Target toTarget() { // We need to swap the cursors to match the now-flipped query ordering. Bound newStartAt = this.endAt != null - ? new Bound(this.endAt.getPosition(), !this.endAt.isInclusive()) + ? new Bound(this.endAt.getPosition(), this.endAt.isInclusive()) : null; Bound newEndAt = this.startAt != null - ? new Bound(this.startAt.getPosition(), !this.startAt.isInclusive()) + ? new Bound(this.startAt.getPosition(), this.startAt.isInclusive()) : null; this.memoizedTarget =