package com.trovebox.android.test;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import com.trovebox.android.test.R;
import org.easymock.EasyMock;
import org.powermock.api.easymock.PowerMock;
import android.content.ContentValues;
import android.content.Intent;
import android.content.res.AssetManager;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import com.jayway.android.robotium.solo.Solo;
import com.trovebox.android.app.UploadActivity;
import com.trovebox.android.common.net.PhotosResponse;
import com.trovebox.android.common.net.UploadMetaData;
import com.trovebox.android.common.net.UploadResponse;
import com.trovebox.android.common.net.HttpEntityWithProgress.ProgressListener;
import com.trovebox.android.test.net.JSONUtils;
import com.trovebox.android.test.util.FileUtils;
public class UploadActivityTest extends MockedInstrumentationTestCase<UploadActivity> {
public UploadActivityTest() {
super(UploadActivity.class);
}
public void testNormalStartShouldShowDialog() throws IOException
{
Solo solo = new Solo(getInstrumentation(), getActivity());
solo.sleep(500); // Wait that dialog really is open
// This will check if the dialog is there
// Dialog has Title (Upload) and two items (Camera + Gallery)
assertEquals("Upload", solo.getText(0).getText().toString());
assertEquals("Camera", solo.getText(1).getText().toString());
assertEquals("Gallery", solo.getText(2).getText().toString());
assertFalse("Because of dialog, Upload button should not be found!",
solo.searchButton("Upload!"));
}
public void testShareIntent() throws Exception
{
AssetManager assetMgr = getInstrumentation().getContext().getAssets();
InputStream imageStream = assetMgr.open("android.jpg");
// InputStream imageStream =
// getInstrumentation().getContext().getResources()
// .openRawResource(R.raw.android);
File dir = new
File(Environment.getExternalStorageDirectory()
.getAbsolutePath()
+ "/data/com.trovebox.android");
if (!dir.exists())
{
assertTrue(dir.mkdirs());
}
File file = new File(dir, "test-android.jpg");
FileUtils.writeToFile(imageStream, file);
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE,
file.getName());
values.put(MediaStore.Images.Media.DATA,
file.getAbsolutePath());
values.put(MediaStore.Images.Media.DESCRIPTION,
"Image used for testing Trovebox Andorid application");
Uri fileUri = getInstrumentation()
.getTargetContext()
.getContentResolver()
.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
values);
// String uri =
// MediaStore.Images.Media.insertImage(getInstrumentation()
// .getTargetContext()
// .getContentResolver(), file.getAbsolutePath(), "Test",
// "Image used for testing Trovebox Andorid application");
try
{
Intent i = new Intent(Intent.ACTION_SEND);
i.putExtra(Intent.EXTRA_STREAM, fileUri);
setActivityIntent(i);
Solo solo = new Solo(getInstrumentation(), getActivity());
assertTrue("Dialog should not be there overlapping Upload button!",
solo.searchButton("Upload!"));
// Test Upload button press
PowerMock.reset(getApiMock());
getApiMock().getPhotos((String) EasyMock.notNull());
PowerMock.expectLastCall().andReturn(
new PhotosResponse(JSONUtils.getJson(
getInstrumentation().getContext(),
R.raw.json_photos_get_no_photos))).times(1);
getApiMock().uploadPhoto((File) EasyMock.notNull(),
(UploadMetaData)
EasyMock.notNull(),
EasyMock.anyObject(ProgressListener.class));
PowerMock
.expectLastCall()
.andReturn(
new UploadResponse(JSONUtils.getJson(
getInstrumentation().getContext(),
R.raw.json_photo_upload))).times(1);
PowerMock.replayAll();
solo.clickOnButton("Upload!");
CountDownLatch signal = new CountDownLatch(1);
signal.await(10, TimeUnit.SECONDS);
// solo.sleep(5000);
// solo.waitForDialogToClose(1000);
PowerMock.verifyAll();
} finally
{
getInstrumentation()
.getTargetContext().getContentResolver()
.delete(fileUri, null,
null);
}
}
// private Context getTestContext() throws Exception
// {
// return (Context) getClass().getMethod("getTestContext").invoke(this);
// }
}