Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 659795b6 authored by Abodunrinwa Toki's avatar Abodunrinwa Toki
Browse files

Fix assertFloatingToolbarDoesNotContainItem

Test: bit FrameworksCoreTests:android.widget.TextViewActivityTest
Change-Id: I859991489f316258d9e0b6610bda500ae968026c
parent a51bf213
Loading
Loading
Loading
Loading
+17 −30
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import org.hamcrest.TypeSafeMatcher;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

/**
 * Espresso utility methods for the floating toolbar.
@@ -175,31 +176,10 @@ public class FloatingToolbarEspressoUtils {
     * @throws AssertionError if the assertion fails
     */
    public static void assertFloatingToolbarDoesNotContainItem(String itemLabel) {
        onFloatingToolBar().check(matches(new TypeSafeMatcher<View>() {
            @Override
            public boolean matchesSafely(View view) {
                return doesNotContainItem(view);
            }

            @Override
            public void describeTo(Description description) {}

            private boolean doesNotContainItem(View view) {
                if (view.getTag() instanceof MenuItem) {
                    if (itemLabel.equals(((MenuItem) view.getTag()).getTitle().toString())) {
                        return false;
                    }
                } else if (view instanceof ViewGroup) {
                    ViewGroup viewGroup = (ViewGroup) view;
                    for (int i = 0; i < viewGroup.getChildCount(); i++) {
                        if (doesNotContainItem(viewGroup.getChildAt(i))) {
                            return false;
                        }
                    }
                }
                return true;
            }
        }));
        final Predicate<View> hasMenuItemLabel = view ->
                view.getTag() instanceof MenuItem
                        && itemLabel.equals(((MenuItem) view.getTag()).getTitle().toString());
        assertFloatingToolbarMenuItem(hasMenuItemLabel, false);
    }

    /**
@@ -209,23 +189,30 @@ public class FloatingToolbarEspressoUtils {
     * @throws AssertionError if the assertion fails
     */
    public static void assertFloatingToolbarDoesNotContainItem(final int menuItemId) {
        final Predicate<View> hasMenuItemId = view ->
                view.getTag() instanceof MenuItem
                        && ((MenuItem) view.getTag()).getItemId() == menuItemId;
        assertFloatingToolbarMenuItem(hasMenuItemId, false);
    }

    private static void assertFloatingToolbarMenuItem(
            final Predicate<View> predicate, final boolean positiveAssertion) {
        onFloatingToolBar().check(matches(new TypeSafeMatcher<View>() {
            @Override
            public boolean matchesSafely(View view) {
                return !hasMenuItemWithSpecifiedId(view);
                return positiveAssertion == containsItem(view);
            }

            @Override
            public void describeTo(Description description) {}

            private boolean hasMenuItemWithSpecifiedId(View view) {
                if (view.getTag() instanceof MenuItem
                        && ((MenuItem) view.getTag()).getItemId() == menuItemId) {
            private boolean containsItem(View view) {
                if (predicate.test(view)) {
                    return true;
                } else if (view instanceof ViewGroup) {
                    ViewGroup viewGroup = (ViewGroup) view;
                    for (int i = 0; i < viewGroup.getChildCount(); i++) {
                        if (hasMenuItemWithSpecifiedId(viewGroup.getChildAt(i))) {
                        if (containsItem(viewGroup.getChildAt(i))) {
                            return true;
                        }
                    }