diff --git a/library/src/main/java/com/adevinta/android/barista/assertion/BaristaAssistiveTextAssertions.kt b/library/src/main/java/com/adevinta/android/barista/assertion/BaristaAssistiveTextAssertions.kt index 9524a6b3..458adc55 100644 --- a/library/src/main/java/com/adevinta/android/barista/assertion/BaristaAssistiveTextAssertions.kt +++ b/library/src/main/java/com/adevinta/android/barista/assertion/BaristaAssistiveTextAssertions.kt @@ -26,14 +26,22 @@ object BaristaAssistiveTextAssertions { private fun matchAssistiveText(expectedAssistiveText: String): Matcher { return object : TypeSafeMatcher() { override fun describeTo(description: Description) { - description.appendText("with helper text: ").appendText(expectedAssistiveText) + description.appendText("with helper text: ").appendValue(expectedAssistiveText) } override fun matchesSafely(item: View): Boolean { - return when (item) { - is TextInputLayout -> expectedAssistiveText == item.helperText.toString() + return item.tryGetHelperText() == expectedAssistiveText + } + + override fun describeMismatchSafely(item: View, mismatchDescription: Description) { + mismatchDescription.appendText("with helper text: ").appendValue(item.tryGetHelperText()) + } + + private fun View.tryGetHelperText(): String? { + return when (this) { + is TextInputLayout -> helperText?.toString() else -> { - throw UnsupportedOperationException("View of class ${item.javaClass.simpleName} not supported") + throw UnsupportedOperationException("View of class ${javaClass.simpleName} not supported") } } } diff --git a/library/src/main/java/com/adevinta/android/barista/assertion/BaristaContentDescriptionAssertions.kt b/library/src/main/java/com/adevinta/android/barista/assertion/BaristaContentDescriptionAssertions.kt index 79f46925..3800517a 100644 --- a/library/src/main/java/com/adevinta/android/barista/assertion/BaristaContentDescriptionAssertions.kt +++ b/library/src/main/java/com/adevinta/android/barista/assertion/BaristaContentDescriptionAssertions.kt @@ -37,18 +37,26 @@ object BaristaContentDescriptionAssertions { override fun matchesSafely(item: View): Boolean { return item.contentDescription.isNotBlank() } + + override fun describeMismatchSafely(item: View, mismatchDescription: Description) { + mismatchDescription.appendText("with content description: ").appendValue(item.contentDescription.toString()) + } } } private fun matchContentDescription(expectedContentDescription: String): Matcher { return object : TypeSafeMatcher() { override fun describeTo(description: Description) { - description.appendText("with content description: ").appendText(expectedContentDescription) + description.appendText("with content description: ").appendValue(expectedContentDescription) } override fun matchesSafely(item: View): Boolean { return item.contentDescription == expectedContentDescription } + + override fun describeMismatchSafely(item: View, mismatchDescription: Description) { + mismatchDescription.appendText("with content description: ").appendValue(item.contentDescription.toString()) + } } } } \ No newline at end of file diff --git a/library/src/main/java/com/adevinta/android/barista/assertion/BaristaErrorAssertions.kt b/library/src/main/java/com/adevinta/android/barista/assertion/BaristaErrorAssertions.kt index a6782197..a26c224d 100644 --- a/library/src/main/java/com/adevinta/android/barista/assertion/BaristaErrorAssertions.kt +++ b/library/src/main/java/com/adevinta/android/barista/assertion/BaristaErrorAssertions.kt @@ -58,17 +58,15 @@ object BaristaErrorAssertions { private fun matchError(expectedError: String): Matcher { return object : TypeSafeMatcher() { override fun describeTo(description: Description) { - description.appendText("with error: ").appendText(expectedError) + description.appendText("with error: ").appendValue(expectedError) + } + + override fun describeMismatchSafely(item: View, mismatchDescription: Description) { + mismatchDescription.appendText("with error: ").appendValue(item.tryGetErrorText()) } override fun matchesSafely(item: View): Boolean { - return when (item) { - is TextView -> expectedError == item.error.toString() - is TextInputLayout -> expectedError == item.error.toString() - else -> { - throw UnsupportedOperationException("View of class ${item.javaClass.simpleName} not supported") - } - } + return expectedError == item.tryGetErrorText() } } } @@ -79,14 +77,22 @@ object BaristaErrorAssertions { description.appendText("without error") } + override fun describeMismatchSafely(item: View, mismatchDescription: Description) { + mismatchDescription.appendText("with error: ").appendValue(item.tryGetErrorText()) + } + override fun matchesSafely(item: View): Boolean { - return when (item) { - is TextView -> item.error.isNullOrEmpty() - is TextInputLayout -> item.error.isNullOrEmpty() - else -> { - throw UnsupportedOperationException("View of class ${item.javaClass.simpleName} not supported") - } - } + return item.tryGetErrorText().isNullOrEmpty() + } + } + } + + private fun View.tryGetErrorText(): String? { + return when (this) { + is TextView -> error?.toString() + is TextInputLayout -> error?.toString() + else -> { + throw UnsupportedOperationException("View of class ${javaClass.simpleName} not supported") } } } diff --git a/library/src/main/java/com/adevinta/android/barista/assertion/BaristaHintAssertions.kt b/library/src/main/java/com/adevinta/android/barista/assertion/BaristaHintAssertions.kt index 4910aa3b..a7b08d49 100644 --- a/library/src/main/java/com/adevinta/android/barista/assertion/BaristaHintAssertions.kt +++ b/library/src/main/java/com/adevinta/android/barista/assertion/BaristaHintAssertions.kt @@ -31,23 +31,31 @@ object BaristaHintAssertions { private fun matchHint(expectedHint: String): Matcher { return object : TypeSafeMatcher() { override fun describeTo(description: Description) { - description.appendText("with hint: ").appendText(expectedHint) + description.appendText("with hint: ").appendValue(expectedHint) } override fun matchesSafely(item: View): Boolean { - return when (item) { + return item.tryGetHintText() == expectedHint + } + + override fun describeMismatchSafely(item: View, mismatchDescription: Description) { + mismatchDescription.appendText("with hint: ").appendValue(item.tryGetHintText()) + } + + private fun View.tryGetHintText(): String? { + return when (this) { is TextInputLayout -> { - expectedHint == item.hint.toString() + hint?.toString() } is TextInputEditText -> { - val hint = ((item.parent as FrameLayout).parent as TextInputLayout).hint - expectedHint == hint + val hint = ((this.parent as FrameLayout).parent as TextInputLayout).hint + hint?.toString() } is EditText -> { - item.hint == expectedHint + hint?.toString() } else -> { - throw UnsupportedOperationException("View of class ${item.javaClass.simpleName} not supported") + throw UnsupportedOperationException("View of class ${javaClass.simpleName} not supported") } } }