package net.naonedbus.activity.impl;
import java.io.IOException;
import java.util.List;
import java.util.Random;
import java.util.concurrent.CountDownLatch;
import net.naonedbus.bean.Arret;
import net.naonedbus.bean.horaire.Horaire;
import net.naonedbus.manager.impl.ArretManager;
import net.naonedbus.manager.impl.HoraireManager;
import org.joda.time.DateMidnight;
import org.joda.time.DateTime;
import android.content.ContentResolver;
import android.test.ActivityInstrumentationTestCase2;
public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {
public MainActivityTest() {
super(MainActivity.class);
}
public void testTimeAccess() throws InterruptedException {
final ContentResolver contentResolver = getActivity().getContentResolver();
final ArretManager arretManager = ArretManager.getInstance();
final Arret arret = arretManager.getSingle(contentResolver, "FMIT1");
assertNotNull(arret);
final HoraireManager horaireManager = HoraireManager.getInstance();
horaireManager.clearSchedules(contentResolver);
final DateMidnight date = new DateMidnight();
final int threadCount = 10;
final CountDownLatch latch = new CountDownLatch(threadCount);
for (int i = 0; i < threadCount; i++) {
final Thread thread = new Thread(new TimeFetcherTask(contentResolver, latch, arret, date));
thread.start();
}
latch.await();
}
class TimeFetcherTask implements Runnable {
private final Arret mArret;
private final DateMidnight mDate;
private final ContentResolver mContentResolver;
private final CountDownLatch mCountDownLatch;
public TimeFetcherTask(final ContentResolver contentResolver, final CountDownLatch latch, final Arret arret,
final DateMidnight date) {
mContentResolver = contentResolver;
mCountDownLatch = latch;
mArret = arret;
mDate = date;
}
@Override
public void run() {
final HoraireManager horaireManager = HoraireManager.getInstance();
try {
for (int i = 0; i < 50; i++) {
final Random random = new Random(System.currentTimeMillis());
if (random.nextBoolean())
horaireManager.clearSchedules(mContentResolver);
final List<Horaire> horaires = horaireManager.getSchedules(mContentResolver, mArret, mDate);
assertTrue(horaires.size() > 0);
for (final Horaire horaire : horaires) {
DateMidnight day = horaire.getJour();
assertEquals(day.getDayOfMonth(), mDate.getDayOfMonth());
assertEquals(day.getMonthOfYear(), mDate.getMonthOfYear());
assertEquals(day.getYear(), mDate.getYear());
}
}
} catch (final IOException e) {
fail(e.getLocalizedMessage());
}
mCountDownLatch.countDown();
}
}
}