anki/qt/tests/test_addons.py

68 lines
1.7 KiB
Python
Raw Normal View History

2019-04-24 21:44:11 +02:00
import os.path
from tempfile import TemporaryDirectory
from zipfile import ZipFile
from mock import MagicMock
from nose2.tools.such import helper
2019-04-24 21:44:11 +02:00
from aqt.addons import AddonManager
def test_readMinimalManifest():
assertReadManifest(
2019-12-25 05:18:34 +01:00
'{"package": "yes", "name": "no"}', {"package": "yes", "name": "no"}
2019-04-24 21:44:11 +02:00
)
def test_readExtraKeys():
assertReadManifest(
'{"package": "a", "name": "b", "mod": 3, "conflicts": ["d", "e"]}',
2019-12-25 05:18:34 +01:00
{"package": "a", "name": "b", "mod": 3, "conflicts": ["d", "e"]},
2019-04-24 21:44:11 +02:00
)
def test_invalidManifest():
2019-12-25 05:18:34 +01:00
assertReadManifest('{"one": 1}', {})
2019-04-24 21:44:11 +02:00
def test_mustHaveName():
2019-12-25 05:18:34 +01:00
assertReadManifest('{"package": "something"}', {})
2019-04-24 21:44:11 +02:00
def test_mustHavePackage():
2019-12-25 05:18:34 +01:00
assertReadManifest('{"name": "something"}', {})
2019-04-24 21:44:11 +02:00
def test_invalidJson():
2019-12-25 05:18:34 +01:00
assertReadManifest("this is not a JSON dictionary", {})
2019-04-24 21:44:11 +02:00
def test_missingManifest():
assertReadManifest(
2019-12-25 05:18:34 +01:00
'{"package": "what", "name": "ever"}', {}, nameInZip="not-manifest.bin"
2019-04-24 21:44:11 +02:00
)
def test_ignoreExtraKeys():
assertReadManifest(
2019-12-25 05:18:34 +01:00
'{"package": "a", "name": "b", "game": "c"}', {"package": "a", "name": "b"}
2019-04-24 21:44:11 +02:00
)
def test_conflictsMustBeStrings():
assertReadManifest(
2019-12-25 05:18:34 +01:00
'{"package": "a", "name": "b", "conflicts": ["c", 4, {"d": "e"}]}', {}
2019-04-24 21:44:11 +02:00
)
def assertReadManifest(contents, expectedManifest, nameInZip="manifest.json"):
with TemporaryDirectory() as td:
zfn = os.path.join(td, "addon.zip")
with ZipFile(zfn, "w") as zfile:
zfile.writestr(nameInZip, contents)
adm = AddonManager(MagicMock())
with ZipFile(zfn, "r") as zfile:
helper.assertEquals(adm.readManifestFile(zfile), expectedManifest)