Home | History | Annotate | Download | only in shadows
      1 package com.xtremelabs.robolectric.shadows;
      2 
      3 import android.app.Activity;
      4 import android.content.Context;
      5 import com.xtremelabs.robolectric.WithTestDefaultsRunner;
      6 
      7 import org.hamcrest.CoreMatchers;
      8 import org.junit.After;
      9 import org.junit.Before;
     10 import org.junit.Test;
     11 import org.junit.runner.RunWith;
     12 
     13 import java.io.File;
     14 import java.io.FileInputStream;
     15 import java.io.FileOutputStream;
     16 import java.io.FileWriter;
     17 import java.io.IOException;
     18 
     19 import static org.hamcrest.CoreMatchers.*;
     20 import static org.junit.Assert.assertNotNull;
     21 import static org.junit.Assert.assertThat;
     22 import static org.junit.Assert.assertTrue;
     23 
     24 @RunWith(WithTestDefaultsRunner.class)
     25 public class ContextTest {
     26     private Context context;
     27 
     28     @Before
     29     public void setUp() throws Exception {
     30         context = new Activity();
     31         deleteDir(context.getFilesDir());
     32         deleteDir(context.getCacheDir());
     33 
     34         File[] files = context.getFilesDir().listFiles();
     35         assertNotNull(files);
     36         assertThat(files.length, is(0));
     37 
     38         File[] cachedFiles = context.getFilesDir().listFiles();
     39         assertNotNull(cachedFiles);
     40         assertThat(cachedFiles.length, is(0));
     41     }
     42 
     43     @After
     44     public void after() {
     45     	deleteDir(context.getFilesDir());
     46     	deleteDir(context.getCacheDir());
     47     	deleteDir(context.getExternalCacheDir());
     48     	deleteDir(context.getExternalFilesDir(null));
     49     }
     50 
     51     public void deleteDir(File path) {
     52 		if (path.isDirectory()) {
     53 			File[] files = path.listFiles();
     54             assertNotNull(files);
     55 			for (File f : files) {
     56 				deleteDir(f);
     57 			}
     58 		}
     59 		path.delete();
     60 	}
     61 
     62     @Test
     63     public void shouldGetApplicationDataDirectory() throws IOException {
     64         File dataDir = new File(ShadowContext.FILES_DIR, "data");
     65         assertThat(dataDir.mkdir(), is(true));
     66 
     67         dataDir = context.getDir("data", Context.MODE_PRIVATE);
     68         assertThat(dataDir, not(nullValue()));
     69         assertThat(dataDir.exists(), is(true));
     70     }
     71 
     72 
     73     @Test
     74     public void shouldCreateIfDoesNotExistAndGetApplicationDataDirectory() {
     75         File dataDir = new File(ShadowContext.FILES_DIR, "data");
     76         assertThat(dataDir.exists(), is(false));
     77 
     78         dataDir = context.getDir("data", Context.MODE_PRIVATE);
     79         assertThat(dataDir, not(nullValue()));
     80         assertThat(dataDir.exists(), is(true));
     81     }
     82 
     83     @Test
     84     public void shouldStubThemeStuff() throws Exception {
     85         assertThat(context.obtainStyledAttributes(null), not(nullValue()));
     86         assertThat(context.obtainStyledAttributes(0, null), not(nullValue()));
     87         assertThat(context.obtainStyledAttributes(null, null), not(nullValue()));
     88         assertThat(context.obtainStyledAttributes(null, null, 0, 0), not(nullValue()));
     89     }
     90 
     91     @Test
     92     public void getCacheDir_shouldCreateDirectory() throws Exception {
     93         assertTrue(context.getCacheDir().exists());
     94     }
     95 
     96     @Test
     97     public void getExternalCacheDir_shouldCreateDirectory() throws Exception {
     98         assertTrue(context.getExternalCacheDir().exists());
     99     }
    100 
    101     @Test
    102     public void shouldWriteToCacheDir() throws Exception {
    103         assertNotNull(context.getCacheDir());
    104         File cacheTest = new File(context.getCacheDir(), "__test__");
    105 
    106         assertThat(cacheTest.getPath(), CoreMatchers.containsString("android-cache"));
    107 
    108         FileOutputStream fos = null;
    109         try {
    110             fos = new FileOutputStream(cacheTest);
    111             fos.write("test".getBytes());
    112         } finally {
    113             if (fos != null)
    114                 fos.close();
    115         }
    116         assertTrue(cacheTest.exists());
    117     }
    118 
    119     @Test
    120     public void shouldWriteToExternalCacheDir() throws Exception {
    121         assertNotNull(context.getExternalCacheDir());
    122         File cacheTest = new File(context.getExternalCacheDir(), "__test__");
    123 
    124         assertThat(cacheTest.getPath(), containsString("android-external-cache"));
    125 
    126         FileOutputStream fos = null;
    127         try {
    128             fos = new FileOutputStream(cacheTest);
    129             fos.write("test".getBytes());
    130         } finally {
    131             if (fos != null)
    132                 fos.close();
    133         }
    134 
    135         assertTrue(cacheTest.exists());
    136     }
    137 
    138     @Test
    139     public void getFilesDir_shouldCreateDirectory() throws Exception {
    140         assertTrue(context.getFilesDir().exists());
    141     }
    142 
    143     @Test
    144     public void getExternalFilesDir_shouldCreateDirectory() throws Exception {
    145         assertTrue(context.getExternalFilesDir(null).exists());
    146     }
    147 
    148     @Test
    149     public void getExternalFilesDir_shouldCreateNamedDirectory() throws Exception {
    150     	File f = context.getExternalFilesDir("__test__");
    151         assertTrue(f.exists());
    152         assertTrue(f.getAbsolutePath().endsWith("__test__"));
    153     }
    154 
    155     @Test
    156     public void openFileInput_shouldReturnAFileInputStream() throws Exception {
    157         String fileContents = "blah";
    158 
    159         File file = new File(context.getFilesDir(), "__test__");
    160         FileWriter fileWriter = new FileWriter(file);
    161         fileWriter.write(fileContents);
    162         fileWriter.close();
    163 
    164         FileInputStream fileInputStream = null;
    165         try {
    166             fileInputStream = context.openFileInput("__test__");
    167 
    168             byte[] bytes = new byte[fileContents.length()];
    169             fileInputStream.read(bytes);
    170             assertThat(bytes, equalTo(fileContents.getBytes()));
    171         } finally {
    172             if (fileInputStream != null)
    173                 fileInputStream.close();
    174         }
    175     }
    176 
    177     @Test(expected = IllegalArgumentException.class)
    178     public void openFileInput_shouldNotAcceptPathsWithSeparatorCharacters() throws Exception {
    179         FileInputStream fileInputStream = null;
    180         try {
    181             fileInputStream = context.openFileInput("data" + File.separator + "test");
    182         } finally {
    183             if (fileInputStream != null)
    184                 fileInputStream.close();
    185         }
    186     }
    187 
    188     @Test
    189     public void openFileOutput_shouldReturnAFileOutputStream() throws Exception {
    190         File file = new File("__test__");
    191         String fileContents = "blah";
    192         FileOutputStream fileOutputStream = null;
    193         try {
    194             fileOutputStream = context.openFileOutput("__test__", -1);
    195             fileOutputStream.write(fileContents.getBytes());
    196         } finally {
    197             if (fileOutputStream != null)
    198                 fileOutputStream.close();
    199         }
    200         FileInputStream fileInputStream = null;
    201         try {
    202             fileInputStream = new FileInputStream(new File(context.getFilesDir(), file.getName()));
    203             byte[] readBuffer = new byte[fileContents.length()];
    204             fileInputStream.read(readBuffer);
    205             assertThat(new String(readBuffer), equalTo(fileContents));
    206         } finally {
    207             if (fileInputStream != null)
    208                 fileInputStream.close();
    209         }
    210     }
    211 
    212     @Test(expected = IllegalArgumentException.class)
    213     public void openFileOutput_shouldNotAcceptPathsWithSeparatorCharacters() throws Exception {
    214         FileOutputStream fos = null;
    215         try {
    216             fos = context.openFileOutput(File.separator + "data" + File.separator + "test" + File.separator + "hi", 0);
    217         } finally {
    218             if (fos != null)
    219                 fos.close();
    220         }
    221     }
    222 
    223     @Test
    224     public void deleteFile_shouldReturnTrue() throws IOException {
    225         File filesDir = context.getFilesDir();
    226         File file = new File(filesDir, "test.txt");
    227         boolean successfully = file.createNewFile();
    228         assertThat(successfully, is(true));
    229         successfully = context.deleteFile(file.getName());
    230         assertThat(successfully, is(true));
    231     }
    232 
    233     @Test
    234     public void deleteFile_shouldReturnFalse() throws IOException {
    235         File filesDir = context.getFilesDir();
    236         File file = new File(filesDir, "test.txt");
    237         boolean successfully = context.deleteFile(file.getName());
    238         assertThat(successfully, is(false));
    239     }
    240 }
    241