Home | History | Annotate | Download | only in shadows
      1 package org.robolectric.shadows;
      2 
      3 import static org.assertj.core.api.Assertions.assertThat;
      4 
      5 import android.os.ParcelFileDescriptor;
      6 import java.io.File;
      7 import java.io.FileOutputStream;
      8 import org.junit.Before;
      9 import org.junit.Test;
     10 import org.junit.runner.RunWith;
     11 import org.robolectric.RobolectricTestRunner;
     12 import org.robolectric.RuntimeEnvironment;
     13 
     14 @RunWith(RobolectricTestRunner.class)
     15 public class ShadowParcelFileDescriptorTest {
     16   private File file;
     17   private File readOnlyFile;
     18 
     19   @Before
     20   public void setup() throws Exception {
     21     file = new File(RuntimeEnvironment.application.getFilesDir(), "test");
     22     FileOutputStream os = new FileOutputStream(file);
     23     os.close();
     24     readOnlyFile = new File(RuntimeEnvironment.application.getFilesDir(), "test_readonly");
     25     os = new FileOutputStream(readOnlyFile);
     26     os.close();
     27     readOnlyFile.setReadOnly();
     28   }
     29 
     30   @Test
     31   public void testOpens() throws Exception {
     32     ParcelFileDescriptor pfd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_WRITE);
     33     assertThat(pfd).isNotNull();
     34     assertThat(pfd.getFileDescriptor().valid()).isTrue();
     35     pfd.close();
     36   }
     37 
     38   @Test
     39   public void testOpens_readOnlyFile() throws Exception {
     40     ParcelFileDescriptor pfd = ParcelFileDescriptor.open(readOnlyFile, ParcelFileDescriptor.MODE_READ_ONLY);
     41     assertThat(pfd).isNotNull();
     42     assertThat(pfd.getFileDescriptor().valid()).isTrue();
     43     pfd.close();
     44   }
     45 
     46   @Test
     47   public void testOpens_canWriteWritableFile() throws Exception {
     48     ParcelFileDescriptor pfd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_WRITE);
     49     assertThat(pfd).isNotNull();
     50     assertThat(pfd.getFileDescriptor().valid()).isTrue();
     51     FileOutputStream os = new FileOutputStream(pfd.getFileDescriptor());
     52     os.write(5);
     53     os.close();
     54   }
     55 
     56   @Test
     57   public void testStatSize_emptyFile() throws Exception {
     58     ParcelFileDescriptor pfd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_WRITE);
     59     assertThat(pfd).isNotNull();
     60     assertThat(pfd.getFileDescriptor().valid()).isTrue();
     61     assertThat(pfd.getStatSize()).isEqualTo(0);
     62     pfd.close();
     63   }
     64 
     65   @Test
     66   public void testStatSize_writtenFile() throws Exception {
     67     ParcelFileDescriptor pfd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_WRITE);
     68     assertThat(pfd).isNotNull();
     69     assertThat(pfd.getFileDescriptor().valid()).isTrue();
     70     FileOutputStream os = new FileOutputStream(pfd.getFileDescriptor());
     71     os.write(5);
     72     assertThat(pfd.getStatSize()).isEqualTo(1);  // One byte.
     73     os.close();
     74   }
     75 
     76   @Test
     77   public void testCloses() throws Exception {
     78     ParcelFileDescriptor pfd = ParcelFileDescriptor.open(file, -1);
     79     pfd.close();
     80     assertThat(pfd.getFileDescriptor().valid()).isFalse();
     81   }
     82 
     83   @Test
     84   public void testAutoCloseInputStream() throws Exception {
     85     ParcelFileDescriptor pfd = ParcelFileDescriptor.open(file, -1);
     86     ParcelFileDescriptor.AutoCloseInputStream is = new ParcelFileDescriptor.AutoCloseInputStream(pfd);
     87     is.close();
     88     assertThat(pfd.getFileDescriptor().valid()).isFalse();
     89   }
     90 
     91   @Test
     92   public void testAutoCloseOutputStream() throws Exception {
     93     File f = new File(RuntimeEnvironment.application.getFilesDir(), "outfile");
     94     ParcelFileDescriptor pfd = ParcelFileDescriptor.open(f, -1);
     95     ParcelFileDescriptor.AutoCloseOutputStream os = new ParcelFileDescriptor.AutoCloseOutputStream(pfd);
     96     os.close();
     97     assertThat(pfd.getFileDescriptor().valid()).isFalse();
     98   }
     99 }
    100