# ___________________________________________________________________________ # # Pyomo: Python Optimization Modeling Objects # Copyright 2017 National Technology and Engineering Solutions of Sandia, LLC # Under the terms of Contract DE-NA0003525 with National Technology and # Engineering Solutions of Sandia, LLC, the U.S. Government retains certain # rights in this software. # This software is distributed under the 3-clause BSD License. # ___________________________________________________________________________ #import glob #import sys #import os.path #import optparse from os.path import dirname, abspath, exists, join import sys import pyutilib.dev.runtests import pyomo.common @pyomo.common.pyomo_command('test.pyomo', "Execute Pyomo tests") def runPyomoTests(argv=None): if argv is None: argv = sys.argv basedir=dirname(dirname(dirname(abspath(__file__)))) targets=['pyomo'] if exists(join(basedir,'..','pyomo-model-libraries')): targets.append(join(basedir,'..','pyomo-model-libraries')) return pyutilib.dev.runtests.run(targets, basedir, argv) def OLD_runPyomoTests(): parser = optparse.OptionParser(usage='test.pyomo [options] ') parser.add_option('-d','--dir', action='store', dest='dir', default=None, help='Top-level source directory where the tests are applied.') parser.add_option('-e','--exclude', action='append', dest='exclude', default=[], help='Top-level source directories that are excluded.') parser.add_option('--cat','--category', action='store', dest='cat', default='smoke', help='Specify test category.') parser.add_option('--cov','--coverage', action='store_true', dest='coverage', default=False, help='Indicate that coverage information is collected') parser.add_option('-v','--verbose', action='store_true', dest='verbose', default=False, help='Verbose output') parser.add_option('-o','--output', action='store', dest='output', default=None, help='Redirect output to a file') parser.add_option('--with-doctest', action='store_true', dest='doctests', default=False, help='Run tests included in Sphinx documentation') parser.add_option('--doc-dir', action='store', dest='docdir', default=None, help='Top-level source directory for Sphinx documentation') _options, args = parser.parse_args(sys.argv) if _options.output: outfile = os.path.abspath(_options.output) else: outfile = None if _options.docdir: docdir = os.path.abspath(_options.docdir) if not os.path.exists(docdir): raise ValueError("Invalid documentation directory, " "path does not exist") elif _options.doctests: docdir = os.path.join('pyomo','doc','OnlineDocs') else: docdir = None if _options.dir is None: # the /src directory (for development installations) os.chdir( os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) ) else: if os.path.exists(_options.dir): os.chdir( _options.dir ) print("Running tests in directory %s" % os.getcwd()) _options.cat = os.environ.get('PYUTILIB_UNITTEST_CATEGORY', _options.cat) if _options.cat == 'all': if 'PYUTILIB_UNITTEST_CATEGORY' in os.environ: del os.environ['PYUTILIB_UNITTEST_CATEGORY'] elif _options.cat: os.environ['PYUTILIB_UNITTEST_CATEGORY'] = _options.cat print(" ... for test category: %s" % os.environ['PYUTILIB_UNITTEST_CATEGORY']) options=[] if _options.coverage: options.append('--coverage') if _options.verbose: options.append('-v') if _options.doctests: options.append('--with-doctest') if outfile: options.append('-o') options.append(outfile) if len(args) > 1: mydirs = args[1:] else: mydirs = [os.path.join('pyomo','pyomo'), 'pyomo-model-libraries'] # dirs=[] for dir in mydirs: if dir in _options.exclude: continue if dir.startswith('-'): options.append(dir) if dir.startswith('pyomo'): if os.path.exists(dir): dirs.append(dir) elif '.' in dir: dirs.append(os.path.join('pyomo','pyomo',dir.split('.')[1])) else: if os.path.exists('pyomo.'+dir): dirs.append('pyomo.'+dir) else: dirs.append(os.path.join('pyomo','pyomo',dir)) # excluding = set() for e in _options.exclude: excluding.add(os.path.join('pyomo','pyomo',e)) testdirs = [] for topdir in dirs: for root, subdirs, files in os.walk(topdir): if not '__init__.py' in files: # Skip directories that do not contain a __init__.py file. continue for f in files: if f.startswith("test"): skip=False for e in excluding: if root.startswith(e): skip=True if not skip: testdirs.append(root) break # if docdir: testdirs.append(docdir) return pyutilib.dev.runtests.run('pyomo', ['runtests']+options+['-p','pyomo']+testdirs)