Не могу проверить точный размер текста - PullRequest
1 голос
/ 03 мая 2019

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?

...