package edu.mit.media.funf.probe.builtin;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import android.test.AndroidTestCase;
import android.util.Log;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import edu.mit.media.funf.FunfManager;
import edu.mit.media.funf.json.IJsonObject;
import edu.mit.media.funf.probe.Probe;
import edu.mit.media.funf.probe.Probe.ContinuousProbe;
import edu.mit.media.funf.probe.Probe.DataListener;
import edu.mit.media.funf.probe.Probe.State;
import edu.mit.media.funf.probe.Probe.StateListener;
public class TestLocationProbes extends AndroidTestCase {
public static final String TAG = "FunfTest";
private DataListener listener = new DataListener() {
@Override
public void onDataReceived(IJsonObject completeProbeUri, IJsonObject data) {
Log.i(TAG, "DATA: " + completeProbeUri.toString() + " " + data.toString());
}
@Override
public void onDataCompleted(IJsonObject completeProbeUri, JsonElement checkpoint) {
Log.i(TAG, "COMPLETE: " + completeProbeUri.toString());
}
};
private StateListener stateListener = new StateListener() {
@Override
public void onStateChanged(Probe probe, State previousState) {
Log.i(TAG, probe.getClass().getName() + ": " + probe.getState());
Log.i(TAG, getGson().toJson(probe));
}
};
private Gson gson;
public Gson getGson() {
if (gson == null) {
gson = new GsonBuilder().registerTypeAdapterFactory(FunfManager.getProbeFactory(getContext())).create();
}
return gson;
}
@SuppressWarnings("rawtypes")
public static final Class[] ALL_PROBES = {
LocationProbe.class,
SimpleLocationProbe.class
};
@SuppressWarnings("unchecked")
public void testAll() throws ClassNotFoundException, IOException, InterruptedException {
Log.i(TAG,"Running");
List<Class<? extends Probe>> allProbeClasses = Arrays.asList((Class<? extends Probe>[])ALL_PROBES);
// Run one at a time
Gson gson = getGson();
for (Class<? extends Probe> probeClass : allProbeClasses) {
JsonObject config = new JsonObject();
config.addProperty("maxWaitTime", 1);
config.addProperty("asdf", 1);
config.addProperty("zzzz", "__");
Probe probe = gson.fromJson(config, probeClass);
probe.addStateListener(stateListener);
probe.registerListener(listener);
Thread.sleep(100L);
if (probe instanceof ContinuousProbe) {
((ContinuousProbe)probe).unregisterListener(listener);
}
}
// Run simultaneously
List<Probe> probes = new ArrayList<Probe>();
for (Class<? extends Probe> probeClass : allProbeClasses) {
JsonObject config = new JsonObject();
config.addProperty("maxWaitTime", 8);
config.addProperty("asdf", 1);
config.addProperty("zzzz", "__");
Probe probe = gson.fromJson(config, probeClass);
probes.add(probe);
}
for (Probe probe : probes) {
probe.addStateListener(stateListener);
probe.registerListener(listener);
}
Thread.sleep(10000L);
for (Probe probe : probes) {
if (probe instanceof ContinuousProbe) {
((ContinuousProbe)probe).unregisterListener(listener);
}
}
Thread.sleep(1000L); // Give probes time stop
}
}