package org.robolectric.shadows;
import android.os.ParcelFileDescriptor;
import org.robolectric.Shadows;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.lang.reflect.Constructor;
@Implements(ParcelFileDescriptor.class)
public class ShadowParcelFileDescriptor {
private RandomAccessFile file;
@Implementation
public static ParcelFileDescriptor open(File file, int mode) throws FileNotFoundException {
ParcelFileDescriptor pfd;
try {
Constructor<ParcelFileDescriptor> constructor = ParcelFileDescriptor.class.getDeclaredConstructor(FileDescriptor.class);
pfd = constructor.newInstance(new FileDescriptor());
} catch (Exception e) {
throw new RuntimeException(e);
}
Shadows.shadowOf(pfd).file = new RandomAccessFile(file, mode == ParcelFileDescriptor.MODE_READ_ONLY ? "r" : "rw");
return pfd;
}
@Implementation
public FileDescriptor getFileDescriptor() {
try {
return file.getFD();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Implementation
public long getStatSize() {
try {
return file.length();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Implementation
public void close() throws IOException {
file.close();
}
}