blob: 3f0a82aafd864ffe5f30212bf61ea41ab7ec1447 [file] [log] [blame]
package org.robolectric.shadows;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assume.assumeTrue;
import static org.robolectric.shadows.ShadowArscAssetManager.isLegacyAssetManager;
import android.os.ParcelFileDescriptor;
import java.io.File;
import java.io.FileOutputStream;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class)
public class ShadowParcelFileDescriptorTest {
private File file;
private File readOnlyFile;
@Before
public void setup() throws Exception {
assumeTrue(isLegacyAssetManager());
file = new File(RuntimeEnvironment.application.getFilesDir(), "test");
FileOutputStream os = new FileOutputStream(file);
os.close();
readOnlyFile = new File(RuntimeEnvironment.application.getFilesDir(), "test_readonly");
os = new FileOutputStream(readOnlyFile);
os.close();
readOnlyFile.setReadOnly();
}
@Test
public void testOpens() throws Exception {
ParcelFileDescriptor pfd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_WRITE);
assertThat(pfd).isNotNull();
assertThat(pfd.getFileDescriptor().valid()).isTrue();
pfd.close();
}
@Test
public void testOpens_readOnlyFile() throws Exception {
ParcelFileDescriptor pfd = ParcelFileDescriptor.open(readOnlyFile, ParcelFileDescriptor.MODE_READ_ONLY);
assertThat(pfd).isNotNull();
assertThat(pfd.getFileDescriptor().valid()).isTrue();
pfd.close();
}
@Test
public void testOpens_canWriteWritableFile() throws Exception {
ParcelFileDescriptor pfd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_WRITE);
assertThat(pfd).isNotNull();
assertThat(pfd.getFileDescriptor().valid()).isTrue();
FileOutputStream os = new FileOutputStream(pfd.getFileDescriptor());
os.write(5);
os.close();
}
@Test
public void testStatSize_emptyFile() throws Exception {
ParcelFileDescriptor pfd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_WRITE);
assertThat(pfd).isNotNull();
assertThat(pfd.getFileDescriptor().valid()).isTrue();
assertThat(pfd.getStatSize()).isEqualTo(0);
pfd.close();
}
@Test
public void testStatSize_writtenFile() throws Exception {
ParcelFileDescriptor pfd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_WRITE);
assertThat(pfd).isNotNull();
assertThat(pfd.getFileDescriptor().valid()).isTrue();
FileOutputStream os = new FileOutputStream(pfd.getFileDescriptor());
os.write(5);
assertThat(pfd.getStatSize()).isEqualTo(1); // One byte.
os.close();
}
@Test
public void testCloses() throws Exception {
ParcelFileDescriptor pfd = ParcelFileDescriptor.open(file, -1);
pfd.close();
assertThat(pfd.getFileDescriptor().valid()).isFalse();
}
@Test
public void testAutoCloseInputStream() throws Exception {
ParcelFileDescriptor pfd = ParcelFileDescriptor.open(file, -1);
ParcelFileDescriptor.AutoCloseInputStream is = new ParcelFileDescriptor.AutoCloseInputStream(pfd);
is.close();
assertThat(pfd.getFileDescriptor().valid()).isFalse();
}
@Test
public void testAutoCloseOutputStream() throws Exception {
File f = new File(RuntimeEnvironment.application.getFilesDir(), "outfile");
ParcelFileDescriptor pfd = ParcelFileDescriptor.open(f, -1);
ParcelFileDescriptor.AutoCloseOutputStream os = new ParcelFileDescriptor.AutoCloseOutputStream(pfd);
os.close();
assertThat(pfd.getFileDescriptor().valid()).isFalse();
}
}