update unit tests for sqlalchemy drop

This commit is contained in:
Damien Elmes 2011-03-07 02:04:23 +09:00
parent 2f27133705
commit 668a58b65a
15 changed files with 520 additions and 0 deletions

BIN
tests/support/anki12.anki Normal file

Binary file not shown.

View file

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<vocabulary version="3">
<info><title>Deutsch - Italienisch</title><author>Rick Gruber-Riemer</author><notes>Klett Grund- und Aufbauwortschatz</notes><copyright></copyright><licence></licence><blabel>Deutsch</blabel><tlabel>Italienisch</tlabel><alabel>Attributes</alabel><ulabel>Lektion</ulabel><clabel>Kategori</clabel><olabel>Others</olabel><explabel>Erklärung</explabel><exlabel>Unregelmässig</exlabel><bor>en_US</bor><tor>en_US</tor><aor>en_US</aor><uor>en_US</uor><cor>en_US</cor><expor>en_US</expor><exor>en_US</exor><por>en_US</por><ror>en_US</ror><visa>1</visa><visu>0</visu><viscat>0</viscat><visexp>0</visexp><visex>2</visex><vispro>2</vispro><visrel>2</visrel><syllb>false</syllb><syllt>false</syllt></info>
<etattributes>
<eta eid="ETA4" n="Steigerung" di="ETAI10" lu="20061222 07:56:27 CET"><etai eid="ETAI10" ir="false">Regelmässig</etai><etai eid="ETAI11" ir="false">Unregelmässig</etai></eta>
<eta eid="ETA5" n="Perfekt" di="ETAI12" lu="20070210 13:20:09 CET"><etai eid="ETAI12" ir="false">avere</etai><etai eid="ETAI13" ir="false">essere</etai><etai eid="ETAI14" ir="false">avere oder essere</etai></eta>
<eta eid="ETA1" n="Konjugation" di="ETAI1" lu="20070211 12:35:19 CET"><etai eid="ETAI1" ir="false">-are (regelmässig)</etai><etai eid="ETAI16" ir="false">-ere (regelmässig)</etai><etai eid="ETAI15" ir="false">-ire (regelmässig)</etai><etai eid="ETAI2" ir="false">Unregelmässig</etai></eta>
<eta eid="ETA2" n="Geschlecht" di="ETAI3" lu="20070210 21:08:17 CET"><etai eid="ETAI3" ir="false">il</etai><etai eid="ETAI4" ir="false">la</etai></eta>
<eta eid="ETA3" n="Mehrzahl" di="ETAI6" lu="20070212 10:03:56 CET"><etai eid="ETAI6" ir="false">Regelmässig</etai><etai eid="ETAI7" ir="false">Unregelmässig</etai><etai eid="ETAI8" ir="false">Nur Einzahl</etai><etai eid="ETAI9" ir="false">Nur Mehrzahl</etai></eta>
</etattributes>
<entrytypes>
<entrytype eid="ET8" n="Sätze und Redewendungen" lu="20070310 20:16:30 CET"></entrytype>
<entrytype eid="ET7" n="Slang" lu="20070210 20:58:29 CET"></entrytype>
<entrytype eid="ET4" n="Adjektiv / Adverb" a1="ETA4" lu="20061222 07:58:14 CET"></entrytype>
<entrytype eid="ET3" n="Substantiv" a1="ETA2" a2="ETA3" lu="20061222 07:55:39 CET"></entrytype>
<entrytype eid="ET6" n="Modi di dire" lu="20070210 13:29:14 CET"></entrytype>
<entrytype eid="ET5" n="Konjugation" lu="20070210 13:20:36 CET"></entrytype>
<entrytype eid="ET2" n="Anderes" lu="20061222 07:52:31 CET"></entrytype>
<entrytype eid="ET1" n="Verb" a1="ETA1" a2="ETA5" lu="20061222 07:57:41 CET"></entrytype>
</entrytypes>
<units>
<unit eid="U4" lu="20070217 20:14:02 CET"><name>Rest</name><desc></desc></unit>
<unit eid="U3" lu="20070217 20:03:30 CET"><name>Harenberg Kalender Italienisch 2007</name><desc></desc></unit>
<unit eid="U5" lu="20070310 20:15:52 CET"><name>50. Restaurant, Café, Hotel</name><desc></desc></unit>
<unit eid="U2" lu="20070210 13:31:47 CET"><name>Berlitz Kalender 2005</name><desc></desc></unit>
<unit eid="U1" lu="20061222 07:48:58 CET"><name>A</name><desc></desc></unit>
</units>
<categories>
<category eid="C1" lu="20061222 07:46:40 CET"><name>Default</name><desc></desc></category>
</categories>
<entries>
<e et="ET1" eid="E113" u="U1" c="C1" lv="1" st="true" lu="20070211 14:18:49 CET" ll="19700101 01:00:00 CET" a1="ETAI1" a2="ETAI12"><o>entfernen, beseitigen</o><d>allontanare</d></e>
<e et="ET2" eid="E114" u="U1" c="C1" lv="2" st="true" lu="20070211 14:20:31 CET" ll="19700101 01:00:00 CET"><o>dann; damals, also; früher</o><d>allora</d></e>
<e et="ET3" eid="E112" u="U1" c="C1" lv="3" st="true" lu="20070211 14:17:19 CET" ll="19700101 01:00:00 CET" a1="ETAI3" a2="ETAI6"><o>Schüler, Zögling</o><d>allievo</d></e>
<e et="ET4" eid="E110" u="U1" c="C1" lv="4" st="true" lu="20070211 14:10:56 CET" ll="19700101 01:00:00 CET" a1="ETAI10"><o>lustig, heiter</o><d>allegro</d></e>
<e et="ET6" eid="E8" u="U2" c="C1" lv="5" st="true" lu="20070210 13:31:58 CET" ll="19700101 01:00:00 CET"><o>sich in einer unbequemen Situation befinden</o><d>essere un pesche four d&apos; aqua</d></e>
<e et="ET7" eid="E49" u="U2" c="C1" lv="6" st="true" lu="20070210 20:59:34 CET" ll="19700101 01:00:00 CET"><o>das ist mir egal</o><d>me ne frego</d><ep>Geste: unter dem Kinn mit der Hand vonhinten nach vorne reiben</ep></e>
<e et="ET3" eid="E251" u="U5" c="C1" lv="7" st="true" lu="20070310 20:29:49 CET" ll="19700101 01:00:00 CET" a1="ETAI4" a2="ETAI6"><o>Wirtin</o><d>ostessa</d></e>
</entries>
<stats>
<sset ts="20070310 21:16:36 CET"><sne lv="1">236</sne><sne lv="2">19</sne><sne lv="3">1</sne><sne lv="4">5</sne><sne lv="5">3</sne><sne lv="6">1</sne><sne lv="7">2</sne></sset>
<sset ts="20070217 20:37:22 CET"><sne lv="1">196</sne><sne lv="2">19</sne><sne lv="3">1</sne><sne lv="4">5</sne><sne lv="5">3</sne><sne lv="6">1</sne><sne lv="7">2</sne></sset>
<sset ts="20070212 10:13:05 CET"><sne lv="1">125</sne><sne lv="2">12</sne><sne lv="3">5</sne><sne lv="4">1</sne><sne lv="5">1</sne><sne lv="6">0</sne><sne lv="7">0</sne></sset>
<sset ts="20070228 21:44:04 CET"><sne lv="1">202</sne><sne lv="2">19</sne><sne lv="3">1</sne><sne lv="4">5</sne><sne lv="5">3</sne><sne lv="6">1</sne><sne lv="7">2</sne></sset>
<sset ts="20070217 19:10:49 CET"><sne lv="1">188</sne><sne lv="2">12</sne><sne lv="3">5</sne><sne lv="4">1</sne><sne lv="5">1</sne><sne lv="6">0</sne><sne lv="7">0</sne></sset>
<sset ts="20070211 20:55:08 CET"><sne lv="1">124</sne><sne lv="2">18</sne><sne lv="3">1</sne><sne lv="4">1</sne><sne lv="5">0</sne><sne lv="6">0</sne><sne lv="7">0</sne></sset>
<sset ts="20070217 19:14:04 CET"><sne lv="1">176</sne><sne lv="2">19</sne><sne lv="3">1</sne><sne lv="4">5</sne><sne lv="5">3</sne><sne lv="6">1</sne><sne lv="7">2</sne></sset>
<sset ts="20070211 20:57:10 CET"><sne lv="1">124</sne><sne lv="2">18</sne><sne lv="3">1</sne><sne lv="4">1</sne><sne lv="5">0</sne><sne lv="6">0</sne><sne lv="7">0</sne></sset>
</stats>
</vocabulary>

