Allow querying collections without query objects.
Add methods to ListQuery and Set Query to allow for querying without needing to
convert an object into its respective query type.
Bug: 198294382
Test: atest com.android.queryable.queries.ListQueryHelperTest
Test: atest com.android.queryable.queries.SetQueryHelperTest
Change-Id: I58a5792b70c66a7f0164e8975fd3b107f58f0abf
diff --git a/common/device-side/bedstead/queryable/src/main/java/com/android/queryable/queries/ListQuery.java b/common/device-side/bedstead/queryable/src/main/java/com/android/queryable/queries/ListQuery.java
index b4b945a..15d6272 100644
--- a/common/device-side/bedstead/queryable/src/main/java/com/android/queryable/queries/ListQuery.java
+++ b/common/device-side/bedstead/queryable/src/main/java/com/android/queryable/queries/ListQuery.java
@@ -18,8 +18,8 @@
import com.android.queryable.Queryable;
+import java.util.Collection;
import java.util.List;
-import java.util.Set;
/** Query for a {@link java.util.List}. */
public interface ListQuery<E extends Queryable, F, G extends Query<F>> extends Query<List<F>> {
@@ -30,6 +30,49 @@
IntegerQuery<E> size();
+ /**
+ * Used to query whether a list contains certain objects.
+ */
E contains(G... objects);
+
+ /**
+ * Used to query whether a list contains certain objects.
+ *
+ * <p>There are no bounds on the type for this method and therefore to find matches objects are
+ * compared using {@link Object#equals} If you are not checking for equality use
+ * {@link #contains(Query[])}.
+ */
+ E contains(F... objects);
+
+ /**
+ * Used to query whether a list does not contain certain objects.
+ */
E doesNotContain(G... objects);
+
+ /**
+ * Used to query whether a list does not contain certain objects.
+ *
+ * <p>There are no bounds on the type for this method and therefore to find matches objects are
+ * compared using {@link Object#equals}. If you are not checking for equality use
+ * {@link #contains(Query[])}.
+ */
+ E doesNotContain(F... objects);
+
+ /**
+ * Used to query whether a list contains all of the elements from a collection.
+ *
+ * <p>There are no bounds on the type for this method and therefore to find matches objects are
+ * compared using {@link Object#equals} If you are not checking for equality use
+ * {@link #contains(Query[])}.
+ */
+ <H extends Collection<F>> E containsAll(H... collection);
+
+ /**
+ * Used to query whether a list does not contain any elements given in a collection.
+ *
+ * <p>There are no bounds on the type for this method and therefore to find matches objects are
+ * compared using {@link Object#equals} If you are not checking for equality use
+ * {@link #contains(Query[])}.
+ */
+ <H extends Collection<F>> E doesNotContainAny(H... collections);
}
\ No newline at end of file
diff --git a/common/device-side/bedstead/queryable/src/main/java/com/android/queryable/queries/ListQueryHelper.java b/common/device-side/bedstead/queryable/src/main/java/com/android/queryable/queries/ListQueryHelper.java
index 871caa7..a2957f7 100644
--- a/common/device-side/bedstead/queryable/src/main/java/com/android/queryable/queries/ListQueryHelper.java
+++ b/common/device-side/bedstead/queryable/src/main/java/com/android/queryable/queries/ListQueryHelper.java
@@ -21,6 +21,8 @@
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
@@ -29,8 +31,10 @@
private E mQuery;
private final IntegerQueryHelper<E> mSizeQuery;
- private final List<G> mContains = new ArrayList<>();
- private final List<G> mDoesNotContain = new ArrayList<>();
+ private final List<G> mContainsByQuery = new ArrayList<>();
+ private final List<G> mDoesNotContainByQuery = new ArrayList<>();
+ private final List<F> mContainsByType = new ArrayList<>();
+ private final List<F> mDoesNotContainByType = new ArrayList<>();
ListQueryHelper() {
mQuery = (E) this;
@@ -49,17 +53,51 @@
@Override
public E contains(G... objects) {
- mContains.addAll(Arrays.asList(objects));
+ mContainsByQuery.addAll(Arrays.asList(objects));
+ return mQuery;
+ }
+
+ @Override
+ public E contains(F... objects) {
+ mContainsByType.addAll(Arrays.asList(objects));
return mQuery;
}
@Override
public E doesNotContain(G... objects) {
- mDoesNotContain.addAll(Arrays.asList(objects));
+ mDoesNotContainByQuery.addAll(Arrays.asList(objects));
return mQuery;
}
@Override
+ public E doesNotContain(F... objects) {
+ mDoesNotContainByType.addAll(Arrays.asList(objects));
+ return mQuery;
+ }
+
+ @Override
+ public <H extends Collection<F>> E containsAll(H... collections) {
+ for (H collection : collections) {
+ Iterator<F> iterator = collection.iterator();
+ while (iterator.hasNext()) {
+ contains(iterator.next());
+ }
+ }
+ return mQuery;
+ }
+
+ @Override
+ public <H extends Collection<F>> E doesNotContainAny(H... collections) {
+ for (H collection : collections) {
+ Iterator<F> iterator = collection.iterator();
+ while (iterator.hasNext()) {
+ doesNotContain(iterator.next());
+ }
+ }
+ return mQuery;
+ }
+
+ @Override
public boolean matches(List<F> value) {
if (!mSizeQuery.matches(value.size())) {
return false;
@@ -69,7 +107,7 @@
return false;
}
- if (!checkDoesNotContain(value)) {
+ if (!(checkDoesNotContain(value))) {
return false;
}
@@ -79,7 +117,16 @@
private boolean checkContainsAtLeast(List<F> value) {
List<F> v = new ArrayList<>(value);
- for (G containsAtLeast : mContains) {
+ for (F containsAtLeast : mContainsByType) {
+ F match = findMatch(containsAtLeast, v);
+
+ if (match == null) {
+ return false;
+ }
+ v.remove(match);
+ }
+
+ for (G containsAtLeast : mContainsByQuery) {
F match = findMatch(containsAtLeast, v);
if (match == null) {
@@ -92,7 +139,13 @@
}
private boolean checkDoesNotContain(List<F> value) {
- for (G doesNotContain : mDoesNotContain) {
+ for (F doesNotContain : mDoesNotContainByType) {
+ if (findMatch(doesNotContain, value) != null) {
+ return false;
+ }
+ }
+
+ for (G doesNotContain : mDoesNotContainByQuery) {
if (findMatch(doesNotContain, value) != null) {
return false;
}
@@ -111,19 +164,27 @@
return null;
}
+ private F findMatch(F object, List<F> values) {
+ return values.contains(object) ? object : null;
+ }
+
@Override
public String describeQuery(String fieldName) {
List<String> queryStrings = new ArrayList<>();
queryStrings.add(mSizeQuery.describeQuery(fieldName + ".size"));
- if (!mContains.isEmpty()) {
+ if (!mContainsByQuery.isEmpty() && !mContainsByType.isEmpty()) {
queryStrings.add(fieldName + " contains matches of ["
- + mContains.stream().map(t -> "{" + t.describeQuery("") + "}").collect(
- Collectors.joining(", ")) + "]");
+ + mContainsByQuery.stream().map(t -> "{" + t.describeQuery("")
+ + "}").collect(Collectors.joining(", ")) + "]"
+ + mContainsByType.stream().map(t -> "{" + t.toString()
+ + "}").collect(Collectors.joining(", ")) + "]");
}
- if (!mDoesNotContain.isEmpty()) {
+ if (!mDoesNotContainByQuery.isEmpty() && !mDoesNotContainByType.isEmpty()) {
queryStrings.add(fieldName + " does not contain anything matching any of ["
- + mDoesNotContain.stream().map(t -> "{" + t.describeQuery("") + "}").collect(
- Collectors.joining(", ")) + "]");
+ + mDoesNotContainByQuery.stream().map(t -> "{" + t.describeQuery("")
+ + "}").collect(Collectors.joining(", "))
+ + mDoesNotContainByType.stream().map(t -> "{"
+ + t.toString() + "}").collect(Collectors.joining(", ")) + "]");
}
return Queryable.joinQueryStrings(queryStrings);
diff --git a/common/device-side/bedstead/queryable/src/main/java/com/android/queryable/queries/SetQuery.java b/common/device-side/bedstead/queryable/src/main/java/com/android/queryable/queries/SetQuery.java
index fc8e07f..63c45a2 100644
--- a/common/device-side/bedstead/queryable/src/main/java/com/android/queryable/queries/SetQuery.java
+++ b/common/device-side/bedstead/queryable/src/main/java/com/android/queryable/queries/SetQuery.java
@@ -20,6 +20,7 @@
import com.android.queryable.Queryable;
+import java.util.Collection;
import java.util.Set;
/** Query for a {@link Set}. */
@@ -36,6 +37,49 @@
E isEmpty();
E isNotEmpty();
+ /**
+ * Used to query whether a set contains certain objects.
+ */
E contains(G... objects);
+
+ /**
+ * Used to query whether a set contains certain objects.
+ *
+ * <p>There are no bounds on the type for this method and therefore to find matches objects are
+ * compared using {@link Object#equals} If you are not checking for equality use
+ * {@link #contains(Query[])}.
+ */
+ E contains(F... objects);
+
+ /**
+ * Used to query whether a set does not contain certain objects.
+ */
E doesNotContain(G... objects);
+
+ /**
+ * Used to query whether a set does not contain certain objects.
+ *
+ * <p>There are no bounds on the type for this method and therefore to find matches objects are
+ * compared using {@link Object#equals} If you are not checking for equality use
+ * {@link #contains(Query[])}.
+ */
+ E doesNotContain(F... objects);
+
+ /**
+ * Used to query whether a set contains all of the elements from a collection.
+ *
+ * <p>There are no bounds on the type for this method and therefore to find matches objects are
+ * compared using {@link Object#equals} If you are not checking for equality use
+ * {@link #contains(Query[])}.
+ */
+ <H extends Collection<F>> E containsAll(H... collections);
+
+ /**
+ * Used to query whether a set does not contain any elements given in a collection.
+ *
+ * <p>There are no bounds on the type for this method and therefore to find matches objects are
+ * compared using {@link Object#equals} If you are not checking for equality use
+ * {@link #contains(Query[])}.
+ */
+ <H extends Collection<F>> E doesNotContainAny(H... collections);
}
\ No newline at end of file
diff --git a/common/device-side/bedstead/queryable/src/main/java/com/android/queryable/queries/SetQueryHelper.java b/common/device-side/bedstead/queryable/src/main/java/com/android/queryable/queries/SetQueryHelper.java
index 8d9ddf9..870cadc 100644
--- a/common/device-side/bedstead/queryable/src/main/java/com/android/queryable/queries/SetQueryHelper.java
+++ b/common/device-side/bedstead/queryable/src/main/java/com/android/queryable/queries/SetQueryHelper.java
@@ -21,7 +21,9 @@
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@@ -30,8 +32,10 @@
private E mQuery;
private final IntegerQueryHelper<E> mSizeQuery;
- private final Set<G> mContains = new HashSet<>();
- private final Set<G> mDoesNotContain = new HashSet<>();
+ private final Set<G> mContainsByQuery = new HashSet<>();
+ private final Set<F> mContainsByType = new HashSet<>();
+ private final Set<G> mDoesNotContainByQuery = new HashSet<>();
+ private final Set<F> mDoesNotContainByType = new HashSet<>();
SetQueryHelper() {
mQuery = (E) this;
@@ -61,17 +65,51 @@
@Override
public E contains(G... objects) {
- mContains.addAll(Arrays.asList(objects));
+ mContainsByQuery.addAll(Arrays.asList(objects));
+ return mQuery;
+ }
+
+ @Override
+ public E contains(F... objects) {
+ mContainsByType.addAll(Arrays.asList(objects));
return mQuery;
}
@Override
public E doesNotContain(G... objects) {
- mDoesNotContain.addAll(Arrays.asList(objects));
+ mDoesNotContainByQuery.addAll(Arrays.asList(objects));
return mQuery;
}
@Override
+ public E doesNotContain(F... objects) {
+ mDoesNotContainByType.addAll(Arrays.asList(objects));
+ return mQuery;
+ }
+
+ @Override
+ public <H extends Collection<F>> E containsAll(H... collections) {
+ for (H collection : collections) {
+ Iterator<F> iterator = collection.iterator();
+ while (iterator.hasNext()) {
+ contains(iterator.next());
+ }
+ }
+ return mQuery;
+ }
+
+ @Override
+ public <H extends Collection<F>> E doesNotContainAny(H... collections) {
+ for (H collection : collections) {
+ Iterator<F> iterator = collection.iterator();
+ while (iterator.hasNext()) {
+ doesNotContain(iterator.next());
+ }
+ }
+ return mQuery;
+ }
+
+ @Override
public boolean matches(Set<F> value) {
if (!mSizeQuery.matches(value.size())) {
return false;
@@ -95,7 +133,16 @@
private boolean checkContainsAtLeast(Set<F> value) {
Set<F> v = new HashSet<>(value);
- for (G containsAtLeast : mContains) {
+ for (F containsAtLeast : mContainsByType) {
+ F match = findMatch(containsAtLeast, v);
+
+ if (match == null) {
+ return false;
+ }
+ v.remove(match);
+ }
+
+ for (G containsAtLeast : mContainsByQuery) {
F match = findMatch(containsAtLeast, v);
if (match == null) {
@@ -108,7 +155,13 @@
}
private boolean checkDoesNotContain(Set<F> value) {
- for (G doesNotContain : mDoesNotContain) {
+ for (F doesNotContain : mDoesNotContainByType) {
+ if (findMatch(doesNotContain, value) != null) {
+ return false;
+ }
+ }
+
+ for (G doesNotContain : mDoesNotContainByQuery) {
if (findMatch(doesNotContain, value) != null) {
return false;
}
@@ -127,19 +180,27 @@
return null;
}
+ private F findMatch(F object, Set<F> values) {
+ return values.contains(object) ? object : null;
+ }
+
@Override
public String describeQuery(String fieldName) {
List<String> queryStrings = new ArrayList<>();
queryStrings.add(mSizeQuery.describeQuery(fieldName + ".size"));
- if (!mContains.isEmpty()) {
+ if (!mContainsByQuery.isEmpty() && !mContainsByType.isEmpty()) {
queryStrings.add(fieldName + " contains matches of ["
- + mContains.stream().map(t -> "{" + t.describeQuery("") + "}").collect(
- Collectors.joining(", ")) + "]");
+ + mContainsByQuery.stream().map(t -> "{" + t.describeQuery("")
+ + "}").collect(Collectors.joining(", ")) + "]"
+ + mContainsByType.stream().map(t -> "{" + t.toString()
+ + "}").collect(Collectors.joining(", ")) + "]");
}
- if (!mDoesNotContain.isEmpty()) {
+ if (!mDoesNotContainByQuery.isEmpty() && !mDoesNotContainByType.isEmpty()) {
queryStrings.add(fieldName + " does not contain anything matching any of ["
- + mDoesNotContain.stream().map(t -> "{" + t.describeQuery("") + "}").collect(
- Collectors.joining(", ")) + "]");
+ + mDoesNotContainByQuery.stream().map(t -> "{" + t.describeQuery("")
+ + "}").collect(Collectors.joining(", ")) + "]"
+ + mDoesNotContainByType.stream().map(t -> "{" + t.toString()
+ + "}").collect(Collectors.joining(", ")) + "]");
}
return Queryable.joinQueryStrings(queryStrings);
diff --git a/common/device-side/bedstead/queryable/src/test/java/com/android/queryable/queries/ListQueryHelperTest.java b/common/device-side/bedstead/queryable/src/test/java/com/android/queryable/queries/ListQueryHelperTest.java
index 45d7d62..6fd2278 100644
--- a/common/device-side/bedstead/queryable/src/test/java/com/android/queryable/queries/ListQueryHelperTest.java
+++ b/common/device-side/bedstead/queryable/src/test/java/com/android/queryable/queries/ListQueryHelperTest.java
@@ -29,7 +29,6 @@
import org.junit.runners.JUnit4;
import java.util.List;
-import java.util.Set;
@RunWith(JUnit4.class)
public class ListQueryHelperTest {
@@ -38,6 +37,9 @@
private static final String BUNDLE_KEY = "key";
private static final Bundle BUNDLE_CONTAINING_KEY = new Bundle();
private static final Bundle BUNDLE_NOT_CONTAINING_KEY = new Bundle();
+ private static final Integer INTEGER = 1;
+ private static final Integer DIFFERENT_INTEGER = 2;
+ private static final Integer ANOTHER_DIFFERENT_INTEGER = 3;
static {
BUNDLE_CONTAINING_KEY.putString(BUNDLE_KEY, "value");
}
@@ -63,7 +65,7 @@
}
@Test
- public void matches_contains_doesContain_returnsTrue() {
+ public void matches_contains_withQuery_doesContain_returnsTrue() {
ListQueryHelper<Queryable, Bundle, BundleQuery<Queryable>> listQueryHelper =
new ListQueryHelper<>(mQuery);
@@ -76,7 +78,7 @@
}
@Test
- public void matches_contains_doesNotContain_returnsFalse() {
+ public void matches_contains_withQuery_doesNotContain_returnsFalse() {
ListQueryHelper<Queryable, Bundle, BundleQuery<Queryable>> listQueryHelper =
new ListQueryHelper<>(mQuery);
@@ -88,7 +90,7 @@
}
@Test
- public void matches_doesNotContain_doesContain_returnsFalse() {
+ public void matches_doesNotContain_withQuery_doesContain_returnsFalse() {
ListQueryHelper<Queryable, Bundle, BundleQuery<Queryable>> listQueryHelper =
new ListQueryHelper<>(mQuery);
@@ -101,7 +103,7 @@
}
@Test
- public void matches_doesNotContain_doesNotContain_returnsTrue() {
+ public void matches_doesNotContain_withQuery_doesNotContain_returnsTrue() {
ListQueryHelper<Queryable, Bundle, BundleQuery<Queryable>> listQueryHelper =
new ListQueryHelper<>(mQuery);
@@ -112,4 +114,89 @@
assertThat(listQueryHelper.matches(List.of(BUNDLE_NOT_CONTAINING_KEY))).isTrue();
}
+ @Test
+ public void matches_contains_withNonQuery_doesContain_returnsTrue() {
+ ListQueryHelper<Queryable, Integer, IntegerQuery<Queryable>> listQueryHelper =
+ new ListQueryHelper<>(mQuery);
+
+ listQueryHelper.contains(INTEGER);
+
+ assertThat(listQueryHelper.matches(
+ List.of(INTEGER, DIFFERENT_INTEGER))).isTrue();
+ }
+
+ @Test
+ public void matches_contains_withNonQuery_doesNotContain_returnsFalse() {
+ ListQueryHelper<Queryable, Integer, IntegerQuery<Queryable>> listQueryHelper =
+ new ListQueryHelper<>(mQuery);
+
+ listQueryHelper.contains(INTEGER);
+
+ assertThat(listQueryHelper.matches(List.of(DIFFERENT_INTEGER))).isFalse();
+ }
+
+ @Test
+ public void matches_doesNotContain_withNonQuery_doesContain_returnsFalse() {
+ ListQueryHelper<Queryable, Integer, IntegerQuery<Queryable>> listQueryHelper =
+ new ListQueryHelper<>(mQuery);
+
+ listQueryHelper.doesNotContain(INTEGER);
+
+ assertThat(listQueryHelper.matches(
+ List.of(INTEGER, DIFFERENT_INTEGER))).isFalse();
+ }
+
+ @Test
+ public void matches_doesNotContain_withNonQuery_doesNotContain_returnsTrue() {
+ ListQueryHelper<Queryable, Integer, IntegerQuery<Queryable>> listQueryHelper =
+ new ListQueryHelper<>(mQuery);
+
+ listQueryHelper.doesNotContain(INTEGER);
+
+ assertThat(listQueryHelper.matches(List.of(DIFFERENT_INTEGER))).isTrue();
+ }
+
+ @Test
+ public void matches_containsAll_withNonQueries_doesContain_returnsTrue() {
+ ListQueryHelper<Queryable, Integer, IntegerQuery<Queryable>> listQueryHelper =
+ new ListQueryHelper<>(mQuery);
+
+ listQueryHelper.containsAll(List.of(INTEGER, DIFFERENT_INTEGER));
+
+ assertThat(listQueryHelper.matches(
+ List.of(INTEGER, DIFFERENT_INTEGER, ANOTHER_DIFFERENT_INTEGER))).isTrue();
+ }
+
+ @Test
+ public void matches_containsAll_withNonQueries_doesNotContain_returnsFalse() {
+ ListQueryHelper<Queryable, Integer, IntegerQuery<Queryable>> listQueryHelper =
+ new ListQueryHelper<>(mQuery);
+
+ listQueryHelper.containsAll(List.of(INTEGER, DIFFERENT_INTEGER));
+
+ assertThat(listQueryHelper.matches(
+ List.of(DIFFERENT_INTEGER, ANOTHER_DIFFERENT_INTEGER))).isFalse();
+ }
+
+ @Test
+ public void matches_doesNotContainAny_withNonQueries_doesContain_returnsFalse() {
+ ListQueryHelper<Queryable, Integer, IntegerQuery<Queryable>> listQueryHelper =
+ new ListQueryHelper<>(mQuery);
+
+ listQueryHelper.doesNotContainAny(List.of(INTEGER, DIFFERENT_INTEGER));
+
+ assertThat(listQueryHelper.matches(
+ List.of(INTEGER, ANOTHER_DIFFERENT_INTEGER))).isFalse();
+ }
+
+ @Test
+ public void matches_doesNotContainAny_withNonQueries_doesNotContain_returnsTrue() {
+ ListQueryHelper<Queryable, Integer, IntegerQuery<Queryable>> listQueryHelper =
+ new ListQueryHelper<>(mQuery);
+
+ listQueryHelper.doesNotContainAny(List.of(INTEGER, DIFFERENT_INTEGER));
+
+ assertThat(listQueryHelper.matches(
+ List.of(ANOTHER_DIFFERENT_INTEGER))).isTrue();
+ }
}
diff --git a/common/device-side/bedstead/queryable/src/test/java/com/android/queryable/queries/SetQueryHelperTest.java b/common/device-side/bedstead/queryable/src/test/java/com/android/queryable/queries/SetQueryHelperTest.java
index c43697c..855b6e7 100644
--- a/common/device-side/bedstead/queryable/src/test/java/com/android/queryable/queries/SetQueryHelperTest.java
+++ b/common/device-side/bedstead/queryable/src/test/java/com/android/queryable/queries/SetQueryHelperTest.java
@@ -37,13 +37,18 @@
private static final String BUNDLE_KEY = "key";
private static final Bundle BUNDLE_CONTAINING_KEY = new Bundle();
private static final Bundle BUNDLE_NOT_CONTAINING_KEY = new Bundle();
+ private static final Integer INTEGER = 1;
+ private static final Integer DIFFERENT_INTEGER = 2;
+ private static final Integer ANOTHER_DIFFERENT_INTEGER = 3;
+
static {
BUNDLE_CONTAINING_KEY.putString(BUNDLE_KEY, "value");
}
@Test
public void matches_size_matches_returnsTrue() {
- SetQueryHelper<Queryable, Bundle, BundleQuery<Queryable>> setQueryHelper = new SetQueryHelper<>(mQuery);
+ SetQueryHelper<Queryable, Bundle, BundleQuery<Queryable>> setQueryHelper =
+ new SetQueryHelper<>(mQuery);
setQueryHelper.size().isEqualTo(1);
@@ -52,7 +57,8 @@
@Test
public void matches_size_doesNotMatch_returnsFalse() {
- SetQueryHelper<Queryable, Bundle, BundleQuery<Queryable>> setQueryHelper = new SetQueryHelper<>(mQuery);
+ SetQueryHelper<Queryable, Bundle, BundleQuery<Queryable>> setQueryHelper =
+ new SetQueryHelper<>(mQuery);
setQueryHelper.size().isEqualTo(1);
@@ -60,8 +66,9 @@
}
@Test
- public void matches_contains_doesContain_returnsTrue() {
- SetQueryHelper<Queryable, Bundle, BundleQuery<Queryable>> setQueryHelper = new SetQueryHelper<>(mQuery);
+ public void matches_contains_withQuery_doesContain_returnsTrue() {
+ SetQueryHelper<Queryable, Bundle, BundleQuery<Queryable>> setQueryHelper =
+ new SetQueryHelper<>(mQuery);
setQueryHelper.contains(
bundle().key(BUNDLE_KEY).exists()
@@ -71,8 +78,9 @@
}
@Test
- public void matches_contains_doesNotContain_returnsFalse() {
- SetQueryHelper<Queryable, Bundle, BundleQuery<Queryable>> setQueryHelper = new SetQueryHelper<>(mQuery);
+ public void matches_contains_withQuery_doesNotContain_returnsFalse() {
+ SetQueryHelper<Queryable, Bundle, BundleQuery<Queryable>> setQueryHelper =
+ new SetQueryHelper<>(mQuery);
setQueryHelper.contains(
bundle().key(BUNDLE_KEY).exists()
@@ -82,8 +90,9 @@
}
@Test
- public void matches_doesNotContain_doesContain_returnsFalse() {
- SetQueryHelper<Queryable, Bundle, BundleQuery<Queryable>> setQueryHelper = new SetQueryHelper<>(mQuery);
+ public void matches_doesNotContain_withQuery_doesContain_returnsFalse() {
+ SetQueryHelper<Queryable, Bundle, BundleQuery<Queryable>> setQueryHelper =
+ new SetQueryHelper<>(mQuery);
setQueryHelper.doesNotContain(
bundle().key(BUNDLE_KEY).exists()
@@ -93,8 +102,9 @@
}
@Test
- public void matches_doesNotContain_doesNotContain_returnsTrue() {
- SetQueryHelper<Queryable, Bundle, BundleQuery<Queryable>> setQueryHelper = new SetQueryHelper<>(mQuery);
+ public void matches_doesNotContain_withQuery_doesNotContain_returnsTrue() {
+ SetQueryHelper<Queryable, Bundle, BundleQuery<Queryable>> setQueryHelper =
+ new SetQueryHelper<>(mQuery);
setQueryHelper.doesNotContain(
bundle().key(BUNDLE_KEY).exists()
@@ -103,4 +113,89 @@
assertThat(setQueryHelper.matches(Set.of(BUNDLE_NOT_CONTAINING_KEY))).isTrue();
}
+ @Test
+ public void matches_contains_withNonQuery_doesContain_returnsTrue() {
+ SetQueryHelper<Queryable, Integer, IntegerQuery<Queryable>> setQueryHelper =
+ new SetQueryHelper<>(mQuery);
+
+ setQueryHelper.contains(INTEGER);
+
+ assertThat(setQueryHelper.matches(
+ Set.of(INTEGER, DIFFERENT_INTEGER))).isTrue();
+ }
+
+ @Test
+ public void matches_contains_withNonQuery_doesNotContain_returnsFalse() {
+ SetQueryHelper<Queryable, Integer, IntegerQuery<Queryable>> setQueryHelper =
+ new SetQueryHelper<>(mQuery);
+
+ setQueryHelper.contains(INTEGER);
+
+ assertThat(setQueryHelper.matches(Set.of(DIFFERENT_INTEGER))).isFalse();
+ }
+
+ @Test
+ public void matches_doesNotContain_withNonQuery_doesContain_returnsFalse() {
+ SetQueryHelper<Queryable, Integer, IntegerQuery<Queryable>> setQueryHelper =
+ new SetQueryHelper<>(mQuery);
+
+ setQueryHelper.doesNotContain(INTEGER);
+
+ assertThat(setQueryHelper.matches(
+ Set.of(INTEGER, DIFFERENT_INTEGER))).isFalse();
+ }
+
+ @Test
+ public void matches_doesNotContain_withNonQuery_doesNotContain_returnsTrue() {
+ SetQueryHelper<Queryable, Integer, IntegerQuery<Queryable>> setQueryHelper =
+ new SetQueryHelper<>(mQuery);
+
+ setQueryHelper.doesNotContain(INTEGER);
+
+ assertThat(setQueryHelper.matches(Set.of(DIFFERENT_INTEGER))).isTrue();
+ }
+
+ @Test
+ public void matches_containsAll_withNonQueries_doesContain_returnsTrue() {
+ SetQueryHelper<Queryable, Integer, IntegerQuery<Queryable>> setQueryHelper =
+ new SetQueryHelper<>(mQuery);
+
+ setQueryHelper.containsAll(Set.of(INTEGER, DIFFERENT_INTEGER));
+
+ assertThat(setQueryHelper.matches(
+ Set.of(INTEGER, DIFFERENT_INTEGER, ANOTHER_DIFFERENT_INTEGER))).isTrue();
+ }
+
+ @Test
+ public void matches_containsAll_withNonQueries_doesNotContain_returnsFalse() {
+ SetQueryHelper<Queryable, Integer, IntegerQuery<Queryable>> setQueryHelper =
+ new SetQueryHelper<>(mQuery);
+
+ setQueryHelper.containsAll(Set.of(INTEGER, DIFFERENT_INTEGER));
+
+ assertThat(setQueryHelper.matches(
+ Set.of(DIFFERENT_INTEGER, ANOTHER_DIFFERENT_INTEGER))).isFalse();
+ }
+
+ @Test
+ public void matches_doesNotContainAny_withNonQueries_doesContain_returnsFalse() {
+ SetQueryHelper<Queryable, Integer, IntegerQuery<Queryable>> setQueryHelper =
+ new SetQueryHelper<>(mQuery);
+
+ setQueryHelper.doesNotContainAny(Set.of(INTEGER, DIFFERENT_INTEGER));
+
+ assertThat(setQueryHelper.matches(
+ Set.of(INTEGER, ANOTHER_DIFFERENT_INTEGER))).isFalse();
+ }
+
+ @Test
+ public void matches_doesNotContainAny_withNonQueries_doesNotContain_returnsTrue() {
+ SetQueryHelper<Queryable, Integer, IntegerQuery<Queryable>> setQueryHelper =
+ new SetQueryHelper<>(mQuery);
+
+ setQueryHelper.doesNotContainAny(Set.of(INTEGER, DIFFERENT_INTEGER));
+
+ assertThat(setQueryHelper.matches(
+ Set.of(ANOTHER_DIFFERENT_INTEGER))).isTrue();
+ }
}
diff --git a/common/device-side/bedstead/testapp/src/test/java/com/android/bedstead/testapp/TestAppProviderTest.java b/common/device-side/bedstead/testapp/src/test/java/com/android/bedstead/testapp/TestAppProviderTest.java
index 72026b7..7d80b57 100644
--- a/common/device-side/bedstead/testapp/src/test/java/com/android/bedstead/testapp/TestAppProviderTest.java
+++ b/common/device-side/bedstead/testapp/src/test/java/com/android/bedstead/testapp/TestAppProviderTest.java
@@ -17,7 +17,6 @@
package com.android.bedstead.testapp;
import static com.android.queryable.queries.ActivityQuery.activity;
-import static com.android.queryable.queries.StringQuery.string;
import static com.google.common.truth.Truth.assertThat;
@@ -177,9 +176,8 @@
@Test
public void query_withPermission_returnsMatching() {
TestApp testApp = mTestAppProvider.query()
- .wherePermissions().contains(
- string().isEqualTo(PERMISSION_DECLARED_BY_TESTAPP)
- ).get();
+ .wherePermissions().contains(PERMISSION_DECLARED_BY_TESTAPP)
+ .get();
assertThat(testApp.permissions()).contains(PERMISSION_DECLARED_BY_TESTAPP);
}
@@ -187,9 +185,8 @@
@Test
public void query_withoutPermission_returnsMatching() {
TestApp testApp = mTestAppProvider.query()
- .wherePermissions().doesNotContain(
- string().isEqualTo(PERMISSION_DECLARED_BY_TESTAPP)
- ).get();
+ .wherePermissions().doesNotContain(PERMISSION_DECLARED_BY_TESTAPP)
+ .get();
assertThat(testApp.permissions()).doesNotContain(PERMISSION_DECLARED_BY_TESTAPP);
}
diff --git a/tests/devicepolicy/src/android/devicepolicy/cts/CrossProfileAppsTest.java b/tests/devicepolicy/src/android/devicepolicy/cts/CrossProfileAppsTest.java
index 76fec56..0fcf2dd 100644
--- a/tests/devicepolicy/src/android/devicepolicy/cts/CrossProfileAppsTest.java
+++ b/tests/devicepolicy/src/android/devicepolicy/cts/CrossProfileAppsTest.java
@@ -20,7 +20,6 @@
import static com.android.bedstead.harrier.DeviceState.UserType.WORK_PROFILE;
import static com.android.bedstead.harrier.OptionalBoolean.FALSE;
import static com.android.bedstead.harrier.OptionalBoolean.TRUE;
-import static com.android.queryable.queries.StringQuery.string;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
@@ -80,11 +79,9 @@
private static final TestAppProvider sTestAppProvider = new TestAppProvider();
private static final TestApp sCrossProfileTestApp = sTestAppProvider.query()
- .wherePermissions().contains(
- string().isEqualTo("android.permission.INTERACT_ACROSS_PROFILES")).get();
+ .wherePermissions().contains("android.permission.INTERACT_ACROSS_PROFILES").get();
private static final TestApp sNonCrossProfileTestApp = sTestAppProvider.query()
- .wherePermissions().doesNotContain(
- string().isEqualTo("android.permission.INTERACT_ACROSS_PROFILES")).get();
+ .wherePermissions().doesNotContain("android.permission.INTERACT_ACROSS_PROFILES").get();
@Test
@RequireRunOnPrimaryUser