diff --git a/MinimalBible/build.gradle b/MinimalBible/build.gradle index 390a785..7cc4df9 100644 --- a/MinimalBible/build.gradle +++ b/MinimalBible/build.gradle @@ -39,6 +39,10 @@ dependencies { // Handled by appcompat // 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 { @@ -71,6 +75,7 @@ android { packagingOptions { exclude 'META-INF/LICENSE.txt' + exclude 'LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/LICENSE' diff --git a/MinimalBible/src/main/java/org/bspeice/minimalbible/MinimalBible.java b/MinimalBible/src/main/java/org/bspeice/minimalbible/MinimalBible.java index e44c93f..70bfd31 100644 --- a/MinimalBible/src/main/java/org/bspeice/minimalbible/MinimalBible.java +++ b/MinimalBible/src/main/java/org/bspeice/minimalbible/MinimalBible.java @@ -60,4 +60,6 @@ public class MinimalBible extends Application { public void inject(Object o) { graph.inject(o); } + + public ObjectGraph getObjGraph() { return graph; } } diff --git a/MinimalBible/src/main/java/org/bspeice/minimalbible/activities/downloader/BookItemHolder.java b/MinimalBible/src/main/java/org/bspeice/minimalbible/activities/downloader/BookItemHolder.java index 3d1461c..b63e9d9 100644 --- a/MinimalBible/src/main/java/org/bspeice/minimalbible/activities/downloader/BookItemHolder.java +++ b/MinimalBible/src/main/java/org/bspeice/minimalbible/activities/downloader/BookItemHolder.java @@ -1,6 +1,5 @@ package org.bspeice.minimalbible.activities.downloader; -import android.util.Log; import android.view.View; import android.widget.ImageButton; import android.widget.RelativeLayout; @@ -55,14 +54,20 @@ public class BookItemHolder { @OnClick(R.id.download_ibtn_download) public void onDownloadItem(View v) { - Log.d("BookListAdapter", v.toString()); - displayProgress(0); // Can assume 0 since the download is now starting - // TODO: Write a unit test to make sure that this is called - displayProgress() assumes it + downloadManager.getDownloadBus().register(this); + downloadManager.getDownloadBus() + .post(new DownloadProgressEvent(DownloadProgressEvent.PROGRESS_BEGINNING, b)); // TODO: Kick off a service to actually do the downloading, rather than simulate 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 * @param progress The progress out of 360 (degrees of a circle) @@ -70,7 +75,7 @@ public class BookItemHolder { private void displayProgress(int progress) { - if (progress <= 0) { + if (progress == DownloadProgressEvent.PROGRESS_BEGINNING) { // Download starting RelativeLayout.LayoutParams acronymParams = (RelativeLayout.LayoutParams)acronym.getLayoutParams(); diff --git a/MinimalBible/src/main/java/org/bspeice/minimalbible/activities/downloader/manager/DownloadProgressEvent.java b/MinimalBible/src/main/java/org/bspeice/minimalbible/activities/downloader/manager/DownloadProgressEvent.java index 0170400..7182f27 100644 --- a/MinimalBible/src/main/java/org/bspeice/minimalbible/activities/downloader/manager/DownloadProgressEvent.java +++ b/MinimalBible/src/main/java/org/bspeice/minimalbible/activities/downloader/manager/DownloadProgressEvent.java @@ -3,12 +3,15 @@ package org.bspeice.minimalbible.activities.downloader.manager; 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 { private int progress; private Book b; + public static final int PROGRESS_COMPLETE = 100; + public static final int PROGRESS_BEGINNING = 0; + public DownloadProgressEvent(int progress, Book b) { this.progress = progress; this.b = b; diff --git a/MinimalBible/src/test/java/org/bspeice/minimalbible/test/DownloadActivityTest.java b/MinimalBible/src/test/java/org/bspeice/minimalbible/test/DownloadActivityTest.java index bc47f5c..f5d35ed 100644 --- a/MinimalBible/src/test/java/org/bspeice/minimalbible/test/DownloadActivityTest.java +++ b/MinimalBible/src/test/java/org/bspeice/minimalbible/test/DownloadActivityTest.java @@ -1,15 +1,72 @@ package org.bspeice.minimalbible.test; 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 */ 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() { 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!"); + } + } + }