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

The old template handling was too complicated, and generated frequent questions on the forums. By dropping non-active templates we can do away with the generate cards function, and advanced users can simulate the old behaviour by using conditional field templates.
96 lines
3.3 KiB
Python
96 lines
3.3 KiB
Python
# coding: utf-8
|
|
|
|
import tempfile, os, time
|
|
from anki import Deck
|
|
from anki.utils import checksum
|
|
from shared import getEmptyDeck, testDir
|
|
|
|
# copying files to media folder
|
|
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 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 bar.jpg>ao") == ["foo bar.jpg"]
|
|
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 test_deckIntegration():
|
|
d = getEmptyDeck()
|
|
# create a media dir
|
|
d.media.dir()
|
|
# 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_changes():
|
|
d = getEmptyDeck()
|
|
assert d.media._changed()
|
|
assert not list(d.media.added())
|
|
assert not list(d.media.removed())
|
|
# add a file
|
|
dir = tempfile.mkdtemp(prefix="anki")
|
|
path = os.path.join(dir, "foo.jpg")
|
|
open(path, "w").write("hello")
|
|
time.sleep(1)
|
|
path = d.media.addFile(path)
|
|
# should have been logged
|
|
assert list(d.media.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(d.media.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")
|
|
assert len(list(d.media.added())) == 2
|
|
assert not list(d.media.removed())
|
|
# deletions should get noticed too
|
|
time.sleep(1)
|
|
os.unlink(path+"2")
|
|
assert len(list(d.media.added())) == 1
|
|
assert len(list(d.media.removed())) == 1
|
|
# after a sync completes, it clears the log
|
|
d.media.clearLog()
|
|
assert len(list(d.media.added())) == 0
|
|
assert len(list(d.media.removed())) == 0
|