Search in sources :

Example 21 with AbstractSched

use of com.ichi2.libanki.sched.AbstractSched in project Anki-Android by ankidroid.

the class AbstractSchedTest method siblingCorrectlyBuried.

@Test
public void siblingCorrectlyBuried() {
    // #6903
    Collection col = getCol();
    AbstractSched sched = col.getSched();
    DeckConfig dconf = col.getDecks().getConf(1);
    assertThat(dconf, notNullValue());
    dconf.getJSONObject("new").put("bury", true);
    getCol().getDecks().save(dconf);
    final int nbNote = 2;
    Note[] notes = new Note[nbNote];
    for (int i = 0; i < nbNote; i++) {
        Note note = addNoteUsingBasicAndReversedModel("front", "back");
        notes[i] = note;
    }
    col.reset();
    for (int i = 0; i < nbNote; i++) {
        Card card = sched.getCard();
        Counts counts = sched.counts(card);
        // imitate what the reviewer does
        sched.setCurrentCard(card);
        // Actual number of new card.
        assertThat(counts.getNew(), is(greaterThan(nbNote - i)));
        // Maximal number potentially shown,
        assertThat(counts.getNew(), is(lessThanOrEqualTo(nbNote * 2 - i)));
        // because decrementing does not consider burying sibling
        assertEquals(0, counts.getLrn());
        assertEquals(0, counts.getRev());
        assertEquals(notes[i].firstCard().getId(), card.getId());
        assertEquals(Consts.QUEUE_TYPE_NEW, card.getQueue());
        sched.answerCard(card, sched.answerButtons(card));
    }
    Card card = sched.getCard();
    assertNull(card);
}
Also used : Note(com.ichi2.libanki.Note) Collection(com.ichi2.libanki.Collection) DeckConfig(com.ichi2.libanki.DeckConfig) Card(com.ichi2.libanki.Card) RobolectricTest(com.ichi2.anki.RobolectricTest) Test(org.junit.Test)

Example 22 with AbstractSched

use of com.ichi2.libanki.sched.AbstractSched in project Anki-Android by ankidroid.

the class AbstractSchedTest method undoAndRedo.

protected void undoAndRedo(boolean preload) {
    Collection col = getCol();
    DeckConfig conf = col.getDecks().confForDid(1);
    conf.getJSONObject("new").put("delays", new JSONArray(new double[] { 1, 3, 5, 10 }));
    col.getDecks().save(conf);
    col.set_config("collapseTime", 20 * 60);
    AbstractSched sched = col.getSched();
    addNoteUsingBasicModel("foo", "bar");
    col.reset();
    advanceRobolectricLooper();
    Card card = sched.getCard();
    assertNotNull(card);
    assertEquals(new Counts(1, 0, 0), sched.counts(card));
    if (preload) {
        sched.preloadNextCard();
    }
    sched.answerCard(card, sched.getGoodNewButton());
    advanceRobolectricLooper();
    card = sched.getCard();
    assertNotNull(card);
    assertEquals(new Counts(0, (schedVersion == 1) ? 3 : 1, 0), sched.counts(card));
    if (preload) {
        sched.preloadNextCard();
    }
    sched.answerCard(card, sched.getGoodNewButton());
    advanceRobolectricLooper();
    card = sched.getCard();
    assertNotNull(card);
    assertEquals(new Counts(0, (schedVersion == 1) ? 2 : 1, 0), sched.counts(card));
    if (preload) {
        sched.preloadNextCard();
        advanceRobolectricLooper();
    }
    assertNotNull(card);
    card = nonTaskUndo(col);
    advanceRobolectricLooper();
    assertNotNull(card);
    assertEquals(new Counts(0, (schedVersion == 1) ? 3 : 1, 0), sched.counts(card));
    sched.count();
    if (preload) {
        sched.preloadNextCard();
        advanceRobolectricLooper();
    }
    sched.answerCard(card, sched.getGoodNewButton());
    advanceRobolectricLooper();
    card = sched.getCard();
    assertNotNull(card);
    if (preload) {
        sched.preloadNextCard();
    }
    assertEquals(new Counts(0, (schedVersion == 1) ? 2 : 1, 0), sched.counts(card));
    assertNotNull(card);
}
Also used : JSONArray(com.ichi2.utils.JSONArray) Collection(com.ichi2.libanki.Collection) DeckConfig(com.ichi2.libanki.DeckConfig) Card(com.ichi2.libanki.Card)

