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