Skip to content

Commit c2023c9

Browse files
committed
Add new ParseQuery<>(query) for copying
1 parent 65546a9 commit c2023c9

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

Parse/src/main/java/com/parse/ParseQuery.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -910,6 +910,17 @@ public ParseQuery(String theClassName) {
910910
this(new State.Builder<T>(theClassName));
911911
}
912912

913+
/**
914+
* Constructs a copy of {@code query};
915+
*
916+
* @param query
917+
* The query to copy.
918+
*/
919+
public ParseQuery(ParseQuery<T> query) {
920+
this(new State.Builder<>(query.getBuilder()));
921+
user = query.user;
922+
}
923+
913924
/* package */ ParseQuery(State.Builder<T> builder) {
914925
this.builder = builder;
915926
}
@@ -918,6 +929,12 @@ public ParseQuery(String theClassName) {
918929
return builder;
919930
}
920931

932+
/**
933+
* Sets the user to be used for this query.
934+
*
935+
*
936+
* The query will use the user if set, otherwise it will read the current user.
937+
*/
921938
/* package for tests */ ParseQuery<T> setUser(ParseUser user) {
922939
this.user = user;
923940
return this;

Parse/src/test/java/com/parse/ParseQueryTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
import static org.hamcrest.CoreMatchers.instanceOf;
2929
import static org.junit.Assert.assertEquals;
30+
import static org.junit.Assert.assertNotSame;
3031
import static org.junit.Assert.assertNull;
3132
import static org.junit.Assert.assertSame;
3233
import static org.junit.Assert.assertThat;
@@ -66,6 +67,25 @@ public void testConstructors() {
6667
assertSame(builder, query.getBuilder());
6768
}
6869

70+
@Test
71+
public void testCopy() throws InterruptedException {
72+
ParseQuery<ParseObject> query = new ParseQuery<>("TestObject");
73+
query.setUser(new ParseUser());
74+
query.whereEqualTo("foo", "bar");
75+
ParseQuery.State.Builder<ParseObject> builder = query.getBuilder();
76+
ParseQuery.State<ParseObject> state = query.getBuilder().build();
77+
78+
ParseQuery<ParseObject> queryCopy = new ParseQuery<>(query);
79+
ParseQuery.State.Builder<ParseObject> builderCopy = queryCopy.getBuilder();
80+
ParseQuery.State<ParseObject> stateCopy = queryCopy.getBuilder().build();
81+
82+
assertNotSame(query, queryCopy);
83+
assertSame(query.getUserAsync(state).getResult(), queryCopy.getUserAsync(stateCopy).getResult());
84+
85+
assertNotSame(builder, builderCopy);
86+
assertSame(state.constraints().get("foo"), stateCopy.constraints().get("foo"));
87+
}
88+
6989
// ParseUser#setUser is for tests only
7090
@Test
7191
public void testSetUser() throws ParseException {

0 commit comments

Comments
 (0)