def test_export_anki_due(): deck = getEmptyDeck() f = deck.newNote() f['Front'] = u"foo" deck.addNote(f) deck.crt -= 86400 * 10 deck.sched.reset() c = deck.sched.getCard() deck.sched.answerCard(c, 2) deck.sched.answerCard(c, 2) # should have ivl of 1, due on day 11 assert c.ivl == 1 assert c.due == 11 assert deck.sched.today == 10 assert c.due - deck.sched.today == 1 # export e = AnkiExporter(deck) e.includeSched = True newname = unicode(tempfile.mkstemp(prefix="ankitest", suffix=".anki2")[1]) os.unlink(newname) e.exportInto(newname) # importing into a new deck, the due date should be equivalent deck2 = getEmptyDeck() imp = Anki2Importer(deck2, newname) imp.run() c = deck2.getCard(c.id) deck2.sched.reset() assert c.due - deck2.sched.today == 1
def test_export_anki_due(): deck = getEmptyDeck() f = deck.newNote() f['Front'] = u"foo" deck.addNote(f) deck.crt -= 86400*10 deck.sched.reset() c = deck.sched.getCard() deck.sched.answerCard(c, 2) deck.sched.answerCard(c, 2) # should have ivl of 1, due on day 11 assert c.ivl == 1 assert c.due == 11 assert deck.sched.today == 10 assert c.due - deck.sched.today == 1 # export e = AnkiExporter(deck) e.includeSched = True newname = unicode(tempfile.mkstemp(prefix="ankitest", suffix=".anki2")[1]) os.unlink(newname) e.exportInto(newname) # importing into a new deck, the due date should be equivalent deck2 = getEmptyDeck() imp = Anki2Importer(deck2, newname) imp.run() c = deck2.getCard(c.id) deck2.sched.reset() assert c.due - deck2.sched.today == 1
def test_changes(): d = getEmptyDeck() assert d.media._changed() def added(): return d.media.db.execute("select fname from log where type = 0") assert not list(added()) assert not list(d.media.removed()) # add a file dir = tempfile.mkdtemp(prefix="anki") path = os.path.join(dir, u"foo.jpg") open(path, "w").write("hello") time.sleep(1) path = d.media.addFile(path) # should have been logged d.media.findChanges() assert list(added()) assert not list(d.media.removed()) # if we modify it, the cache won't notice time.sleep(1) open(path, "w").write("world") assert len(list(added())) == 1 assert not list(d.media.removed()) # but if we add another file, it will time.sleep(1) open(path+"2", "w").write("yo") d.media.findChanges() assert len(list(added())) == 2 assert not list(d.media.removed()) # deletions should get noticed too time.sleep(1) os.unlink(path+"2") d.media.findChanges() assert len(list(added())) == 1 assert len(list(d.media.removed())) == 1
def test_rename(): d = getEmptyDeck() # put a file into it file = unicode(os.path.join(testDir, "support/fake.png")) d.media.addFile(file) new = d.path.replace(".anki", "2.anki") d.rename(new)
def test_strings(): d = getEmptyDeck() mf = d.media.filesInStr mid = d.models.models.keys()[0] assert mf(mid, "aoeu") == [] assert mf(mid, "aoeu<img src='foo.jpg'>ao") == ["foo.jpg"] assert mf(mid, "aoeu<img src='foo.jpg' style='test'>ao") == ["foo.jpg"] assert mf(mid, "aoeu<img src='foo.jpg'><img src=\"bar.jpg\">ao") == [ "foo.jpg", "bar.jpg" ] assert mf(mid, "aoeu<img src=foo.jpg style=bar>ao") == ["foo.jpg"] assert mf(mid, "<img src=one><img src=two>") == ["one", "two"] assert mf(mid, "aoeu<img src=\"foo.jpg\">ao") == ["foo.jpg"] assert mf(mid, "aoeu<img src=\"foo.jpg\"><img class=yo src=fo>ao") == [ "foo.jpg", "fo" ] assert mf(mid, "aou[sound:foo.mp3]aou") == ["foo.mp3"] sp = d.media.strip assert sp("aoeu") == "aoeu" assert sp("aoeu[sound:foo.mp3]aoeu") == "aoeuaoeu" assert sp("a<img src=yo>oeu") == "aoeu" es = d.media.escapeImages assert es("aoeu") == "aoeu" assert es("<img src='http://foo.com'>") == "<img src='http://foo.com'>" assert es('<img src="foo bar.jpg">') == '<img src="foo%20bar.jpg">'
def setup1(): global deck deck = getEmptyDeck() f = deck.newNote() f['Front'] = u"foo"; f['Back'] = u"bar"; f.tags = ["tag", "tag2"] deck.addNote(f) # with a different deck f = deck.newNote() f['Front'] = u"baz"; f['Back'] = u"qux" f.model()['did'] = deck.decks.id("new deck") deck.addNote(f)
def test_illegal(): d = getEmptyDeck() aString = u"a:b|cd\\e/f\0g*h" good = u"abcdefgh" assert d.media.stripIllegal(aString) == good for c in aString: bad = d.media.hasIllegal("somestring"+c+"morestring") if bad: assert(c not in good) else: assert(c in good)
def test_add(): d = getEmptyDeck() dir = tempfile.mkdtemp(prefix="anki") path = os.path.join(dir, "foo.jpg") open(path, "w").write("hello") # new file, should preserve name assert d.media.addFile(path) == "foo.jpg" # adding the same file again should not create a duplicate assert d.media.addFile(path) == "foo.jpg" # but if it has a different md5, it should open(path, "w").write("world") assert d.media.addFile(path) == "foo (1).jpg"
def setup1(): global deck deck = getEmptyDeck() f = deck.newNote() f['Front'] = u"foo" f['Back'] = u"bar" f.tags = ["tag", "tag2"] deck.addNote(f) # with a different deck f = deck.newNote() f['Front'] = u"baz" f['Back'] = u"qux" f.model()['did'] = deck.decks.id("new deck") deck.addNote(f)
def test_strings(): d = getEmptyDeck() mf = d.media.mediaFiles assert mf("aoeu") == [] assert mf("aoeu<img src='foo.jpg'>ao") == ["foo.jpg"] assert mf("aoeu<img src=foo bar.jpg>ao") == ["foo bar.jpg"] assert mf("aoeu<img src=\"foo.jpg\">ao") == ["foo.jpg"] assert mf("aoeu<img src=\"foo.jpg\"><img class=yo src=fo>ao") == [ "foo.jpg", "fo"] assert mf("aou[sound:foo.mp3]aou") == ["foo.mp3"] sp = d.media.strip assert sp("aoeu") == "aoeu" assert sp("aoeu[sound:foo.mp3]aoeu") == "aoeuaoeu" assert sp("a<img src=yo>oeu") == "aoeu" es = d.media.escapeImages assert es("aoeu") == "aoeu" assert es("<img src='http://foo.com'>") == "<img src='http://foo.com'>" assert es('<img src="foo bar.jpg">') == '<img src="foo%20bar.jpg">'
def test_deckIntegration(): d = getEmptyDeck() # create a media dir d.media.dir(create=True) # put a file into it file = unicode(os.path.join(testDir, "support/fake.png")) d.media.addFile(file) # add a fact which references it f = d.newFact() f['Front'] = u"one"; f['Back'] = u"<img src='fake.png'>" d.addFact(f) # and one which references a non-existent file f = d.newFact() f['Front'] = u"one"; f['Back'] = u"<img src='fake2.png'>" d.addFact(f) # and add another file which isn't used open(os.path.join(d.media.dir(), "foo.jpg"), "wb").write("test") # check media ret = d.media.check() assert ret[0] == ["fake2.png"] assert ret[1] == ["foo.jpg"]
def test_strings(): d = getEmptyDeck() mf = d.media.filesInStr mid = d.models.models.keys()[0] assert mf(mid, "aoeu") == [] assert mf(mid, "aoeu<img src='foo.jpg'>ao") == ["foo.jpg"] assert mf(mid, "aoeu<img src='foo.jpg' style='test'>ao") == ["foo.jpg"] assert mf(mid, "aoeu<img src='foo.jpg'><img src=\"bar.jpg\">ao") == [ "foo.jpg", "bar.jpg"] assert mf(mid, "aoeu<img src=foo.jpg style=bar>ao") == ["foo.jpg"] assert mf(mid, "<img src=one><img src=two>") == ["one", "two"] assert mf(mid, "aoeu<img src=\"foo.jpg\">ao") == ["foo.jpg"] assert mf(mid, "aoeu<img src=\"foo.jpg\"><img class=yo src=fo>ao") == [ "foo.jpg", "fo"] assert mf(mid, "aou[sound:foo.mp3]aou") == ["foo.mp3"] sp = d.media.strip assert sp("aoeu") == "aoeu" assert sp("aoeu[sound:foo.mp3]aoeu") == "aoeuaoeu" assert sp("a<img src=yo>oeu") == "aoeu" es = d.media.escapeImages assert es("aoeu") == "aoeu" assert es("<img src='http://foo.com'>") == "<img src='http://foo.com'>" assert es('<img src="foo bar.jpg">') == '<img src="foo%20bar.jpg">'