Unit testing now working

Also demo test case for async testing.
This commit is contained in:
Bradlee Speice 2014-05-24 15:11:26 -04:00
parent bba77bb45a
commit 2c494edadc
5 changed files with 79 additions and 7 deletions

View File

@ -39,6 +39,10 @@ dependencies {
// Handled by appcompat // Handled by appcompat
// compile 'com.google.android:support-v4:r7' // compile 'com.google.android:support-v4:r7'
// And our unit testing needs some specific stuff (and specific stuff included again)
androidTestCompile 'junit:junit:4.11+'
androidTestProvided 'com.squareup.dagger:dagger-compiler:1.2.0'
} }
android { android {
@ -71,6 +75,7 @@ android {
packagingOptions { packagingOptions {
exclude 'META-INF/LICENSE.txt' exclude 'META-INF/LICENSE.txt'
exclude 'LICENSE.txt'
exclude 'META-INF/NOTICE.txt' exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE'

View File

@ -60,4 +60,6 @@ public class MinimalBible extends Application {
public void inject(Object o) { public void inject(Object o) {
graph.inject(o); graph.inject(o);
} }
public ObjectGraph getObjGraph() { return graph; }
} }

View File

@ -1,6 +1,5 @@
package org.bspeice.minimalbible.activities.downloader; package org.bspeice.minimalbible.activities.downloader;
import android.util.Log;
import android.view.View; import android.view.View;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
@ -55,14 +54,20 @@ public class BookItemHolder {
@OnClick(R.id.download_ibtn_download) @OnClick(R.id.download_ibtn_download)
public void onDownloadItem(View v) { public void onDownloadItem(View v) {
Log.d("BookListAdapter", v.toString()); downloadManager.getDownloadBus().register(this);
displayProgress(0); // Can assume 0 since the download is now starting downloadManager.getDownloadBus()
// TODO: Write a unit test to make sure that this is called - displayProgress() assumes it .post(new DownloadProgressEvent(DownloadProgressEvent.PROGRESS_BEGINNING, b));
// TODO: Kick off a service to actually do the downloading, rather than simulate // TODO: Kick off a service to actually do the downloading, rather than simulate
downloadManager.getDownloadBus().post(new DownloadProgressEvent(47, b)); downloadManager.getDownloadBus().post(new DownloadProgressEvent(47, b));
} }
public void onEventMainThread(DownloadProgressEvent event) {
if (event.getB().equals(this.b)) {
displayProgress((int) event.toCircular());
}
}
/** /**
* Display the current progress of this download * Display the current progress of this download
* @param progress The progress out of 360 (degrees of a circle) * @param progress The progress out of 360 (degrees of a circle)
@ -70,7 +75,7 @@ public class BookItemHolder {
private void displayProgress(int progress) { private void displayProgress(int progress) {
if (progress <= 0) { if (progress == DownloadProgressEvent.PROGRESS_BEGINNING) {
// Download starting // Download starting
RelativeLayout.LayoutParams acronymParams = RelativeLayout.LayoutParams acronymParams =
(RelativeLayout.LayoutParams)acronym.getLayoutParams(); (RelativeLayout.LayoutParams)acronym.getLayoutParams();

View File

@ -3,12 +3,15 @@ package org.bspeice.minimalbible.activities.downloader.manager;
import org.crosswire.jsword.book.Book; import org.crosswire.jsword.book.Book;
/** /**
* Created by bspeice on 5/19/14. * Used for notifying that a book's download progress is ongoing
*/ */
public class DownloadProgressEvent { public class DownloadProgressEvent {
private int progress; private int progress;
private Book b; private Book b;
public static final int PROGRESS_COMPLETE = 100;
public static final int PROGRESS_BEGINNING = 0;
public DownloadProgressEvent(int progress, Book b) { public DownloadProgressEvent(int progress, Book b) {
this.progress = progress; this.progress = progress;
this.b = b; this.b = b;

View File

@ -1,15 +1,72 @@
package org.bspeice.minimalbible.test; package org.bspeice.minimalbible.test;
import android.test.InstrumentationTestCase; import android.test.InstrumentationTestCase;
import android.test.suitebuilder.annotation.SmallTest; import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import org.bspeice.minimalbible.MinimalBible;
import org.bspeice.minimalbible.MinimalBibleModules;
import org.bspeice.minimalbible.R;
import org.bspeice.minimalbible.activities.downloader.BookItemHolder;
import org.bspeice.minimalbible.activities.downloader.manager.DownloadManager;
import org.bspeice.minimalbible.activities.downloader.manager.DownloadProgressEvent;
import org.crosswire.jsword.book.Book;
import org.crosswire.jsword.book.install.Installer;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import javax.inject.Inject;
import dagger.Module;
/** /**
* Tests for the Download activity * Tests for the Download activity
*/ */
public class DownloadActivityTest extends InstrumentationTestCase { public class DownloadActivityTest extends InstrumentationTestCase {
@Module(addsTo = MinimalBibleModules.class,
injects = DownloadActivityTest.class)
public static class DownloadActivityTestModule {}
@Inject
DownloadManager dm;
public void setUp() {
MinimalBible.getApplication().getObjGraph()
.plus(DownloadActivityTestModule.class).inject(this);
}
public void testBasicAssertion() { public void testBasicAssertion() {
assertEquals(true, true); assertEquals(true, true);
} }
/**
* When we start a download, make sure a progress event of 0 is triggered.
*/
public void testInitialProgressEventOnDownload() throws InterruptedException {
final CountDownLatch signal = new CountDownLatch(1);
Installer i = (Installer) dm.getInstallers().values().toArray()[0];
Book testBook = i.getBooks().get(0);
View dummyView = LayoutInflater.from(MinimalBible.getApplication())
.inflate(R.layout.list_download_items, null);
BookItemHolder holder = new BookItemHolder(dummyView, testBook);
dm.getDownloadBus().register(new Object() {
public void onEvent(DownloadProgressEvent event) {
Log.d("testInitial", Integer.toString(event.getProgress()));
if (event.getProgress() == 0) {
signal.countDown();
}
}
});
holder.onDownloadItem(dummyView);
signal.await(10, TimeUnit.SECONDS);
if (signal.getCount() != 0) {
fail("Event did not trigger!");
}
}
} }