|
- #!/usr/bin/env python3
-
- import nose
- import os
- import sys
- import glob
- from collections import OrderedDict
-
- # Change into parent dir
- os.chdir(os.path.dirname(os.path.realpath(__file__)) + "/..")
-
- class JimOrderPlugin(nose.plugins.Plugin):
- """When searching for tests and encountering a directory that
- contains a 'test.order' file, run tests listed in that file, in the
- order that they're listed. Globs are OK in that file and duplicates
- are removed."""
- name = 'jimorder'
- score = 10000
-
- def prepareTestLoader(self, loader):
- def wrap(func):
- def wrapper(name, *args, **kwargs):
- addr = nose.selector.TestAddress(
- name, workingDir=loader.workingDir)
- try:
- order = os.path.join(addr.filename, "test.order")
- except Exception:
- order = None
- if order and os.path.exists(order):
- files = []
- for line in open(order):
- line = line.split('#')[0].strip()
- if not line:
- continue
- fn = os.path.join(addr.filename, line.strip())
- files.extend(sorted(glob.glob(fn)) or [fn])
- files = list(OrderedDict.fromkeys(files))
- tests = [ wrapper(fn, *args, **kwargs) for fn in files ]
- return loader.suiteClass(tests)
- return func(name, *args, **kwargs)
- return wrapper
- loader.loadTestsFromName = wrap(loader.loadTestsFromName)
- return loader
-
- # Use setup.cfg for most of the test configuration. Adding
- # --with-jimorder here means that a normal "nosetests" run will
- # still work, it just won't support test.order.
- nose.main(addplugins = [ JimOrderPlugin() ],
- argv = sys.argv + ["--with-jimorder"])
|