package com.uphyca.kitkat.storage;
import static org.fest.assertions.api.Assertions.assertThat;
import java.io.ByteArrayOutputStream;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.annotation.TargetApi;
import android.os.AsyncTask;
import android.os.Build;
import android.os.ParcelFileDescriptor;
import android.test.AndroidTestCase;
/**
* Created by masui on 11/8/13.
*/
public class ParcelFileDescriptorTest extends AndroidTestCase {
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
public void testThatPipeShouldWorkProperly() throws Exception {
final String givenData = "Hello, ParcelFileDescriptor.";
final ParcelFileDescriptor[] pipe = ParcelFileDescriptor.createPipe();
final ParcelFileDescriptor source = pipe[0];
final ParcelFileDescriptor sink = pipe[1];
final InputStream in = new FileInputStream(source.getFileDescriptor());
final OutputStream out = new ByteArrayOutputStream();
new AsyncTask<ParcelFileDescriptor, Void, Void>() {
@Override
protected Void doInBackground(ParcelFileDescriptor... params) {
//Simulates long periodic network operation
try {
Thread.sleep(1000L);
} catch (InterruptedException ignore) {
}
ParcelFileDescriptor pfd = params[0];
FileDescriptor fd = pfd.getFileDescriptor();
FileOutputStream out = new FileOutputStream(fd);
byte[] data = givenData.getBytes();
try {
out.write(data, 0, data.length);
out.close();
pfd.close();
} catch (IOException ignore) {
}
return null;
}
}.execute(sink);
final byte[] buffer = new byte[8192];
for (int count; (count = in.read(buffer)) > -1;) {
out.write(buffer, 0, count);
}
assertThat(out.toString()).isEqualTo(givenData);
}
}