mirror of https://github.com/mitsuhiko/flask.git
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
98 lines
2.3 KiB
15 years ago
|
# -*- 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()
|