package com.selbie.wrek.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; import android.content.res.Resources.NotFoundException; import android.test.AndroidTestCase; import android.util.Log; import com.selbie.wrek.JsonHandler; import com.selbie.wrek.ScheduleItem; import com.selbie.wrek.Stream; import org.json.JSONException; public class JsonHandlerUnitTest extends AndroidTestCase { public final static String TAG = JsonHandlerUnitTest.class.getSimpleName(); protected Resources getResources(String packageName) throws NameNotFoundException { PackageManager pm = getContext().getPackageManager(); return pm.getResourcesForApplication(packageName); } String loadJson() throws IOException, NotFoundException, NameNotFoundException { InputStream stream = this.getResources("com.selbie.wrek.test").openRawResource(R.raw.sample_json); BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); StringBuffer sb = new StringBuffer(); char [] temp = new char[50000]; while (true) { int result = reader.read(temp); if (result == -1) { break; } sb.append(temp, 0, result); } return sb.toString(); } public void testJsonHandler() { JsonHandler handler = new JsonHandler(); ArrayList<ScheduleItem> items = null; String sample_json = ""; try { sample_json = loadJson(); } catch (NotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (NameNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { items = handler.extractScheduleFromJson(sample_json); } catch (JSONException e) { e.printStackTrace(); } assertNotNull(items); assertEquals(43, items.size()); for (int x = 0; x < items.size(); x++) { ScheduleItem item = items.get(x); Log.d(TAG, item.getTitle()); assertNotNull(item.getGenre()); assertNotNull(item.getLogoURL()); assertNotNull(item.getTime()); assertNotNull(item.getTitle()); assertFalse(item.getTitle().isEmpty()); assertFalse(item.getLogoURL().isEmpty()); assertNotNull(item.getStreams()); assertNotNull(item.getStreams().size() > 0); } // now do some individual validation // LIVE STREAM ScheduleItem item = items.get(0); Stream stream; assertEquals("Live air stream", item.getTitle()); assertTrue(item.getTime().isEmpty()); assertEquals("http://www.selbie.com/wrek/radio2.png", item.getLogoURL()); assertEquals("What's on the air right now", item.getGenre()); stream = item.getStreams().get(0); assertEquals(24, stream.getBitrate()); assertTrue(stream.getHasIcyMetaInt()); assertTrue(stream.getIsLiveStream()); assertEquals("http://streaming.wrek.org:8000/wrek_live-24kb-mono.m3u", stream.getURL()); assertEquals(1, stream.getPlayList().size()); assertEquals("http://streaming.wrek.org:8000/wrek_live-24kb-mono", stream.getPlayList().get(0)); stream = item.getStreams().get(1); assertEquals(128, stream.getBitrate()); assertTrue(stream.getHasIcyMetaInt()); assertTrue(stream.getIsLiveStream()); assertEquals("http://streaming.wrek.org:8000/wrek_live-128kb.m3u", stream.getURL()); assertEquals(1, stream.getPlayList().size()); assertEquals("http://streaming.wrek.org:8000/wrek_live-128kb", stream.getPlayList().get(0)); // SHOW STREAM item = items.get(42); assertEquals("Personality Crisis", item.getTitle()); assertEquals("Sun 7/27 10:00 PM", item.getTime()); assertEquals("http://www.wrek.org/wp-content/themes/wrek/images/ss_icons/PC.png", item.getLogoURL()); assertEquals("New Wave, Punk, Electronic", item.getGenre()); stream = item.getStreams().get(1); assertEquals(128, stream.getBitrate()); assertFalse(stream.getHasIcyMetaInt()); assertFalse(stream.getIsLiveStream()); assertEquals("http://www.wrek.org/playlist.php/main/128kbs/current/PC.m3u", stream.getURL()); assertEquals(4, stream.getPlayList().size()); assertEquals("http://archive.wrek.org/main/128kb/Sun2330.mp3", stream.getPlayList().get(3)); } }