diff --git a/tests/test_models.py b/tests/test_models.py
index 2d4d3d493..22c5e088d 100644
--- a/tests/test_models.py
+++ b/tests/test_models.py
@@ -107,6 +107,29 @@ def test_templates():
mm.addTemplate(m, t)
assert not d.models.remTemplate(m, m['tmpls'][0])
+def test_cloze_ordinals():
+ d = getEmptyDeck()
+ d.models.setCurrent(d.models.byName("Cloze"))
+ m = d.models.current(); mm = d.models
+
+ #We replace the default Cloze template
+ t = mm.newTemplate("ChainedCloze")
+ t['qfmt'] = "{{cloze:text:Text}}"
+ t['afmt'] = "{{text:cloze:Text}}" #independent of the order of mods
+ mm.addTemplate(m, t)
+ mm.save(m)
+ d.models.remTemplate(m, m['tmpls'][0])
+
+ f = d.newNote()
+ f['Text'] = u'{{c1::firstQ::firstA}}{{c2::secondQ::secondA}}'
+ d.addNote(f)
+ assert d.cardCount() == 2
+ (c, c2) = f.cards()
+ # first card should have first ord
+ assert c.ord == 0
+ assert c2.ord == 1
+
+
def test_text():
d = getEmptyDeck()
m = d.models.current()
@@ -163,6 +186,29 @@ def test_cloze():
f.flush()
assert len(f.cards()) == 2
+def test_chained_mods():
+ d = getEmptyDeck()
+ d.models.setCurrent(d.models.byName("Cloze"))
+ m = d.models.current(); mm = d.models
+
+ #We replace the default Cloze template
+ t = mm.newTemplate("ChainedCloze")
+ t['qfmt'] = "{{cloze:text:Text}}"
+ t['afmt'] = "{{text:cloze:Text}}" #independent of the order of mods
+ mm.addTemplate(m, t)
+ mm.save(m)
+ d.models.remTemplate(m, m['tmpls'][0])
+
+ f = d.newNote()
+ q1 = 'phrase'
+ a1 = 'sentence'
+ q2 = 'en chaine'
+ a2 = 'chained'
+ f['Text'] = "This {{c1::%s::%s}} demonstrates {{c1::%s::%s}} clozes." % (q1,a1,q2,a2)
+ assert d.addNote(f) == 1
+ assert "This [sentence] demonstrates [chained] clozes." in f.cards()[0].q()
+ assert "This phrase demonstrates en chaine clozes." in f.cards()[0].a()
+
def test_modelChange():
deck = getEmptyDeck()
basic = deck.models.byName("Basic")