Skip to content

Commit

Permalink
test bury and suspend card before calling using js api similar to tog…
Browse files Browse the repository at this point in the history
…gle flag and mark card
  • Loading branch information
krmanik committed Oct 31, 2021
1 parent 6485c5d commit d24c950
Show file tree
Hide file tree
Showing 3 changed files with 121 additions and 1 deletion.
16 changes: 16 additions & 0 deletions AnkiDroid/src/main/java/com/ichi2/anki/AnkiDroidJsAPI.kt
Original file line number Diff line number Diff line change
Expand Up @@ -337,21 +337,37 @@ open class AnkiDroidJsAPI(private val activity: AbstractFlashcardViewer) {

@JavascriptInterface
fun ankiBuryCard(): Boolean {
if (!isInit(jsAPIConstants.BURY_CARD, jsAPIConstants.ankiJsErrorCodeBuryCard)) {
return false
}

return activity.buryCard()
}

@JavascriptInterface
fun ankiBuryNote(): Boolean {
if (!isInit(jsAPIConstants.BURY_NOTE, jsAPIConstants.ankiJsErrorCodeBuryNote)) {
return false
}

return activity.buryNote()
}

@JavascriptInterface
fun ankiSuspendCard(): Boolean {
if (!isInit(jsAPIConstants.SUSPEND_CARD, jsAPIConstants.ankiJsErrorCodeSuspendCard)) {
return false
}

return activity.suspendCard()
}

@JavascriptInterface
fun ankiSuspendNote(): Boolean {
if (!isInit(jsAPIConstants.SUSPEND_NOTE, jsAPIConstants.ankiJsErrorCodeSuspendNote)) {
return false
}

return activity.suspendNote()
}

Expand Down
25 changes: 25 additions & 0 deletions AnkiDroid/src/main/java/com/ichi2/anki/AnkiDroidJsAPIConstants.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,16 @@ class AnkiDroidJsAPIConstants {
@kotlin.jvm.JvmField
val ankiJsErrorCodeFlagCard: Int = 2

@kotlin.jvm.JvmField
val ankiJsErrorCodeBuryCard: Int = 3
@kotlin.jvm.JvmField
val ankiJsErrorCodeSuspendCard: Int = 4

@kotlin.jvm.JvmField
val ankiJsErrorCodeBuryNote: Int = 5
@kotlin.jvm.JvmField
val ankiJsErrorCodeSuspendNote: Int = 6

// js api developer contact
@kotlin.jvm.JvmField
var mCardSuppliedDeveloperContact = ""
Expand All @@ -41,10 +51,25 @@ class AnkiDroidJsAPIConstants {
@kotlin.jvm.JvmField
val TOGGLE_FLAG = "toggleFlag"

@kotlin.jvm.JvmField
val BURY_CARD = "buryCard"
@kotlin.jvm.JvmField
val BURY_NOTE = "buryNote"
@kotlin.jvm.JvmField
val SUSPEND_CARD = "suspendCard"
@kotlin.jvm.JvmField
val SUSPEND_NOTE = "suspendNote"

fun initApiMap(): HashMap<String, Boolean> {
val jsApiListMap = HashMap<String, Boolean>()
jsApiListMap[MARK_CARD] = false
jsApiListMap[TOGGLE_FLAG] = false

jsApiListMap[BURY_CARD] = false
jsApiListMap[BURY_NOTE] = false
jsApiListMap[SUSPEND_CARD] = false
jsApiListMap[SUSPEND_NOTE] = false

return jsApiListMap
}
}
81 changes: 80 additions & 1 deletion AnkiDroid/src/test/java/com/ichi2/anki/AnkiDroidJsAPITest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class AnkiDroidJsAPITest : RobolectricTest() {
data.put("developer", "[email protected]")

// this will be changed when new api added
val expected = "{\"markCard\":true,\"toggleFlag\":true}"
val expected = "{\"suspendNote\":true,\"markCard\":true,\"suspendCard\":true,\"buryCard\":true,\"toggleFlag\":true,\"buryNote\":true}"

waitForAsyncTasksToComplete()
assertThat(javaScriptFunction.init(data.toString()), equalTo(expected))
Expand Down Expand Up @@ -231,6 +231,85 @@ class AnkiDroidJsAPITest : RobolectricTest() {
reviewer.webView.evaluateJavascript(flagCardJs) { s -> assertThat(s, equalTo(1)) }
}

fun ankiBurySuspendTest() {
// js api test for bury and suspend notes and cards
// add five notes, four will be buried and suspended
// count number of notes, if buried or suspended then
// in scheduling the count will be less than previous scheduling
val col = col
val models = col.models
val decks = col.decks
val didA = addDeck("Test")
val basic = models.byName(AnkiDroidApp.getAppResources().getString(R.string.basic_model_name))
basic!!.put("did", didA)
addNoteUsingBasicModel("foo", "bar")
addNoteUsingBasicModel("baz", "bak")
addNoteUsingBasicModel("Anki", "Droid")
addNoteUsingBasicModel("Test Card", "Bury and Suspend Card")
addNoteUsingBasicModel("Test Note", "Bury and Suspend Note")
decks.select(didA)

val reviewer: Reviewer = startReviewer()

waitForAsyncTasksToComplete()

// ----------
// Bury Card
// ----------
var jsScript = createTestScript("AnkiDroidJS.ankiBuryCard();")
// call script to bury current card
reviewer.webView.evaluateJavascript(jsScript) { s -> assertThat(s, equalTo(true)) }

// count number of notes
assertThat(reviewer.mSched.cardCount(), equalTo(4))

// ----------
// Bury Note
// ----------
jsScript = createTestScript("AnkiDroidJS.ankiBuryNote();")
// call script to bury current note
reviewer.webView.evaluateJavascript(jsScript) { s -> assertThat(s, equalTo(true)) }

// count number of notes
assertThat(reviewer.mSched.cardCount(), equalTo(3))

// -------------
// Suspend Card
// -------------
jsScript = createTestScript("AnkiDroidJS.ankiSuspendCard();")
// call script to suspend current card
reviewer.webView.evaluateJavascript(jsScript) { s -> assertThat(s, equalTo(true)) }

// count number of notes
assertThat(reviewer.mSched.cardCount(), equalTo(2))

// -------------
// Suspend Note
// -------------
jsScript = createTestScript("AnkiDroidJS.ankiSuspendNote();")
// call script to suspend current note
reviewer.webView.evaluateJavascript(jsScript) { s -> assertThat(s, equalTo(true)) }

// count number of notes
assertThat(reviewer.mSched.cardCount(), equalTo(1))
}

private fun createTestScript(apiName: String): String {
// create js script for evaluating in webview
var script = "javascript:(function () {\n"

// add js api developer contract
script += "var jsApi = {\"version\" : \"0.0.1\", \"developer\" : \"[email protected]\"};\n"

// init JS API
script += "AnkiDroidJS.init(JSON.stringify(jsApi));\n"

// call js api
script += "$apiName\n})();"

return script
}

private fun startReviewer(): Reviewer {
return ReviewerTest.startReviewer(this)
}
Expand Down

0 comments on commit d24c950

Please sign in to comment.