1
tests/support/fake.png Normal file
View file

@ -0,0 +1 @@
abc

View file

@ -0,0 +1,89 @@
<?xml version="1.0" encoding="UTF-8"?>
<SuperMemoCollection>
<Count>3572</Count>
<SuperMemoElement>
<ID>1</ID>
<Type>Topic</Type>
<Content>
<Question />
<Answer />
</Content>
<SuperMemoElement>
<ID>40326</ID>
<Title>aoeu</Title>
<Type>Topic</Type>
<SuperMemoElement>
<ID>40327</ID>
<Title>1-400</Title>
<Type>Topic</Type>
<SuperMemoElement>
<ID>40615</ID>
<Title>aoeu</Title>
<Type>Topic</Type>
<SuperMemoElement>
<ID>10247</ID>
<Type>Item</Type>
<Content>
<Question>aoeu</Question>
<Answer>aoeu</Answer>
</Content>
<LearningData>
<Interval>1844</Interval>
<Repetitions>7</Repetitions>
<Lapses>0</Lapses>
<LastRepetition>19.09.2002</LastRepetition>
<AFactor>5,701</AFactor>
<UFactor>2,452</UFactor>
</LearningData>
</SuperMemoElement>
</SuperMemoElement>
<Type>Topic</Type>
<Content>
<Question>aoeu</Question>
<Answer />
</Content>
<LearningData>
<Interval>0</Interval>
<Repetitions>0</Repetitions>
<Lapses>0</Lapses>
<LastRepetition>04.08.2000</LastRepetition>
<AFactor>3,000</AFactor>
<UFactor>0,000</UFactor>
</LearningData>
</SuperMemoElement>
</SuperMemoElement>
</SuperMemoElement>
</SuperMemoCollection>

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 545 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 B

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 644 B

