diff options
Diffstat (limited to 'espresso/espresso-lib/src/main/java/com/google/android/apps/common/testing/ui/espresso/matcher/PreferenceMatchers.java')
-rw-r--r-- | espresso/espresso-lib/src/main/java/com/google/android/apps/common/testing/ui/espresso/matcher/PreferenceMatchers.java | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/espresso/espresso-lib/src/main/java/com/google/android/apps/common/testing/ui/espresso/matcher/PreferenceMatchers.java b/espresso/espresso-lib/src/main/java/com/google/android/apps/common/testing/ui/espresso/matcher/PreferenceMatchers.java new file mode 100644 index 0000000..13b6506 --- /dev/null +++ b/espresso/espresso-lib/src/main/java/com/google/android/apps/common/testing/ui/espresso/matcher/PreferenceMatchers.java @@ -0,0 +1,185 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * 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 + * + * http://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 com.google.android.apps.common.testing.ui.espresso.matcher; + +import static org.hamcrest.Matchers.is; + +import android.content.res.Resources; +import android.preference.Preference; + +import org.hamcrest.Description; +import org.hamcrest.Matcher; +import org.hamcrest.TypeSafeMatcher; + +/** + * A collection of hamcrest matchers that match {@link Preference}s. + */ +public final class PreferenceMatchers { + + private PreferenceMatchers() {} + + public static Matcher<Preference> withSummary(final int resourceId) { + return new TypeSafeMatcher<Preference>() { + private String resourceName = null; + private String expectedText = null; + + @Override + public void describeTo(Description description) { + description.appendText(" with summary string from resource id: "); + description.appendValue(resourceId); + if (null != resourceName) { + description.appendText("["); + description.appendText(resourceName); + description.appendText("]"); + } + if (null != expectedText) { + description.appendText(" value: " ); + description.appendText(expectedText); + } + } + + @Override + public boolean matchesSafely(Preference preference) { + if (null == expectedText) { + try { + expectedText = preference.getContext().getResources().getString(resourceId); + resourceName = preference.getContext().getResources().getResourceEntryName(resourceId); + } catch (Resources.NotFoundException ignored) { + /* view could be from a context unaware of the resource id. */ + } + } + if (null != expectedText) { + return expectedText.equals(preference.getSummary().toString()); + } else { + return false; + } + } + }; + } + + public static Matcher<Preference> withSummaryText(String summary) { + return withSummaryText(is(summary)); + } + + public static Matcher<Preference> withSummaryText(final Matcher<String> summaryMatcher) { + return new TypeSafeMatcher<Preference>() { + @Override + public void describeTo(Description description) { + description.appendText(" a preference with summary matching: "); + summaryMatcher.describeTo(description); + } + + @Override + public boolean matchesSafely(Preference pref) { + String summary = pref.getSummary().toString(); + return summaryMatcher.matches(summary); + } + }; + } + + public static Matcher<Preference> withTitle(final int resourceId) { + return new TypeSafeMatcher<Preference>() { + private String resourceName = null; + private String expectedText = null; + + @Override + public void describeTo(Description description) { + description.appendText(" with title string from resource id: "); + description.appendValue(resourceId); + if (null != resourceName) { + description.appendText("["); + description.appendText(resourceName); + description.appendText("]"); + } + if (null != expectedText) { + description.appendText(" value: " ); + description.appendText(expectedText); + } + } + + @Override + public boolean matchesSafely(Preference preference) { + if (null == expectedText) { + try { + expectedText = preference.getContext().getResources().getString(resourceId); + resourceName = preference.getContext().getResources().getResourceEntryName(resourceId); + } catch (Resources.NotFoundException ignored) { + /* view could be from a context unaware of the resource id. */ + } + } + if (null != expectedText) { + return expectedText.equals(preference.getTitle().toString()); + } else { + return false; + } + } + }; + } + + public static Matcher<Preference> withTitleText(String title) { + return withTitleText(is(title)); + } + + public static Matcher<Preference> withTitleText(final Matcher<String> titleMatcher) { + return new TypeSafeMatcher<Preference>() { + @Override + public void describeTo(Description description) { + description.appendText(" a preference with title matching: "); + titleMatcher.describeTo(description); + } + + @Override + public boolean matchesSafely(Preference pref) { + String title = pref.getTitle().toString(); + return titleMatcher.matches(title); + } + }; + } + + public static Matcher<Preference> isEnabled() { + return new TypeSafeMatcher<Preference>() { + @Override + public void describeTo(Description description) { + description.appendText(" is an enabled preference"); + } + + @Override + public boolean matchesSafely(Preference pref) { + return pref.isEnabled(); + } + }; + } + + public static Matcher<Preference> withKey(String key) { + return withKey(is(key)); + } + + public static Matcher<Preference> withKey(final Matcher<String> keyMatcher) { + return new TypeSafeMatcher<Preference>() { + @Override + public void describeTo(Description description) { + description.appendText(" preference with key matching: "); + keyMatcher.describeTo(description); + } + + @Override + public boolean matchesSafely(Preference pref) { + return keyMatcher.matches(pref.getKey()); + } + }; + } +} |