package edu.mit.media.funf; import java.math.BigDecimal; import java.util.LinkedList; import java.util.Map; import java.util.Queue; import android.test.AndroidTestCase; import com.google.gson.Gson; import com.google.gson.JsonElement; import edu.mit.media.funf.config.Configurable; import edu.mit.media.funf.pipeline.Pipeline; import edu.mit.media.funf.pipeline.PipelineFactory; public class TestPipeline extends AndroidTestCase { private Gson gson; private Queue<String> actions; public static final String CREATED = "created", RAN = "ran", DESTROYED = "destroyed"; @Override protected void setUp() throws Exception { super.setUp(); gson = FunfManager.getGsonBuilder(getContext()).create(); actions = new LinkedList<String>(); } public static class SamplePipeline implements Pipeline { public SamplePipeline() { } @Configurable private Map<String,Schedule> schedules; @Configurable private Object testComponent; private Object nonConfigurable; @Override public void onCreate(FunfManager manager) { // TODO Auto-generated method stub } @Override public void onRun(String action, JsonElement config) { // TODO Auto-generated method stub } @Override public void onDestroy() { // TODO Auto-generated method stub } public Map<String,Schedule> getSchedules() { return schedules; } } public String SAMPLE_PIPELINE_CONFIG = "{" + "\"@type\": \"" + SamplePipeline.class.getName() + "\"," + "\"" + PipelineFactory.SCHEDULES_FIELD_NAME + "\": {" + "\"archive\": {" + "\"interval\": 1," + "\"opportunistic\": false" + "}" + "}," + "\"testComponent\": {" + "\"@schedule\": {" + "\"duration\": 2" + "}" + "}," + "\"nonConfigurable\": {" + "\"@schedule\": {" + "\"duration\": 2" + "}" + "}" + "}"; public void testPipelineLifecycle() { } public void testLoadPipeline() { Pipeline pipeline = gson.fromJson(SAMPLE_PIPELINE_CONFIG, Pipeline.class); assertTrue("Should respect runtime type.", pipeline instanceof SamplePipeline); SamplePipeline samplePipeline = (SamplePipeline)pipeline; Map<String,Schedule> schedules = samplePipeline.getSchedules(); assertNotNull("Schedules should exists.", schedules); assertTrue("Schedule should contain explicit action", schedules.containsKey("archive")); Schedule archive = schedules.get("archive"); assertEquals("Interval should have been set in schedule.", BigDecimal.ONE, archive.getInterval()); assertEquals("Opportunistic should have been set in schedule.", false, archive.isOpportunistic()); assertTrue("Schedule should contain annotation based action", schedules.containsKey("testComponent")); Schedule testComponent = schedules.get("testComponent"); assertEquals("Interval should have been set in schedule.", new BigDecimal(2), testComponent.getDuration()); assertFalse("Schedule should not contain schedule for non configurable item.", schedules.containsKey("nonConfigurable")); } }