package com.chriszou.auttutorial.async;
import com.chriszou.auttutorial.BuildConfig;
import com.chriszou.auttutorial.async.RepoModel.RepoCallback;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricGradleTestRunner;
import org.robolectric.annotation.Config;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import rx.Scheduler;
import rx.android.plugins.RxAndroidPlugins;
import rx.android.plugins.RxAndroidSchedulersHook;
import rx.functions.Action1;
import rx.plugins.RxJavaPlugins;
import rx.plugins.RxJavaSchedulersHook;
import rx.schedulers.Schedulers;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.fail;
/**
* Created by xiaochuang on 8/7/16.
*/
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
public class RepoModelTest {
@Test
public void testLoadRepos() throws Exception {
RepoModel model = new RepoModel();
final List<Repo> result = new ArrayList<>();
final CountDownLatch latch = new CountDownLatch(1);
model.loadRepos(new RepoCallback() {
@Override
public void onSuccess(List<Repo> repos) {
result.addAll(repos);
latch.countDown();
}
@Override
public void onFailure(int code, String msg) {
fail();
}
});
latch.await();
assertEquals(1, result.size());
latch.await(2, TimeUnit.SECONDS);
}
@Test
public void testLoadReposInRx() {
RxJavaPlugins.getInstance().registerSchedulersHook(new RxJavaSchedulersHook() {
@Override
public Scheduler getIOScheduler() {
return Schedulers.immediate();
}
});
RxAndroidPlugins.getInstance().registerSchedulersHook(new RxAndroidSchedulersHook() {
@Override
public Scheduler getMainThreadScheduler() {
return Schedulers.immediate();
}
});
RepoModel model = new RepoModel();
final List<Repo> result = new ArrayList<>();
model.loadRepos().subscribe(new Action1<List<Repo>>() {
@Override
public void call(List<Repo> repos) {
result.addAll(repos);
}
});
assertEquals(1, result.size());
}
}