package org.techbooster.app.abc.loaders; import android.test.InstrumentationTestCase; import com.android.volley.VolleyError; import org.mockito.InjectMocks; import org.mockito.MockitoAnnotations; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.techbooster.app.abc.consts.UrlConsts; import org.techbooster.app.abc.models.ConferenceSession; import org.techbooster.app.abc.testtools.AssetsLoader; import org.techbooster.app.abc.tools.VolleyManager; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doAnswer; public class ConferenceSessionLoaderTest extends InstrumentationTestCase { @InjectMocks ConferenceSessionLoader mConferenceSessionLoader; @MockitoAnnotations.Mock VolleyManager mVolleyManager; @Override protected void setUp() throws Exception { super.setUp(); System.setProperty("dexmaker.dexcache", getInstrumentation().getTargetContext().getCacheDir().getPath()); } public void testGetSessions() throws Exception { mConferenceSessionLoader = new ConferenceSessionLoader(getInstrumentation().getTargetContext()); MockitoAnnotations.initMocks(this); doAnswer(new Answer() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { String html = AssetsLoader .load(getInstrumentation().getContext(), "conference_keynote.html"); VolleyManager.ResponseListener listener = (VolleyManager.ResponseListener) invocation.getArguments()[1]; listener.onResponse(html); return null; } }).when(mVolleyManager).get(anyString(), any(VolleyManager.ResponseListener.class)); final CountDownLatch countDownLatch = new CountDownLatch(1); mConferenceSessionLoader.getSessions(UrlConsts.CONFERENCE_KEYNOTE_URL, new ConferenceSessionLoader.Listener() { @Override public void onSuccess(List<ConferenceSession> sessions) { assertNotNull(sessions); assertFalse(sessions.isEmpty()); assertEquals(8, sessions.size()); ConferenceSession session = sessions.get(0); assertEquals("基調講演/Reborn", session.getTrackName()); assertEquals("グローバル・ネットワークの成立と新しい技術革新の展望", session.getSessionTitle()); assertEquals("丸山 不二夫", session.getSpeakerName()); assertEquals( "特定非営利活動法人 日本Androidの会 名誉会長 東京大学卒。一橋大学大学院博士課程修了。 1987年から稚内に移住。稚内北星学園短期大学学長。 2000年の同短大の四年制大学移行に伴い、稚内北星学園大学学長を二期務める。 その後、早稲田大学情報生産システム研究科客員教授、 公立はこだて未来大学情報科学部特任教授。 日本Javaユーザ会会長、日本Androidの会会長、クラウド研究会代表等を歴任。", session.getSpeakerProfile()); assertEquals("10:15", session.getBeginTime()); assertEquals("Rebornトラック(秋葉原ダイビル2F T0)", session.getRoom()); countDownLatch.countDown(); } @Override public void onError(VolleyError error) { fail(); countDownLatch.countDown(); } } ); countDownLatch.await(5, TimeUnit.SECONDS); assertEquals(0, countDownLatch.getCount()); } }