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.os.Debug; 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; /** * This class turns on and off all of the builtin probes. * While it doesn't test any of the output, it does ensure that basic use of the probes does not crash the process. * @author alangardner * */ public class TestAllBuiltinProbes 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 = { AccelerometerFeaturesProbe.class, AccelerometerSensorProbe.class, ApplicationsProbe.class, AudioFeaturesProbe.class, AudioMediaProbe.class, BatteryProbe.class, BluetoothProbe.class, BrowserBookmarksProbe.class, BrowserSearchesProbe.class, CallLogProbe.class, CellTowerProbe.class, ContactProbe.class, GravitySensorProbe.class, GyroscopeSensorProbe.class, HardwareInfoProbe.class, ImageMediaProbe.class, LightSensorProbe.class, LinearAccelerationSensorProbe.class, LocationProbe.class, MagneticFieldSensorProbe.class, OrientationSensorProbe.class, PressureSensorProbe.class, ProcessStatisticsProbe.class, ProximitySensorProbe.class, RotationVectorSensorProbe.class, RunningApplicationsProbe.class, ServicesProbe.class, SimpleLocationProbe.class, ScreenProbe.class, SmsProbe.class, TelephonyProbe.class, TemperatureSensorProbe.class, TimeOffsetProbe.class, VideoMediaProbe.class, WifiProbe.class }; @SuppressWarnings("unchecked") public void testAll() throws ClassNotFoundException, IOException, InterruptedException { Log.i(TAG,"Running"); Debug.startMethodTracing("calc"); 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("sensorDelay", SensorProbe.SENSOR_DELAY_NORMAL); 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) { probes.add(gson.fromJson(Probe.DEFAULT_CONFIG, probeClass)); } 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 Debug.stopMethodTracing(); } }