Ignore:
Timestamp:
Jun 23, 2014, 7:11:39 PM (10 years ago)
Author:
steve
Message:

Adding in some test_all.py

Location:
trunk/anuga_core/source/anuga
Files:
3 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/anuga_core/source/anuga/culvert_flows/test_all.py

    r8150 r9213  
    1111import unittest
    1212import os
    13 import sys
    14 import tempfile
    15 import time
    16 import anuga.utilities.system_tools as aust
    17 from anuga.utilities.terminal_width import terminal_width
    1813
    1914
    2015#List files that should be excluded from the testing process.
    2116#E.g. if they are known to fail and under development
    22 exclude_files = []
    23 
    24 # Directories that should not be searched for test files.
    25 exclude_dirs = ['pypar_dist',  'shallow_water_balanced',   # Special requirements
    26                 '.svn',          # subversion
    27                 'props', 'wcprops', 'prop-base', 'text-base', 'tmp']
    28 
    29 
    30 def list_names(names, func=None, col_width=None, page_width=None):
    31     # set defaults
    32     p_width = page_width - 1            # set page width
    33     if p_width is None:
    34         p_width = 132                   # default page width
    35 
    36     c_width = col_width                 # set column width
    37     if c_width is None:
    38         c_width = 0
    39         for name in names:
    40             if func:
    41                 name = func(name)
    42             c_width = max(c_width, len(name))
    43     c_width += 2                        # 2 column padding
    44 
    45     # calculate number of columns allowed
    46     max_columns = int(p_width / c_width)
    47 
    48     # print columns
    49     column = 0
    50     for name in names:
    51         if func:
    52             name = func(name)
    53         print '%-*s' % (c_width-1, name),
    54         column += 1
    55         if column >= max_columns:
    56             column = 0
    57             print
    58 
    59     # if last line not finished, end it here
    60     if column > 0:
    61         print
     17exclude = []
    6218
    6319
    6420def get_test_files(path):
    65     walk = os.walk(path)
    6621
     22    import sys
     23
     24    files = os.listdir(path)
     25
     26    #Check sub directories
    6727    test_files = []
    68     path_files = []
    69 
    70     for (dirpath, dirnames, filenames) in walk:
    71         # exclude forbidden directories
    72         for e_dir in exclude_dirs:
    73             try:
    74                 dirnames.remove(e_dir)
    75             except ValueError:
    76                 pass
    77 
    78         # check for test_*.py files
    79         for filename in filenames:
    80             if filename.startswith('test_') and filename.endswith('.py'):
    81                 test_files.append(filename)
    82                 if dirpath not in path_files:
    83                     path_files.append(dirpath)
    84 
    85     return test_files, path_files
     28    for file in files:
     29        if os.path.isdir(file):
     30            sys.path.append(file)
     31            #print 'Recursing into', file
     32            test_files += get_test_files(path + os.sep + file)
     33        elif file[:5] == 'test_' and file[-2:] == 'py':
     34            #print 'Appending', file
     35            test_files.append(file)
     36        else:
     37            pass
     38    return test_files
    8639
    8740
    88 def regressionTest(test_verbose=False):
    89     # start off with where we are
    90     path = os.getcwd()
    91     print
    92     print 'Testing path: %s' % path
    9341
    94     # get the terminal width
    95     term_width = terminal_width()
    96 
    97     # explain what we are doing
    98     print
    99     print "The following directories will be skipped over:"
    100     exclude_dirs.sort()
    101     list_names(exclude_dirs, page_width=term_width)
    102 
    103     # get all test_*.py and enclosing directories
    104     test_files, path_files = get_test_files(path)
    105     path_files.sort()
    106 
    107     files = [x for x in test_files if not x == 'test_all.py']
    108     files.sort()        # Ensure same order on all platforms
    109 
    110     print
    111     print 'Paths searched:'
    112     list_names(path_files, os.path.basename, page_width=term_width)
    113 
    114     print   
    115     print 'Files tested:'
    116     list_names(files, page_width=term_width)
    117     print
    118 
    119     # update system path with found paths
    120     for path in path_files:
    121         sys.path.append(path)
    122    
    123     # exclude files that we can't handle
    124     for file in exclude_files:
    125         print 'WARNING: File '+ file + ' to be excluded from testing'
    126         try:
    127             files.remove(file)
    128         except ValueError, e:
    129             msg = 'File "%s" was not found in test suite.\n' % file
    130             msg += 'Original error is "%s"\n' % e
    131             msg += 'Perhaps it should be removed from exclude list?'
    132             raise Exception, msg
    133 
    134     # import all test_*.py files
    135     # NOTE: This implies that test_*.py files MUST HAVE UNIQUE NAMES!
    136     filenameToModuleName = lambda f: os.path.splitext(f)[0]
    137     moduleNames = map(filenameToModuleName, files)
    138     modules = map(__import__, moduleNames)
    139 
    140     # Fix up the system path
    141     for file in path_files:
    142         sys.path.remove(file)
    143 
    144     # bundle up all the tests
    145     load = unittest.defaultTestLoader.loadTestsFromModule
    146     testCaseClasses = map(load, modules)
    147 
    148     if test_verbose is True:
    149         # Test the code by setting verbose to True.
    150         # The test cases have to be set up for this to work.
    151         # See test data manager for an example.
    152         for test_suite in testCaseClasses:
    153             for tests in test_suite._tests:
    154                 # tests is of class TestSuite
    155                 if len(tests._tests) > 1:
    156                     # these are the test functions
    157                     try:
    158                         # Calls class method set_verbose in test case classes
    159                         tests._tests[0].set_verbose()
    160                     except:
    161                         pass                # No all classes have set_verbose
    162 
    163     return unittest.TestSuite(testCaseClasses)
     42def regressionTest():
     43    import sys, os, re, unittest
     44    path = os.path.split(sys.argv[0])[0] or os.getcwd()
    16445
    16546
    166 def check_anuga_import():
    167     try:
    168         # importing something that loads quickly
    169         import anuga.anuga_exceptions
    170     except ImportError:
    171         print "Python cannot import ANUGA module."
    172         print "Check you have followed all steps of its installation."
    173         import sys
    174         sys.exit()
     47    files = get_test_files(path)
    17548
    17649
     50
     51    #test = re.compile('^test_[\w]*.py$', re.IGNORECASE)
     52    #files = filter(test.search, files)
     53
     54
     55    try:
     56        files.remove(__file__)  #Remove self from list (Ver 2.3. or later)
     57    except:
     58        files.remove('test_all.py')
     59
     60    print 'Testing:'
     61    for file in files:
     62        print '  ' + file
     63
     64    if globals().has_key('exclude'):
     65        for file in exclude:
     66            files.remove(file)
     67            print 'WARNING: File '+ file + ' excluded from testing'
     68
     69
     70    filenameToModuleName = lambda f: os.path.splitext(f)[0]
     71    #print "files",files
     72    moduleNames = map(filenameToModuleName, files)
     73    #print "moduleNames",moduleNames
     74    modules = map(__import__, moduleNames)
     75    load = unittest.defaultTestLoader.loadTestsFromModule
     76    return unittest.TestSuite(map(load, modules))
     77
    17778if __name__ == '__main__':
    178     check_anuga_import()
    17979
    180     if len(sys.argv) > 1 and sys.argv[1][0].upper() == 'V':
    181         test_verbose = True
    182         saveout = sys.stdout
    183         filename = ".temp"
    184         fid = open(filename, 'w')
    185         sys.stdout = fid
    186     else:
    187         test_verbose = False
    188     suite = regressionTest(test_verbose)
    189     runner = unittest.TextTestRunner() #verbosity=2
     80    from os import sep
     81
     82    #Attempt to compile all extensions
     83    #execfile('..' + sep + 'utilities' + sep + 'compile.py')
     84
     85    #FIXME: Temporary measure
     86    #os.chdir('..' + sep + 'utilities')
     87    #execfile('compile.py')
     88    #os.chdir('..' + sep + 'pyvolution')   
     89   
     90    #FIXME: Temporary measure
     91    #os.chdir('..' + sep + 'triangle')
     92    #execfile('compile.py')
     93    #os.chdir('..' + sep + 'pyvolution')   
     94   
     95    #os.system('python compile.py')
     96
     97    #print regressionTest()
     98    #unittest.main(defaultTest='regressionTest')
     99   
     100    suite = regressionTest()
     101    runner = unittest.TextTestRunner() #(verbosity=2)
    190102    runner.run(suite)
    191 
    192     # timestamp at the end
    193     timestamp = time.asctime()
    194     version = aust.get_revision_number()
    195     print
    196     print 'Finished at %s, version %s' % (timestamp, version)
    197 
    198     # Cleaning up
    199     if len(sys.argv) > 1 and sys.argv[1][0].upper() == 'V':
    200         sys.stdout = saveout
    201         #fid.close() # This was causing an error in windows
    202         #os.remove(filename)
    203 
    204    
    205     if sys.platform == 'win32':
    206         raw_input('Press the RETURN key')
  • trunk/anuga_core/source/anuga/geometry/polygon.py

    r9067 r9213  
    723723    """
    724724
    725     from pylab import ion, ioff, hold, plot, savefig, xlabel, \
    726                       ylabel, title, close, title, fill
     725
     726    import matplotlib as mpl
     727    mpl.use('Agg')
     728    #import matplotlib.pyplot as plt
     729       
     730
     731    from matplotlib.pyplot import hold, plot, savefig, xlabel, \
     732                    ylabel, title, close, title, fill
    727733
    728734    assert type(polygons_points) == list, \
    729735                'input must be a list of polygons and/or points'
    730736
    731     ion()
     737    #ion()
    732738    hold(True)
    733739
     
    777783        savefig('test_image')
    778784
    779     ioff()
     785    #ioff()
    780786    hold(False)
    781787    close('all')
  • trunk/anuga_core/source/anuga/geometry/test_polygon.py

    r8819 r9213  
    17811781        plot_polygons([polygon1, polygon2], figname='test1')
    17821782
    1783         import pylab
    1784         pylab.close('all')
     1783
    17851784
    17861785        # Another case
    1787         polygon3 = [[1,5], [10,1], [100,10], [50,10], [3,6]]
     1786        polygon3 = [[1,5], [10,1], [100,10], [50,9], [3,6]]
    17881787        plot_polygons([polygon2, polygon3], figname='test2')
    17891788
    1790         pylab.close('all')
    1791 
    1792         for file in ['test1.png', 'test2.png']:
    1793             assert os.access(file, os.R_OK)
    1794             os.remove(file)
     1789        #plt.close('all')
     1790
     1791        for plotfile in ['test1.png', 'test2.png']:
     1792            assert os.access(plotfile, os.R_OK)
     1793            os.remove(plotfile)
    17951794
    17961795
  • trunk/anuga_core/source/anuga/shallow_water/shallow_water_domain.py

    r9212 r9213  
    17301730        """
    17311731
    1732         N = len(self) # Number_of_triangles
    1733         d = len(self.conserved_quantities)
    17341732
    17351733        timestep = self.timestep
     
    17471745        Xmom = self.quantities['xmomentum']
    17481746        Ymom = self.quantities['ymomentum']
    1749        
    1750         #self.work_centroid_values[:] = Stage.centroid_values
    1751        
    1752         tff = self.tri_full_flag
    1753        
     1747
    17541748        Stage.update(timestep)
    17551749        Xmom.update(timestep)   
    1756         Ymom.update(timestep)   
    1757  
    1758         negative_ids = num.where( num.logical_and((Stage.centroid_values - Elev.centroid_values) < 0.0 , tff > 0) )[0]
    1759        
    1760         if len(negative_ids)>0:
    1761             #print 'NEGATIVE INDICES'
    1762             Stage.centroid_values[negative_ids] = Elev.centroid_values[negative_ids]
    1763             Xmom.centroid_values[negative_ids] = 0.0
    1764             Ymom.centroid_values[negative_ids] = 0.0         
     1750        Ymom.update(timestep)
     1751       
     1752        if self.get_using_discontinuous_elevation():
     1753       
     1754            tff = self.tri_full_flag
     1755     
     1756            negative_ids = num.where( num.logical_and((Stage.centroid_values - Elev.centroid_values) < 0.0 , tff > 0) )[0]
    17651757           
    1766 
    1767             # Note that Q.explicit_update is reset by compute_fluxes
    1768             # Where is Q.semi_implicit_update reset?
    1769             # It is reset in quantity_ext.c
    1770 
     1758            if len(negative_ids)>0:
     1759                #print 'NEGATIVE INDICES'
     1760                Stage.centroid_values[negative_ids] = Elev.centroid_values[negative_ids]
     1761                Xmom.centroid_values[negative_ids] = 0.0
     1762                Ymom.centroid_values[negative_ids] = 0.0         
     1763
     1764           
    17711765
    17721766
  • trunk/anuga_core/source/anuga/utilities/plot_utils.py

    r9212 r9213  
    978978    for myTSi in myTimeStep:
    979979        if(verbose):
    980             print myTSi
     980            print 'Reduction = ', myTSi
    981981        for output_quantity in output_quantities:
    982982            if (verbose): print output_quantity
Note: See TracChangeset for help on using the changeset viewer.