Get Robolectric test support working!

This commit is contained in:
Bradlee Speice 2015-02-17 22:44:04 -05:00
parent 3ce3d16489
commit 71fb362ffe
5 changed files with 49 additions and 6 deletions

View File

@ -6,6 +6,7 @@ apply plugin: 'com.github.kt3k.coveralls'
evaluationDependsOn(":app") evaluationDependsOn(":app")
buildscript { buildscript {
ext.kotlin_version = '0.10.770'
repositories { repositories {
mavenCentral() mavenCentral()
} }
@ -13,6 +14,7 @@ buildscript {
dependencies { dependencies {
// Version lock for https://github.com/kt3k/coveralls-gradle-plugin/issues/27 // Version lock for https://github.com/kt3k/coveralls-gradle-plugin/issues/27
classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.0.1x' classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.0.1x'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
} }
} }
@ -20,6 +22,7 @@ repositories {
maven { maven {
url 'http://repository.jetbrains.com/repo' url 'http://repository.jetbrains.com/repo'
} }
mavenCentral()
} }
// TODO: Make sure we test against the Debug variant // TODO: Make sure we test against the Debug variant
@ -51,9 +54,11 @@ dependencies {
testCompile firstVariant.javaCompile.classpath testCompile firstVariant.javaCompile.classpath
testCompile firstVariant.javaCompile.outputs.files testCompile firstVariant.javaCompile.outputs.files
testCompile files(androidModule.plugins.findPlugin("com.android.application").getBootClasspath()) testCompile files(androidModule.plugins.findPlugin("com.android.application").getBootClasspath())
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
} }
def buildExcludeTree(path, excludes) { def buildExcludeTree(path, excludes) {
//noinspection GroovyAssignabilityCheck
def tree = fileTree(path).exclude(excludes) def tree = fileTree(path).exclude(excludes)
tree tree
} }
@ -87,6 +92,6 @@ coveralls {
} }
tasks.withType(Test) { tasks.withType(Test) {
scanForTestClasses = false scanForTestClasses = true
includes = testIncludes includes = testIncludes
} }

View File

@ -0,0 +1,31 @@
package org.bspeice.minimalbible.activity.search;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import static org.junit.Assert.assertNotNull;
/**
* Right now this is the only Robolectric test. Some clarifications on this should be made:
* There's an ongoing issue with the ActionBarDrawerToggle, meaning that the BasicSearch
* activity is the only one eligible for testing
* (https://github.com/robolectric/robolectric/issues/1424)
* <p/>
* Additionally, Robolectric only supports up to Jellybean, which is why the emulateSdk.
* Finally, in Gradle, tests run relative to app-test, whereas the IDE may try and run
* things in the project root. Be careful when changing the manifest location.
*/
@RunWith(RobolectricTestRunner.class)
@Config(emulateSdk = 18, manifest = "../app/src/main/AndroidManifest.xml")
public class BasicSearchTest {
@Test
public void testBuildActivity() {
BasicSearch activity = Robolectric.buildActivity(BasicSearch.class)
.create().get();
assertNotNull(activity);
}
}

View File

@ -18,7 +18,7 @@ public class SearchModules {
@Provides @Provides
SearchProvider searchProvider(@Named("MainBook") Book book, SearchProvider searchProvider(@Named("MainBook") Book book,
IndexManager indexManager) { IndexManager indexManager) {
return new SearchProvider(book, indexManager); return new SearchProvider(indexManager, book);
} }

View File

@ -10,27 +10,31 @@ import org.crosswire.jsword.index.IndexManager
* This is the entry point for handling the actual bible search. Likely will support * This is the entry point for handling the actual bible search. Likely will support
* an "advanced" search in the future, but for now, basicTextSearch is what you get. * an "advanced" search in the future, but for now, basicTextSearch is what you get.
*/ */
class SearchProvider(val b: Book, val indexManager: IndexManager) { class SearchProvider(val indexManager: IndexManager, val b: Book?) {
val defaultSearchType = SearchType.ANY_WORDS val defaultSearchType = SearchType.ANY_WORDS
[suppress("UNUSED_PARAMETER")] [suppress("UNUSED_PARAMETER")]
public fun basicTextSearch(text: String): List<Verse> { public fun basicTextSearch(text: String): List<Verse> {
if (!isSearchAvailable()) { if (!isSearchAvailable()) {
Log.w("SearchProvider", "Search unavailable, index status of ${b.getInitials()}: ${b.getIndexStatus()}") Log.w("SearchProvider", "Search unavailable, index status of ${b?.getInitials()}: ${b?.getIndexStatus()}")
return listOf() return listOf()
} }
val searchText = defaultSearchType decorate text val searchText = defaultSearchType decorate text
val results = b find searchText // We already checked for null in isSearchAvailable(), but Kotlin
// doesn't keep track of that (yet)
val results = b!!.find(searchText)
return results map { it as Verse } return results map { it as Verse }
} }
/** /**
* Handler to check if the index is available - because it doesn't * Handler to check if the index is available - because it doesn't
* seem to register itself properly in the book metadata * seem to register itself properly in the book metadata.
* This check MUST guarantee that the book is not null.
*/ */
public fun isSearchAvailable(): Boolean = public fun isSearchAvailable(): Boolean =
b != null &&
indexManager isIndexed b indexManager isIndexed b
} }

View File

@ -0,0 +1,3 @@
# suppress inspection "UnusedProperty" for whole file
android.library.reference.1=../../build/intermediates/exploded-aar/com.android.support/appcompat-v7/21.0.3
android.library.reference.2=../../build/intermediates/exploded-aar/com.android.support/support-v4/21.0.3