How to check the function of the "Options" menu in Robolectric?

I would like to confirm the visibility of menu items. However, my menu items always return true. I use the following code to inflate my menu.

    SherlockMenuInflater inflater = new SherlockMenuInflater(activity);
    MenuBuilder menu = new MenuBuilder(activity);
    fragment.onCreateOptionsMenu(menu, inflater);

    System.out.println(menu.findItem(R.id.submit).isVisible() + " " + menu.findItem(R.id.next).isVisible() + " "
            + menu.findItem(R.id.done).isVisible());

    assertEquals(3, menu.size());
    assertFalse(menu.findItem(R.id.submit).isVisible());
    assertTrue(menu.findItem(R.id.next).isVisible());
    assertFalse(menu.findItem(R.id.done).isVisible());

Am I doing something wrong?

+4
source share
1 answer

My OptionsMenuhas two MenuItems, which of them ( Sort) have their own subMenuwith two elements.

Here is my test code Robolectricfor visibility OptionsMenu:

@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
public class MainActivityTest {

    private static MainActivity mActivity;

    @Before
    public void setMainActivity() {
        if (mActivity == null) {
            mActivity = Robolectric.buildActivity(MainActivity.class).create().visible().get();
        }
    }

    @Test
    public void checkMainActivityOptionsMenuValues() throws Exception {
        //get MainActivity.toolbar instance
        Toolbar toolbar = ButterKnife.findById(mActivity, R.id.toolbar);
        //get ShadowActivity instance
        ShadowActivity shadowActivity = shadowOf(mActivity);
        //call onCreateOptionsMenu using toolbar.menu
        shadowActivity.onCreateOptionsMenu(toolbar.getMenu());
        //assert that OptionsMenu has visible items
        assertTrue(shadowActivity.getOptionsMenu().hasVisibleItems());
        //assert that `Settings` MenuItem is visible
        assertEquals(shadowActivity.getOptionsMenu().findItem(R.id.action_settings).isVisible(), true);
        //assert that `Sort` MenuItem is visible
        assertEquals(shadowActivity.getOptionsMenu().getItem(0).getTitle(),
                mActivity.getString(R.string.action_sort));
        //assert that `Sort` has subMenu with `By Value id` value
        assertEquals(shadowActivity.getOptionsMenu().getItem(0).getSubMenu().getItem(0).getTitle(),
                mActivity.getString(R.string.menu_sort_a_z));
        //assert that `Sort` has subMenu with `By Joke Length` value
        assertEquals(shadowActivity.getOptionsMenu().getItem(0).getSubMenu().getItem(1).getTitle(),
                mActivity.getString(R.string.menu_sort_size));
    }
}

If you are not using Butterknifea string instead:

 Toolbar toolbar = ButterKnife.findById(mActivity, R.id.toolbar);

using

 Toolbar toolbar = mActivity.findViewById(R.id.toolbar);

I am using Robolectric 3.1.

Hope this helps

+2
source

Source: https://habr.com/ru/post/1531875/


All Articles