Skip to content
This repository has been archived by the owner on Feb 26, 2023. It is now read-only.

Commit

Permalink
Browse files Browse the repository at this point in the history
Extend InjectMenu tests to ensure that MenuInflater has been called
  • Loading branch information
dodgex committed Mar 18, 2017
1 parent 39ed42f commit 0da3d1b
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 0 deletions.
Expand Up @@ -17,11 +17,16 @@

import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.InjectMenu;
import org.androidannotations.annotations.OptionsMenu;
import org.androidannotations.test.R;

import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.view.MenuInflater;

@EActivity
@OptionsMenu(R.menu.my_menu)
public class InjectMenuActivity extends Activity {

@InjectMenu
Expand All @@ -30,13 +35,31 @@ public class InjectMenuActivity extends Activity {
Menu methodInjectedMenu;
Menu multiInjectedMenu;

boolean menuIsInflated;

@InjectMenu
void methodInjectedExtra(Menu methodInjectedMenu) {
this.menuIsInflated = mockMenuInflater.menuInflated;
this.methodInjectedMenu = methodInjectedMenu;
}

void multiInjectedMenu(@InjectMenu Menu multiInjectedMenu, @InjectMenu Menu multiInjectedMenu2) {
this.menuIsInflated = mockMenuInflater.menuInflated;
this.multiInjectedMenu = multiInjectedMenu;
}

MockMenuInflater mockMenuInflater;

@Override
public MenuInflater getMenuInflater() {
return mockMenuInflater;
}

class MockMenuInflater extends MenuInflater {
boolean menuInflated = false;

MockMenuInflater(Context context) {
super(context);
}
}
}
Expand Up @@ -16,11 +16,16 @@
package org.androidannotations.test.menu;

import static org.fest.assertions.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;

Expand All @@ -34,6 +39,7 @@ public class InjectMenuActivityTest {
@Before
public void setUp() {
injectMenuActivity = Robolectric.buildActivity(InjectMenuActivity_.class).create().get();
injectMenuActivity.mockMenuInflater = createMenuInflater();
}

@Test
Expand All @@ -48,6 +54,14 @@ public void testMenuInjectedFromOnCreateOptionsMenu() {
assertThat(injectMenuActivity.menu).isSameAs(menu);
}

@Test
public void methodInjectionComesAfterInflation() {
Menu menu = mock(Menu.class);
assertThat(injectMenuActivity.menuIsInflated).isFalse();
injectMenuActivity.onCreateOptionsMenu(menu);
assertThat(injectMenuActivity.menuIsInflated).isTrue();
}

@Test
public void methodInjectedMenu() {
Menu menu = mock(Menu.class);
Expand All @@ -61,4 +75,16 @@ public void multiInjectedMenu() {
injectMenuActivity.onCreateOptionsMenu(menu);
assertThat(injectMenuActivity.multiInjectedMenu).isSameAs(menu);
}

private InjectMenuActivity.MockMenuInflater createMenuInflater() {
final InjectMenuActivity.MockMenuInflater menuInflater = mock(InjectMenuActivity.MockMenuInflater.class);
doAnswer(new Answer<Void>() {
public Void answer(InvocationOnMock invocation) {
menuInflater.menuInflated = true;
return null;
}
}).when(menuInflater).inflate(anyInt(), any(Menu.class));
return menuInflater;
}

}

0 comments on commit 0da3d1b

Please sign in to comment.