Skip to content

Instantly share code, notes, and snippets.

@AAverin
Created May 26, 2016 17:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AAverin/6a6d82b2712e56daed3b0586becebd11 to your computer and use it in GitHub Desktop.
Save AAverin/6a6d82b2712e56daed3b0586becebd11 to your computer and use it in GitHub Desktop.
@RunWith(PowerMockRunner::class)
@PrepareForTest(DrawerToggleFactory::class,
MainPresenter::class)
class NavigationDrawerViewExtensionTest {
@Mock lateinit private var activity: BaseActivity
@Mock lateinit private var drawerToggleFactory: DrawerToggleFactory
@Mock lateinit private var eventsDelegate: NavigationDrawerViewExtensionDelegate
@Mock lateinit private var toolbar: Toolbar
@Mock lateinit private var drawer: DrawerLayout
@Mock lateinit private var navigationView: NavigationView
@Mock lateinit private var drawerToggle: ActionBarDrawerToggle
@InjectMocks private lateinit var classToTest: NavigationDrawerViewExtension
@Captor lateinit private var captor: ArgumentCaptor<NavigationView.OnNavigationItemSelectedListener>
@Before
fun setup() {
classToTest.eventsDelegate = eventsDelegate
}
@Test
fun closeMenuOnBackIfOpen() {
// given
classToTest.setViews(drawer, navigationView)
val gravity = GravityCompat.START
given(drawer.isDrawerOpen(gravity)).willReturn(true)
// when
val result = classToTest.onBackPressed()
// then
verify(drawer).closeDrawer(gravity)
assertThat(result, isTrue())
}
@Test
fun processOnBackNormallyIfDrawerIsClosed() {
// when
val result = classToTest.onBackPressed()
// then
verify(drawer, never()).closeDrawer(any<Int>())
assertThat(result, isFalse())
}
@Test
fun drawerToggleIsCreatedAndInitializedAfterViewsWhereSet() {
// given
mockCreateDrawerToggle()
classToTest.setToolbar(toolbar)
// when
classToTest.setViews(drawer, navigationView)
// then
verify(drawer).setDrawerListener(drawerToggle)
verify(drawerToggle).syncState()
}
@Test
fun listensForNavigationEvents() {
// given
mockCreateDrawerToggle()
classToTest.setViews(drawer, navigationView)
// when
classToTest.onCreate()
// then
verify(navigationView).setNavigationItemSelectedListener(any())
}
@Test
fun googleMapsScreenCanBeOpened() {
classToTest.setViews(drawer, navigationView)
// when
clickNavgationItem(R.id.nav1)
// then
verify(eventsDelegate).showNav1Screen()
}
@Test
fun favoritesScreenCanBeOpened() {
classToTest.setViews(drawer, navigationView)
// when
clickNavgationItem(R.id.nav2)
// then
verify(eventsDelegate).showNav2Screen()
}
private fun clickNavgationItem(itemId: Int) {
mockCreateDrawerToggle()
classToTest.onCreate(null)
verify(navigationView).setNavigationItemSelectedListener(captor.capture())
captor.value.onNavigationItemSelected(ActionMenuItem(null, 0, itemId, 0, 0, ""))
}
private fun mockCreateDrawerToggle() {
given(drawerToggleFactory.create(
activity,
drawer,
toolbar,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close)
).willReturn(drawerToggle)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment