Вы не можете проверить TextView
с android:ellipsize
, проверив, заканчивается ли оно "..."
Это потому, что даже если вы видите, что оно заканчивается на "...", но оно на самом деле не заканчивается на "...".
Чтобы проверить это, вы можете сделать этот тест
@Test
fun check_textview_text() {
//given
val errorMessage = """
Very long error, Very long error, Very long error, Very long error, Very long error,
Very long error, Very long error, Very long error, Very long error, Very long error,
Very long error, Very long error, Very long error, Very long error, Very long error,
Very long error, Very long error, Very long error, Very long error, Very long
error,"""
//when
presentErrorActivityWith(errorMessage)
//then
onView(withId(R.id.errorMessageTextView)).check(matches(withText(containsString(errorMessage ))));
}
Этот тест должен пройти, если ваша TextView
содержит ту же строку, что и в errorMessage
переменная. Хотя на самом деле вместо этого вы видите на экране три точки «...».
Потому что на самом деле под капотом android система не устанавливает «...» в конец усеченной строки текст поля TextView
.
Чтобы проверить android:ellipsize
правильный путь:
@RunWith(AndroidJUnit4.class)
public class TextViewLongTextWithEllipsizeTest {
private static final String TAG = "LOG_TAG";
@Rule
public ActivityTestRule mActivityRule = new ActivityTestRule<>(
LongTextActivity.class);
/**
* Testing if a TextView uses "android:ellipsize"
* at the end of its text as the text is long
*/
@Test
public void testTextIsEllipsized() {
TextView textView = mActivityRule.getActivity().findViewById(R.id.errorMessageTextView);
Layout layout = textView.getLayout();
if (layout != null) {
int ellipsisCount = layout.getEllipsisCount(layout.getLineCount() - 1);
assertThat(ellipsisCount, is(greaterThan(0))); // if true then text is ellipsized
}
}
/**
* Testing if a TextView doesn't use "android:ellipsize"
* at the end of its text as the text is not that long
*/
@Test
public void testTextNotEllipsized() {
TextView textView = mActivityRule.getActivity().findViewById(R.id.no_ellipsize_text);
Layout layout = textView.getLayout();
if (layout != null) {
int ellipsisCount = layout.getEllipsisCount(layout.getLineCount() - 1);
assertThat(ellipsisCount, not(greaterThan(0))); // if true then text is not ellipsized
}
}
}
Подсказка: I только что добавили метод теста, пожалуйста, повторите тест с учетом и при утверждениях перед тестированием.