Example 23 with AbstractSched

use of com.ichi2.libanki.sched.AbstractSched in project Anki-Android by ankidroid.

the class AbstractSchedTest method ensureUndoCorrectCounts.

@Test
public void ensureUndoCorrectCounts() {
    Collection col = getCol();
    AbstractSched sched = col.getSched();
    DeckConfig dconf = col.getDecks().getConf(1);
    assertThat(dconf, notNullValue());
    dconf.getJSONObject("new").put("perDay", 10);
    col.getDecks().save(dconf);
    for (int i = 0; i < 20; i++) {
        Note note = col.newNote();
        note.setField(0, "a");
        col.addNote(note);
    }
    col.reset();
    assertThat(col.cardCount(), is(20));
    assertThat(sched.newCount(), is(10));
    Card card = sched.getCard();
    assertThat(sched.newCount(), is(9));
    assertThat(sched.counts(card).getNew(), is(10));
    sched.answerCard(card, sched.getGoodNewButton());
    sched.getCard();
    nonTaskUndo(col);
    card.load();
    assertThat(sched.newCount(), is(9));
    assertThat(sched.counts(card).getNew(), is(10));
}
Also used : Note(com.ichi2.libanki.Note) Collection(com.ichi2.libanki.Collection) DeckConfig(com.ichi2.libanki.DeckConfig) Card(com.ichi2.libanki.Card) RobolectricTest(com.ichi2.anki.RobolectricTest) Test(org.junit.Test)

Example 24 with AbstractSched

use of com.ichi2.libanki.sched.AbstractSched in project Anki-Android by ankidroid.

the class ContentProviderTest method testQueryCardFromCertainDeck.

/**
 * Test that query for the next card in the schedule returns a valid result WITH a deck selector
 */
@Test
public synchronized void testQueryCardFromCertainDeck() {
    long deckToTest = mTestDeckIds.get(0);
    String deckSelector = "deckID=?";
    String[] deckArguments = { Long.toString(deckToTest) };
    Collection col = getCol();
    AbstractSched sched = col.getSched();
    long selectedDeckBeforeTest = col.getDecks().selected();
    // select Default deck
    col.getDecks().select(1);
    Cursor reviewInfoCursor = getContentResolver().query(FlashCardsContract.ReviewInfo.CONTENT_URI, null, deckSelector, deckArguments, null);
    assertNotNull(reviewInfoCursor);
    assertEquals("Check that we actually received one card", 1, reviewInfoCursor.getCount());
    try {
        reviewInfoCursor.moveToFirst();
        int cardOrd = reviewInfoCursor.getInt(reviewInfoCursor.getColumnIndex(FlashCardsContract.ReviewInfo.CARD_ORD));
        long noteID = reviewInfoCursor.getLong(reviewInfoCursor.getColumnIndex(FlashCardsContract.ReviewInfo.NOTE_ID));
        assertEquals("Check that the selected deck has not changed", 1, col.getDecks().selected());
        col.getDecks().select(deckToTest);
        Card nextCard = null;
        for (int i = 0; i < 10; i++) {
            // minimizing fails, when sched.reset() randomly chooses between multiple cards
            col.reset();
            nextCard = sched.getCard();
            if (nextCard != null && nextCard.note().getId() == noteID && nextCard.getOrd() == cardOrd)
                break;
            // Reset counts is executed in background.
            try {
                Thread.sleep(500);
            } catch (Exception e) {
                Timber.e(e);
            }
        }
        assertNotNull("Check that there actually is a next scheduled card", nextCard);
        assertEquals("Check that received card and actual card have same note id", nextCard.note().getId(), noteID);
        assertEquals("Check that received card and actual card have same card ord", nextCard.getOrd(), cardOrd);
    } finally {
        reviewInfoCursor.close();
    }
    col.getDecks().select(selectedDeckBeforeTest);
}
Also used : AbstractSched(com.ichi2.libanki.sched.AbstractSched) Collection(com.ichi2.libanki.Collection) Cursor(android.database.Cursor) ConfirmModSchemaException(com.ichi2.anki.exception.ConfirmModSchemaException) Card(com.ichi2.libanki.Card) Test(org.junit.Test)

