forked from orbit-oss/flask
Added flaskext tester
This commit is contained in:
parent
66c1395589
commit
f4bfae622b
1 changed files with 97 additions and 0 deletions
97
tests/flaskext_test.py
Normal file
97
tests/flaskext_test.py
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Flask Extension Tests
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Tests the Flask extensions.
|
||||
|
||||
:copyright: (c) 2010 by Ali Afshar.
|
||||
:license: BSD, see LICENSE for more details.
|
||||
"""
|
||||
|
||||
from __future__ import with_statement
|
||||
|
||||
import tempfile, subprocess, urllib2, os
|
||||
|
||||
from flask import json
|
||||
|
||||
from setuptools.package_index import PackageIndex
|
||||
from setuptools.archive_util import unpack_archive
|
||||
|
||||
flask_svc_url = 'http://flask.pocoo.org/extensions/'
|
||||
tdir = tempfile.mkdtemp()
|
||||
|
||||
|
||||
def run_tests(checkout_dir):
|
||||
cmd = ['tox']
|
||||
return subprocess.call(cmd, cwd=checkout_dir,
|
||||
stdout=open(os.path.join(tdir, 'tox.log'), 'w'),
|
||||
stderr=subprocess.STDOUT)
|
||||
|
||||
|
||||
def get_test_command(checkout_dir):
|
||||
files = set(os.listdir(checkout_dir))
|
||||
if 'Makefile' in files:
|
||||
return 'make test'
|
||||
elif 'conftest.py' in files:
|
||||
return 'py.test'
|
||||
else:
|
||||
return 'nosetests'
|
||||
|
||||
|
||||
def fetch_extensions_list():
|
||||
req = urllib2.Request(flask_svc_url, headers={'accept':'application/json'})
|
||||
d = urllib2.urlopen(req).read()
|
||||
data = json.loads(d)
|
||||
for ext in data['extensions']:
|
||||
yield ext
|
||||
|
||||
|
||||
def checkout_extension(ext):
|
||||
name = ext['name']
|
||||
root = os.path.join(tdir, name)
|
||||
os.mkdir(root)
|
||||
checkout_path = PackageIndex().download(ext['name'], root)
|
||||
unpack_archive(checkout_path, root)
|
||||
path = None
|
||||
for fn in os.listdir(root):
|
||||
path = os.path.join(root, fn)
|
||||
if os.path.isdir(path):
|
||||
break
|
||||
return path
|
||||
|
||||
|
||||
tox_template = """[tox]
|
||||
envlist=py26
|
||||
|
||||
[testenv]
|
||||
commands=
|
||||
%s
|
||||
downloadcache=
|
||||
%s
|
||||
"""
|
||||
|
||||
def create_tox_ini(checkout_path):
|
||||
tox_path = os.path.join(checkout_path, 'tox.ini')
|
||||
if not os.path.exists(tox_path):
|
||||
with open(tox_path, 'w') as f:
|
||||
f.write(tox_template % (get_test_command(checkout_path), tdir))
|
||||
|
||||
# XXX command line
|
||||
only_approved = True
|
||||
|
||||
def test_all_extensions(only_approved=only_approved):
|
||||
for ext in fetch_extensions_list():
|
||||
if ext['approved'] or not only_approved:
|
||||
checkout_path = checkout_extension(ext)
|
||||
create_tox_ini(checkout_path)
|
||||
ret = run_tests(checkout_path)
|
||||
yield ext['name'], ret
|
||||
|
||||
def main():
|
||||
for name, ret in test_all_extensions():
|
||||
print name, ret
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue