You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
2.3 KiB

# -*- 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()