Example 25 with AbstractSched

use of com.ichi2.libanki.sched.AbstractSched in project Anki-Android by ankidroid.

the class ContentProviderTest method testQueryNextCard.

/**
 * Test that query for the next card in the schedule returns a valid result without any deck selector
 */
@Test
public void testQueryNextCard() {
    Collection col = getCol();
    AbstractSched sched = col.getSched();
    Cursor reviewInfoCursor = getContentResolver().query(FlashCardsContract.ReviewInfo.CONTENT_URI, null, null, null, null);
    assertNotNull(reviewInfoCursor);
    assertEquals("Check that we actually received one card", 1, reviewInfoCursor.getCount());
    reviewInfoCursor.moveToFirst();
    int cardOrd = reviewInfoCursor.getInt(reviewInfoCursor.getColumnIndex(FlashCardsContract.ReviewInfo.CARD_ORD));
    long noteID = reviewInfoCursor.getLong(reviewInfoCursor.getColumnIndex(FlashCardsContract.ReviewInfo.NOTE_ID));
    Card nextCard = null;
    for (int i = 0; i < 10; i++) {
        // minimizing fails, when sched.reset() randomly chooses between multiple cards
        col.reset();
        nextCard = sched.getCard();
        TaskManager.waitToFinish();
        if (nextCard != null && nextCard.note().getId() == noteID && nextCard.getOrd() == cardOrd)
            break;
        TaskManager.waitToFinish();
    }
    assertNotNull("Check that there actually is a next scheduled card", nextCard);
    assertEquals("Check that received card and actual card have same note id", nextCard.note().getId(), noteID);
    assertEquals("Check that received card and actual card have same card ord", nextCard.getOrd(), cardOrd);
}
Also used : AbstractSched(com.ichi2.libanki.sched.AbstractSched) Collection(com.ichi2.libanki.Collection) Cursor(android.database.Cursor) Card(com.ichi2.libanki.Card) Test(org.junit.Test)

Aggregations

Card (com.ichi2.libanki.Card)28 Collection (com.ichi2.libanki.Collection)28 Test (org.junit.Test)23 AbstractSched (com.ichi2.libanki.sched.AbstractSched)19 RobolectricTest (com.ichi2.anki.RobolectricTest)18 Note (com.ichi2.libanki.Note)12 DeckConfig (com.ichi2.libanki.DeckConfig)9 JSONObject (com.ichi2.utils.JSONObject)9 Deck (com.ichi2.libanki.Deck)5 JSONArray (com.ichi2.utils.JSONArray)5 Cursor (android.database.Cursor)4 DB (com.ichi2.libanki.DB)4 Model (com.ichi2.libanki.Model)4 Matchers.containsString (org.hamcrest.Matchers.containsString)4 Models (com.ichi2.libanki.Models)3 Undoable (com.ichi2.libanki.Undoable)3 Sched (com.ichi2.libanki.sched.Sched)3 SchedV2 (com.ichi2.libanki.sched.SchedV2)3 JSONException (com.ichi2.utils.JSONException)3 SuppressLint (android.annotation.SuppressLint)2