84 lines
1.8 KiB
Python
84 lines
1.8 KiB
Python
|
import os.path
|
||
|
from nose.tools import assert_equals
|
||
|
from mock import MagicMock
|
||
|
from tempfile import TemporaryDirectory
|
||
|
from zipfile import ZipFile
|
||
|
|
||
|
from aqt.addons import AddonManager
|
||
|
|
||
|
|
||
|
def test_readMinimalManifest():
|
||
|
assertReadManifest(
|
||
|
'{"package": "yes", "name": "no"}',
|
||
|
{"package": "yes", "name": "no"}
|
||
|
)
|
||
|
|
||
|
|
||
|
def test_readExtraKeys():
|
||
|
assertReadManifest(
|
||
|
'{"package": "a", "name": "b", "mod": 3, "conflicts": ["d", "e"]}',
|
||
|
{"package": "a", "name": "b", "mod": 3, "conflicts": ["d", "e"]}
|
||
|
)
|
||
|
|
||
|
|
||
|
def test_invalidManifest():
|
||
|
assertReadManifest(
|
||
|
'{"one": 1}',
|
||
|
{}
|
||
|
)
|
||
|
|
||
|
|
||
|
def test_mustHaveName():
|
||
|
assertReadManifest(
|
||
|
'{"package": "something"}',
|
||
|
{}
|
||
|
)
|
||
|
|
||
|
|
||
|
def test_mustHavePackage():
|
||
|
assertReadManifest(
|
||
|
'{"name": "something"}',
|
||
|
{}
|
||
|
)
|
||
|
|
||
|
|
||
|
def test_invalidJson():
|
||
|
assertReadManifest(
|
||
|
'this is not a JSON dictionary',
|
||
|
{}
|
||
|
)
|
||
|
|
||
|
|
||
|
def test_missingManifest():
|
||
|
assertReadManifest(
|
||
|
'{"package": "what", "name": "ever"}',
|
||
|
{},
|
||
|
nameInZip="not-manifest.bin"
|
||
|
)
|
||
|
|
||
|
|
||
|
def test_ignoreExtraKeys():
|
||
|
assertReadManifest(
|
||
|
'{"package": "a", "name": "b", "game": "c"}',
|
||
|
{"package": "a", "name": "b"}
|
||
|
)
|
||
|
|
||
|
|
||
|
def test_conflictsMustBeStrings():
|
||
|
assertReadManifest(
|
||
|
'{"package": "a", "name": "b", "conflicts": ["c", 4, {"d": "e"}]}',
|
||
|
{}
|
||
|
)
|
||
|
|
||
|
|
||
|
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:
|
||
|
assert_equals(adm.readManifestFile(zfile), expectedManifest)
|