mirror of
https://github.com/ankitects/anki.git
synced 2025-09-20 06:52:21 -04:00

see the following for background discussion: http://groups.google.com/group/ankisrs-users/browse_thread/thread/4db5e82f7dff74fb - change sched index to the more efficient gid, queue, due - drop the dynamic index support. as there's no no q/a cache anymore, it's cheap enough to hit the cards table directly, and we can't use the index in its new form. - drop order by clauses (see todo) - ensure there's always an active group. if users want to study all groups at once, they need to create a top level group. we do this because otherwise the 'top level group' that's active when everything is selected is not clear. to do: - new cards will appear in gid order, but the gid numbers don't reflect alphabetical sorting. we need to change the scheduling code so that it steps through each group in turn - likewise for the learn queue
89 lines
2.2 KiB
Python
89 lines
2.2 KiB
Python
# coding: utf-8
|
|
|
|
import time
|
|
from tests.shared import assertException, getEmptyDeck
|
|
from anki.consts import *
|
|
|
|
def test_op():
|
|
d = getEmptyDeck()
|
|
# should have no undo by default
|
|
assert not d.undoName()
|
|
# let's adjust a study option
|
|
d.save("studyopts")
|
|
d.conf['abc'] = 5
|
|
# it should be listed as undoable
|
|
assert d.undoName() == "studyopts"
|
|
# with about 5 minutes until it's clobbered
|
|
assert time.time() - d._lastSave < 1
|
|
# undoing should restore the old value
|
|
d.undo()
|
|
assert not d.undoName()
|
|
assert 'abc' not in d.conf
|
|
# an (auto)save will clear the undo
|
|
d.save("foo")
|
|
assert d.undoName() == "foo"
|
|
d.save()
|
|
assert not d.undoName()
|
|
# and a review will, too
|
|
d.save("add")
|
|
f = d.newFact()
|
|
f['Front'] = u"one"
|
|
d.addFact(f)
|
|
d.reset()
|
|
assert d.undoName() == "add"
|
|
c = d.sched.getCard()
|
|
d.sched.answerCard(c, 2)
|
|
assert d.undoName() == "Review"
|
|
|
|
def test_review():
|
|
d = getEmptyDeck()
|
|
d.conf['counts'] = COUNT_REMAINING
|
|
f = d.newFact()
|
|
f['Front'] = u"one"
|
|
d.addFact(f)
|
|
d.reset()
|
|
assert not d.undoName()
|
|
# answer
|
|
assert d.sched.counts() == (1, 0, 0)
|
|
c = d.sched.getCard()
|
|
assert c.queue == 0
|
|
assert c.grade == 0
|
|
d.sched.answerCard(c, 2)
|
|
assert d.sched.counts() == (0, 1, 0)
|
|
assert c.queue == 1
|
|
assert c.grade == 1
|
|
# undo
|
|
assert d.undoName()
|
|
d.undo()
|
|
d.reset()
|
|
assert d.sched.counts() == (1, 0, 0)
|
|
c.load()
|
|
assert c.queue == 0
|
|
assert c.grade == 0
|
|
assert not d.undoName()
|
|
# we should be able to undo multiple answers too
|
|
f['Front'] = u"two"
|
|
d.addFact(f)
|
|
d.reset()
|
|
assert d.sched.counts() == (2, 0, 0)
|
|
c = d.sched.getCard()
|
|
d.sched.answerCard(c, 2)
|
|
c = d.sched.getCard()
|
|
d.sched.answerCard(c, 2)
|
|
assert d.sched.counts() == (0, 2, 0)
|
|
d.undo()
|
|
d.reset()
|
|
assert d.sched.counts() == (1, 1, 0)
|
|
d.undo()
|
|
d.reset()
|
|
assert d.sched.counts() == (2, 0, 0)
|
|
# performing a normal op will clear the review queue
|
|
c = d.sched.getCard()
|
|
d.sched.answerCard(c, 2)
|
|
assert d.undoName() == "Review"
|
|
d.save("foo")
|
|
assert d.undoName() == "foo"
|
|
d.undo()
|
|
assert not d.undoName()
|
|
|
|
|