package com.turhanoz.android.reactivedirectorychooser.observable; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import java.io.File; import rx.Observer; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @RunWith(RobolectricTestRunner.class) @Config(manifest = "library/src/main/AndroidManifest.xml", emulateSdk = 18) public class ListDirectoryObservableTest { ListDirectoryObservable sut; Observer mockObserver; @Before public void setUp() throws Exception { sut = new ListDirectoryObservable(); mockObserver = mock(Observer.class); } @Test public void observableShouldReturnOnlyChildDirectories() throws Exception { File stubRootDirectory = mock(File.class); File childDirectory1 = createStubDirectory(); File childFile1 = createStubFile(); File childDirectory2 = createStubDirectory(); File childrenContent[] = {childDirectory1, childFile1, childDirectory2}; when(stubRootDirectory.listFiles()).thenReturn(childrenContent); sut.create(stubRootDirectory) .subscribeOn(Schedulers.immediate()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(mockObserver); verify(mockObserver).onNext(childDirectory1); verify(mockObserver).onNext(childDirectory2); verify(mockObserver, times(2)).onNext(any(File.class)); verify(mockObserver, never()).onNext(childFile1); verify(mockObserver).onCompleted(); } private File createStubDirectory(){ File stubDirectory = createStubFile(); when(stubDirectory.isDirectory()).thenReturn(true); return stubDirectory; } private File createStubFile(){ File stubFile = mock(File.class); return stubFile; } }