219
tests/support/test.mem Normal file
View file

@ -0,0 +1,219 @@
--- Mnemosyne Data Base --- Format Version 1 ---
(lp1
(imnemosyne.core.mnemosyne_core
StartTime
p2
(dp3
S'time'
p4
F1183141800
sba(lp5
(imnemosyne.core.mnemosyne_core
Category
p6
(dp7
S'active'
p8
I01
sS'name'
p9
V<default>
p10
sba(imnemosyne.core.mnemosyne_core
Category
p11
(dp12
S'active'
p13
I01
sS'name'
p14
Vfoo
p15
sba(imnemosyne.core.mnemosyne_core
Category
p16
(dp17
g13
I01
sg14
Vbaz, quux
p18
sbaa(lp19
(imnemosyne.core.mnemosyne_core
Item
p20
(dp21
S'a'
Vbar
p22
sS'last_rep'
p23
L34L
sS'ret_reps'
p24
I0
sS'cat'
p25
g16
sS'q'
Vfoo
p26
sS'grade'
p27
I0
sS'acq_reps'
p28
I1
sS'ret_reps_since_lapse'
p29
I0
sS'easiness'
p30
F2.5
sS'lapses'
p31
I0
sS'acq_reps_since_lapse'
p32
I1
sS'next_rep'
p33
L34L
sS'id'
p34
S'9f401476'
p35
sba(imnemosyne.core.mnemosyne_core
Item
p36
(dp37
S'a'
Vfoo
p38
sg23
L34L
sg24
I0
sg25
g6
sS'q'
Vbar
p39
sg27
I0
sg28
I1
sg29
I0
sg30
F2.5
sg31
I0
sg32
I1
sg33
L34L
sg34
S'a869958d'
p40
sba(imnemosyne.core.mnemosyne_core
Item
p41
(dp42
S'a'
Vquux
p43
sg23
L34L
sg24
I0
sg25
g11
sS'q'
Vbaz
p44
sg27
I5
sg28
I2
sg29
I0
sg30
F2.5
sg31
I0
sg32
I2
sg33
L35L
sg34
S'74651aa3'
p45
sba(imnemosyne.core.mnemosyne_core
Item
p46
(dp47
S'a'
Vbaz
p48
sg23
L34L
sg24
I0
sg25
g6
sS'q'
Vquux
p49
sg27
I0
sg28
I1
sg29
I0
sg30
F2.5
sg31
I0
sg32
I1
sg33
L34L
sg34
S'0bd8f10b'
p50
sba(imnemosyne.core.mnemosyne_core
Item
p51
(dp52
S'a'
Vcard
p53
sg23
L34L
sg24
I0
sg25
g11
sS'q'
Vonesided
p54
sg27
I0
sg28
I1
sg29
I0
sg30
F2.5
sg31
I0
sg32
I1
sg33
L34L
sg34
S'bb503cf1'
p55
sbaa.

View file

@ -0,0 +1,11 @@
# this is a test file
食べる to eat
飲む to drink
テスト test
to eat 食べる
飲む to drink
多すぎる too many fields
not, enough, fields
遊ぶ
to play

View file

@ -0,0 +1,2 @@
foo bar baz,qux
foo2 bar2 baz2

View file

@ -0,0 +1,11 @@
# this is a test file
食べる to ate
む to drink
テスト testing
to eat 食べる
飲む to drink
多すぎる too many fields
not, enough, fields
遊ぶ
to play

40
tests/test_find.py Normal file
View file

@ -0,0 +1,40 @@
# coding: utf-8
from tests.shared import getEmptyDeck
def test_findCards():
deck = getEmptyDeck()
f = deck.newFact()
f['Front'] = u'dog'
f['Back'] = u'cat'
f.addTags(u"monkey")
deck.addFact(f)
f = deck.newFact()
f['Front'] = u'goats are fun'
f['Back'] = u'sheep'
f.addTags(u"sheep goat horse")
deck.addFact(f)
f = deck.newFact()
f['Front'] = u'cat'
f['Back'] = u'sheep'
deck.addFact(f)
assert not deck.findCards("tag:donkey")
assert len(deck.findCards("tag:sheep")) == 1
assert len(deck.findCards("tag:sheep tag:goat")) == 1
assert len(deck.findCards("tag:sheep tag:monkey")) == 0
assert len(deck.findCards("tag:monkey")) == 1
assert len(deck.findCards("tag:sheep -tag:monkey")) == 1
assert len(deck.findCards("-tag:sheep")) == 2
assert len(deck.findCards("cat")) == 2
assert len(deck.findCards("cat -dog")) == 1
assert len(deck.findCards("cat -dog")) == 1
assert len(deck.findCards("are goats")) == 1
assert len(deck.findCards('"are goats"')) == 0
assert len(deck.findCards('"goats are"')) == 1
deck.addTags(deck.db.list("select id from cards"), "foo bar")
assert (len(deck.findCards("tag:foo")) ==
len(deck.findCards("tag:bar")) ==
3)
deck.deleteTags(deck.db.list("select id from cards"), "foo")
assert len(deck.findCards("tag:foo")) == 0
assert len(deck.findCards("tag:bar")) == 3

97
tests/test_models.py Normal file
View file

@ -0,0 +1,97 @@
# coding: utf-8
from tests.shared import getEmptyDeck
from anki.models import Model, Template, Field
from anki.utils import stripHTML
def test_modelDelete():
deck = getEmptyDeck()
f = deck.newFact()
f['Front'] = u'1'
f['Back'] = u'2'
deck.addFact(f)
assert deck.cardCount() == 1
deck.deleteModel(deck.conf['currentModelId'])
assert deck.cardCount() == 0
def test_modelCopy():
deck = getEmptyDeck()
m = deck.currentModel()
m2 = m.copy()
assert m2.name == "Basic copy"
assert m2.id != m.id
assert m2.fields[0].id != m.fields[0].id
assert m2.templates[0].id != m.templates[0].id
assert len(m2.fields) == 2
assert len(m.fields) == 2
assert len(m2.fields) == len(m.fields)
assert len(m.templates) == 2
assert len(m2.templates) == 2
def test_modelChange():
deck = getEmptyDeck()
m2 = deck.currentModel()
# taken from jp support plugin
m1 = Model(deck)
m1.name = "Japanese"
# field 1
fm = Field(deck)
fm.name = "Expression"
fm.conf['required'] = True
fm.conf['unique'] = True
m1.addField(fm)
# field2
fm = Field(deck)
fm.name = "Meaning"
m1.addField(fm)
# field3
fm = Field(deck)
fm.name = "Reading"
m1.addField(fm)
# template1
t = Template(deck)
t.name = "Recognition"
t.qfmt = "{{Expression}}"
t.afmt = "{{Reading}}<br>{{Meaning}}"
m1.addTemplate(t)
# template2
t = Template(deck)
t.name = "Recall"
t.qfmt = "{{Meaning}}"
t.afmt = "{{Expression}}<br>{{Reading}}"
#t.active = False
m1.addTemplate(t)
deck.addModel(m1)
# add some facts
f = deck.newFact()
f['Expression'] = u'e'
f['Meaning'] = u'm'
f['Reading'] = u'r'
deck.addFact(f)
f2 = deck.newFact()
f2['Expression'] = u'e2'
f2['Meaning'] = u'm2'
f2['Reading'] = u'r2'
deck.addFact(f2)
# convert to basic
assert deck.modelUseCount(m1) == 2
assert deck.modelUseCount(m2) == 0
assert deck.cardCount() == 4
assert deck.factCount() == 2
fmap = {m1.fields[0]: m2.fields[0],
m1.fields[1]: None,
m1.fields[2]: m2.fields[1]}
cmap = {m1.templates[0]: m2.templates[0],
m1.templates[1]: None}
deck.changeModel([f.id], m2, fmap, cmap)
assert deck.modelUseCount(m1) == 1
assert deck.modelUseCount(m2) == 1
assert deck.cardCount() == 3
assert deck.factCount() == 2
(q, a) = deck.db.first("""
select q, a from cards where fid = :id""",
id=f.id)
assert stripHTML(q) == u"e"
assert stripHTML(a) == u"r"