Skip to content

Commit a3e3772

Browse files
Adds doesNotHaveFlag and doesNotHaveFlags matchers to IntentMatchers for testing.
PiperOrigin-RevId: 923572732
1 parent 7104477 commit a3e3772

4 files changed

Lines changed: 79 additions & 0 deletions

File tree

espresso/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ The following artifacts were released:
2323

2424
**New Features**
2525

26+
* Add `doesNotHaveFlag` and `doesNotHaveFlags` matchers to `IntentMatchers`.
27+
2628
**Breaking Changes**
2729

2830
**API Changes**

espresso/intents/java/androidx/test/espresso/intent/api/current_public.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,9 @@ package androidx.test.espresso.intent.matcher {
125125
method public static org.hamcrest.Matcher<android.content.Intent!>! anyIntent();
126126
method public static org.hamcrest.Matcher<android.content.Intent!> doesNotHaveExtraWithKey(String);
127127
method public static org.hamcrest.Matcher<android.content.Intent!> doesNotHaveExtraWithKey(org.hamcrest.Matcher<java.lang.String!>);
128+
method public static org.hamcrest.Matcher<android.content.Intent!>! doesNotHaveFlag(int);
129+
method public static org.hamcrest.Matcher<android.content.Intent!>! doesNotHaveFlags(int);
130+
method public static org.hamcrest.Matcher<android.content.Intent!>! doesNotHaveFlags(int...!);
128131
method public static org.hamcrest.Matcher<android.content.Intent!>! filterEquals(android.content.Intent!);
129132
method public static org.hamcrest.Matcher<android.content.Intent!>! hasAction(String!);
130133
method public static org.hamcrest.Matcher<android.content.Intent!>! hasAction(org.hamcrest.Matcher<java.lang.String!>!);

espresso/intents/java/androidx/test/espresso/intent/matcher/IntentMatchers.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,34 @@ public boolean matchesSafely(Intent intent) {
340340
};
341341
}
342342

343+
public static Matcher<Intent> doesNotHaveFlag(int flag) {
344+
return doesNotHaveFlags(flag);
345+
}
346+
347+
public static Matcher<Intent> doesNotHaveFlags(int... flags) {
348+
int allFlags = 0;
349+
for (int i : flags) {
350+
allFlags |= i;
351+
}
352+
return doesNotHaveFlags(allFlags);
353+
}
354+
355+
public static Matcher<Intent> doesNotHaveFlags(final int flags) {
356+
357+
return new TypeSafeMatcher<Intent>() {
358+
@Override
359+
public void describeTo(Description description) {
360+
description.appendText("does not have flags: " + Integer.toHexString(flags));
361+
}
362+
363+
@Override
364+
public boolean matchesSafely(Intent intent) {
365+
int intentFlags = intent.getFlags();
366+
return ((intentFlags & flags) == 0);
367+
}
368+
};
369+
}
370+
343371
/** Matches an intent if it {@link Intent#filterEquals(Intent)} the expected intent. */
344372
public static Matcher<Intent> filterEquals(Intent expectedIntent) {
345373
return new TypeSafeMatcher<Intent>() {

espresso/intents/javatests/androidx/test/espresso/intent/matcher/IntentMatchersTest.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
2020
import static androidx.test.espresso.intent.matcher.BundleMatchers.hasEntry;
2121
import static androidx.test.espresso.intent.matcher.IntentMatchers.doesNotHaveExtraWithKey;
22+
import static androidx.test.espresso.intent.matcher.IntentMatchers.doesNotHaveFlag;
23+
import static androidx.test.espresso.intent.matcher.IntentMatchers.doesNotHaveFlags;
2224
import static androidx.test.espresso.intent.matcher.IntentMatchers.filterEquals;
2325
import static androidx.test.espresso.intent.matcher.IntentMatchers.hasAction;
2426
import static androidx.test.espresso.intent.matcher.IntentMatchers.hasCategories;
@@ -473,6 +475,50 @@ public void hasFlagsWithCustomFlagsDoesNotMatch() {
473475
assertFalse((hasFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | 8)).matches(intent));
474476
}
475477

478+
@Test
479+
public void doesNotHaveFlagsWithSingleFlag() {
480+
Intent intent = new Intent();
481+
assertTrue(doesNotHaveFlags(0).matches(intent));
482+
assertTrue(doesNotHaveFlags(0).matches(new Intent().setFlags(1)));
483+
assertTrue(doesNotHaveFlag(Intent.FLAG_GRANT_READ_URI_PERMISSION).matches(intent));
484+
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
485+
assertFalse(doesNotHaveFlag(Intent.FLAG_GRANT_READ_URI_PERMISSION).matches(intent));
486+
assertFalse(doesNotHaveFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION).matches(intent));
487+
}
488+
489+
@Test
490+
public void doesNotHaveFlagsWithMultipleFlags() {
491+
Intent intent = new Intent();
492+
intent.setFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION | Intent.FLAG_ACTIVITY_NO_HISTORY);
493+
assertTrue(doesNotHaveFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS).matches(intent));
494+
assertFalse(doesNotHaveFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION).matches(intent));
495+
assertFalse(doesNotHaveFlags(Intent.FLAG_ACTIVITY_NO_HISTORY).matches(intent));
496+
assertFalse(
497+
doesNotHaveFlags(
498+
Intent.FLAG_DEBUG_LOG_RESOLUTION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
499+
.matches(intent));
500+
assertFalse(
501+
doesNotHaveFlags(
502+
Intent.FLAG_DEBUG_LOG_RESOLUTION, Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
503+
.matches(intent));
504+
assertTrue(
505+
doesNotHaveFlags(
506+
Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS,
507+
Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY)
508+
.matches(intent));
509+
}
510+
511+
@Test
512+
public void doesNotHaveFlagsWithCustomFlags() {
513+
Intent intent = new Intent();
514+
intent.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION | 8);
515+
assertTrue((doesNotHaveFlags(16)).matches(intent));
516+
assertTrue((doesNotHaveFlags(Intent.FLAG_ACTIVITY_NO_HISTORY, 16)).matches(intent));
517+
assertFalse((doesNotHaveFlags(8 | 2)).matches(intent));
518+
assertFalse((doesNotHaveFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION, 4)).matches(intent));
519+
assertFalse((doesNotHaveFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION, 8, 4)).matches(intent));
520+
}
521+
476522
@Test
477523
public void filterEqualsMatches() {
478524
Intent intent =

0 commit comments

Comments
 (0)