Android Studio 3.3.Эспрессо-тесты на Котлине.
Здесь мой xml
<TextView
android:id="@+id/toolbaTitleTextView"
style="@style/textViewOneLine"
android:layout_width="0dp"
android:layout_height="0dp"
android:textSize="@dimen/tool_bar_text_size"
/>
<dimen name="tool_bar_text_size">13sp</dimen>
Здесь тест для проверки размера текста:
@Test
fun toolbar_title_textSize() {
onView(withId(R.id.toolbaTitleTextView))
.check(matches(withFontSizeResId(R.dimen.tool_bar_text_size)))
}
fun withFontSizeResId(expectedResourceId: Int): Matcher<View> {
return object : BoundedMatcher<View, View>(View::class.java) {
private var expectedValueDp: Float = 0.toFloat()
public override fun matchesSafely(view: View): Boolean {
if (view !is TextView) {
return false
}
val actualSizePx = view.textSize
val actualValueDp = AndroidUtil.px2dp(view.getContext(), actualSizePx.toFloat())
expectedValueDp = AndroidUtil.getDimensionDp(view.getContext(), expectedResourceId)
return java.lang.Float.compare(actualValueDp, expectedValueDp) == 0
}
override fun describeTo(description: Description) {
description.appendText("with fontSize: ")
description.appendValue(context.getResources().getString(expectedResourceId))
}
}
}
public static float px2dp(Context context, float px) {
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float dp = px / ((float) metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
return dp;
}
public static float getDimensionDp(Context context, int dimenResourceId) {
float dimenDp = (context.getResources().getDimension(dimenResourceId) / context.getResources().getDisplayMetrics().density);
return dimenDp;
}
Тест не пройден, потому что "actualValueDp
" = 17.0, но "expectedValueDp
"= 16,9.И как результат java.lang.Float.compare
! = 0 и тест не пройден.
Как я могу это исправить?Как я могу сравнить размер текста textView?