mirror of
https://github.com/MinimalBible/MinimalBible
synced 2025-07-07 00:34:42 -04:00
Can't fix tests, fix application instead
See documentation for more information on why I can't fix the tests to actually guarantee anything.
This commit is contained in:
@ -17,8 +17,6 @@ import org.crosswire.jsword.book.install.Installer;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@ -31,8 +29,13 @@ import rx.Observable;
|
||||
import rx.functions.Action1;
|
||||
import rx.functions.Func1;
|
||||
|
||||
import static com.jayway.awaitility.Awaitility.await;
|
||||
|
||||
/**
|
||||
* Test the InstalledManager
|
||||
* Currently due to limitations with JSword (which I'm currently investigating) you can't delete
|
||||
* books without restarting the application. That is, if you install it, there must be a restart
|
||||
* in between it being deleted. Unfortunately, that means that this TestCase really can't guarantee
|
||||
* much, since I can't install a book at runtime to be removed.
|
||||
*/
|
||||
public class InstalledManagerTest extends TestCase implements Injector {
|
||||
ObjectGraph mObjectGraph;
|
||||
|
||||
@ -68,8 +71,6 @@ public class InstalledManagerTest extends TestCase implements Injector {
|
||||
}
|
||||
|
||||
@Inject InstalledManager iM;
|
||||
@Inject BookDownloadManager bDM;
|
||||
@Inject RefreshManager rM;
|
||||
@Inject Books installedBooks;
|
||||
|
||||
@Override
|
||||
@ -82,41 +83,26 @@ public class InstalledManagerTest extends TestCase implements Injector {
|
||||
mObjectGraph = ObjectGraph.create(new IMTestModules(this));
|
||||
mObjectGraph.inject(this);
|
||||
|
||||
// Guarantee something is installed
|
||||
// Unfortunately, unless something is already installed, we can't actually remove anything
|
||||
int count = getInstalledBooks().count().toBlocking().first();
|
||||
|
||||
if (count <= 0) {
|
||||
Log.i("InstalledManagerTest", "Nothing installed!");
|
||||
final Book toInstall = rM.getAvailableModulesFlattened()
|
||||
.toBlocking().first();
|
||||
bDM.installBook(toInstall);
|
||||
|
||||
await().atMost(30, TimeUnit.SECONDS)
|
||||
.until(new Callable<Boolean>() {
|
||||
@Override
|
||||
public Boolean call() throws Exception {
|
||||
return installedBooks.getBooks()
|
||||
.contains(toInstall);
|
||||
}
|
||||
});
|
||||
Log.e("setUp", Boolean.toString(toInstall.getDriver().isDeletable(toInstall)));
|
||||
Log.e("setUp", "Found the book!: " + toInstall.getInitials());
|
||||
Log.w("InstalledManagerTest", "No books available, test can not guarantee anything.");
|
||||
}
|
||||
}
|
||||
|
||||
public Observable<Book> getInstalledBooks() {
|
||||
/* The golden copy for testing of what's installed.
|
||||
NOTE: Currently, I have yet to find a guaranteed way to know if a book
|
||||
is installed or not. So while the test cases are semantically correct,
|
||||
nothing is actually proven until I can guarantee this list is correct.
|
||||
NOTE: Currently, I have yet to find a guaranteed way to immediately delete
|
||||
a book that is freshly installed. While the tests are semantically correct, unfortunately,
|
||||
this test case specifically doesn't guarantee much of anything.
|
||||
*/
|
||||
// TODO: Guarantee that we return newly-installed books
|
||||
return Observable.from(installedBooks.getBooks())
|
||||
.filter(new Func1<Book, Boolean>() {
|
||||
@Override
|
||||
public Boolean call(Book book) {
|
||||
// Not sure why, but this book can't be deleted...
|
||||
return !book.getInitials().equals("ot1nt2");
|
||||
return book.getDriver().isDeletable(book);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -162,6 +148,8 @@ public class InstalledManagerTest extends TestCase implements Injector {
|
||||
});
|
||||
|
||||
iM.removeBook(book);
|
||||
await().untilTrue(didRemove);
|
||||
if (!didRemove.get()) {
|
||||
Log.w("testRemoveBook", "Could not remove book, not necessarily fatal.");
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user