Implement Environment.getExternalStoragePublicDirectory and add some missing tests
diff --git a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowEnvironment.java b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowEnvironment.java
index e56ada1..27d49b7 100644
--- a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowEnvironment.java
+++ b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowEnvironment.java
@@ -24,7 +24,14 @@
     
     @Implementation
     public static File getExternalStorageDirectory() {
+    	ShadowContext.EXTERNAL_CACHE_DIR.mkdirs();
 		return ShadowContext.EXTERNAL_CACHE_DIR;
     }
     
+    @Implementation
+    public static File getExternalStoragePublicDirectory(String type) {
+		File f = (type == null) ? ShadowContext.EXTERNAL_FILES_DIR : new File( ShadowContext.EXTERNAL_FILES_DIR, type );
+        f.mkdirs();
+        return f;
+    }
 }
diff --git a/src/test/java/com/xtremelabs/robolectric/shadows/EnvironmentTest.java b/src/test/java/com/xtremelabs/robolectric/shadows/EnvironmentTest.java
new file mode 100644
index 0000000..fa5376a
--- /dev/null
+++ b/src/test/java/com/xtremelabs/robolectric/shadows/EnvironmentTest.java
@@ -0,0 +1,56 @@
+package com.xtremelabs.robolectric.shadows;
+
+import static org.junit.Assert.*;
+
+import java.io.File;
+
+import org.junit.After;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import android.os.Environment;
+
+import com.xtremelabs.robolectric.WithTestDefaultsRunner;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+
+@RunWith(WithTestDefaultsRunner.class)
+public class EnvironmentTest {
+
+	@After
+	public void tearDown() throws Exception {
+		deleteDir(ShadowContext.EXTERNAL_CACHE_DIR);
+		deleteDir(ShadowContext.EXTERNAL_FILES_DIR);
+		ShadowEnvironment.setExternalStorageState("removed");
+	}
+	
+	@Test
+	public void testExternalStorageState() {
+		assertThat( Environment.getExternalStorageState(), equalTo("removed") );
+		ShadowEnvironment.setExternalStorageState("mounted");
+		assertThat( Environment.getExternalStorageState(), equalTo("mounted") );
+	}
+	
+	@Test
+	public void testGetExternalStorageDirectory() {
+		 assertTrue(Environment.getExternalStorageDirectory().exists());
+	}
+	
+	@Test
+	public void testGetExternalStoragePublicDirectory() {
+		File extStoragePublic = Environment.getExternalStoragePublicDirectory("Movies"); 
+		assertTrue(extStoragePublic.exists());
+		assertThat(extStoragePublic, equalTo( new File(ShadowContext.EXTERNAL_FILES_DIR, "Movies" ) ) );
+	}
+	
+    public void deleteDir(File path) {
+		if (path.isDirectory()) {
+			File[] files = path.listFiles();
+			for (File f : files) {
+				deleteDir(f);
+			}
+		}
+		path.delete();
+	}
+
+}