Split repo generation functionality out of blenderpack.py

Moved repo.json generation to make_repo.py
Package/addon parsing is getting a bit messy, this can be
cleaned up when we have a clearer idea of what a package is.

For now just make it work.
This commit is contained in:
gandalf3
2017-07-02 15:15:48 -07:00
parent 6a538a4264
commit 8baacc366b
18 changed files with 260 additions and 127 deletions

View File

@@ -2,11 +2,15 @@
import unittest
from pathlib import Path
import os
import logging
import ast
import json
import blenderpack
import make_repo
class test_blenderpack_make_repo(unittest.TestCase):
logging.basicConfig(level=logging.DEBUG,
format='%(levelname)8s: %(message)s')
class test_make_repo(unittest.TestCase):
helper_path = Path('tests', 'test_helpers')
addon_path = helper_path / 'addons'
@@ -15,20 +19,12 @@ class test_blenderpack_make_repo(unittest.TestCase):
test_file = 'file_that_doesnt_exist'
self.assertRaises(
FileNotFoundError,
blenderpack.extract_blinfo,
self.addon_path / test_file
)
def test_extract_blinfo_from_nonaddon(self):
test_file = 'not_an_addon.py'
self.assertRaises(
blenderpack.BadAddon,
blenderpack.extract_blinfo,
make_repo.extract_blinfo,
self.addon_path / test_file
)
def test_make_repo_valid(self):
blenderpack.make_repo(self.helper_path / 'addons')
make_repo.make_repo(self.helper_path / 'addons')
repojson = Path.cwd() / 'repo.json'
try:
@@ -40,26 +36,46 @@ class test_blenderpack_make_repo(unittest.TestCase):
self.fail('unfinished test')
def test_make_repo_from_nonexistent(self):
blenderpack.make_repo(self.helper_path / 'addons')
make_repo.make_repo(self.helper_path / 'addons')
self.fail('unfinished test')
# addons which should contain bl_infos
yes_blinfo = [
f for f in test_make_repo.addon_path.iterdir()
if not f.match('*nonaddon*') and not f.match('*invalid_addon*')
]
# addons which should throw BadAddon because they have no blinfo
no_blinfo = [
f for f in test_make_repo.addon_path.iterdir()
if f.match('*nonaddon*')
]
# testname: filename
bl_info_tests = {
'test_extract_blinfo_from_file': 'real_addon.py',
'test_extract_blinfo_from_zip': 'zipped_addon.zip',
'test_extract_blinfo_from_dir': 'dir_addon',
}
def generate_test(test_file):
def generate_good_blinfo_test(test_file: Path):
def test(self):
reality = str(blenderpack.extract_blinfo(self.addon_path / test_file))
with (self.helper_path / (test_file + '_output')).open() as f:
expectation = f.read()
reality = make_repo.extract_blinfo(test_file)
with (self.helper_path / 'expected_blinfo').open("r") as f:
expectation = ast.literal_eval(f.read())
self.assertEqual(expectation, reality)
return test
for name, param in bl_info_tests.items():
test_func = generate_test(param)
setattr(test_blenderpack_make_repo, 'test_{}'.format(name), test_func)
def generate_bad_blinfo_test(test_file: Path):
def test(self):
self.assertRaises(
make_repo.BadAddon,
make_repo.extract_blinfo,
test_file
)
return test
# Add test method retur
def add_generated_tests(test_generator, params, destclass):
"""
Add a test method (as returned by 'test_generator') to destclass for every param
"""
for param in params:
test_func = test_generator(param)
setattr(destclass, 'test_{}'.format(param), test_func)
add_generated_tests(generate_good_blinfo_test, yes_blinfo, test_make_repo)
add_generated_tests(generate_bad_blinfo_test, no_blinfo, test_make_repo)