diff --git a/AndroidAnnotations/androidannotations-core/androidannotations-test/src/main/java/org/androidannotations/test/menu/InjectMenuActivity.java b/AndroidAnnotations/androidannotations-core/androidannotations-test/src/main/java/org/androidannotations/test/menu/InjectMenuActivity.java index eba75fb021..c6445dd264 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations-test/src/main/java/org/androidannotations/test/menu/InjectMenuActivity.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations-test/src/main/java/org/androidannotations/test/menu/InjectMenuActivity.java @@ -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 @@ -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); + } + } } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations-test/src/test/java/org/androidannotations/test/menu/InjectMenuActivityTest.java b/AndroidAnnotations/androidannotations-core/androidannotations-test/src/test/java/org/androidannotations/test/menu/InjectMenuActivityTest.java index 32a8438bee..01e3118c1a 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations-test/src/test/java/org/androidannotations/test/menu/InjectMenuActivityTest.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations-test/src/test/java/org/androidannotations/test/menu/InjectMenuActivityTest.java @@ -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; @@ -34,6 +39,7 @@ public class InjectMenuActivityTest { @Before public void setUp() { injectMenuActivity = Robolectric.buildActivity(InjectMenuActivity_.class).create().get(); + injectMenuActivity.mockMenuInflater = createMenuInflater(); } @Test @@ -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); @@ -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() { + public Void answer(InvocationOnMock invocation) { + menuInflater.menuInflated = true; + return null; + } + }).when(menuInflater).inflate(anyInt(), any(Menu.class)); + return menuInflater; + } + }