mirror of
https://github.com/ankitects/anki.git
synced 2025-12-16 08:10:59 -05:00
update unit tests for sqlalchemy drop
This commit is contained in:
parent
2f27133705
commit
668a58b65a
15 changed files with 520 additions and 0 deletions
BIN
tests/support/anki12.anki
Normal file
BIN
tests/support/anki12.anki
Normal file
Binary file not shown.
50
tests/support/dingsbums.xml
Normal file
50
tests/support/dingsbums.xml
Normal 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' 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
1
tests/support/fake.png
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
abc
|
||||||
89
tests/support/supermemo1.xml
Normal file
89
tests/support/supermemo1.xml
Normal 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>
|
||||||
BIN
tests/support/syncing-media/1.anki
Normal file
BIN
tests/support/syncing-media/1.anki
Normal file
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 545 B |
Binary file not shown.
|
After Width: | Height: | Size: 580 B |
BIN
tests/support/syncing-media/2.anki
Normal file
BIN
tests/support/syncing-media/2.anki
Normal file
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 644 B |
219
tests/support/test.mem
Normal file
219
tests/support/test.mem
Normal 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.
|
||||||
11
tests/support/text-2fields.txt
Normal file
11
tests/support/text-2fields.txt
Normal 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
|
||||||
2
tests/support/text-tags.txt
Normal file
2
tests/support/text-tags.txt
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
foo bar baz,qux
|
||||||
|
foo2 bar2 baz2
|
||||||
11
tests/support/text-update.txt
Normal file
11
tests/support/text-update.txt
Normal 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
40
tests/test_find.py
Normal 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
97
tests/test_models.py
Normal 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"
|
||||||
Loading…
Reference in a new issue