initial upload
This commit is contained in:
100
test/runtests.py
Normal file
100
test/runtests.py
Normal file
@@ -0,0 +1,100 @@
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import unittest
|
||||
|
||||
# Get the directory of the current file
|
||||
TEST_ROOT = os.path.dirname(os.path.abspath(__file__))
|
||||
# Add the test root directory to the path
|
||||
sys.path.append(TEST_ROOT)
|
||||
|
||||
# Import the test module as test_lg
|
||||
import testlagrit as test_lg
|
||||
|
||||
# Define a placeholder test class
|
||||
class LGTest(unittest.TestCase):
|
||||
pass
|
||||
|
||||
# Function to generate a unittest function for test case
|
||||
def generate_unittest(lg_exe, test_dir):
|
||||
def test(self):
|
||||
message = "\n\nTest Failed at: " + test_dir +"\n\nPotential causes:\n\n-Difference between"+test_dir+"/outx3dgen and "+test_dir+"/reference/outx3dgen\n-Failure to install Exodus when running Level 2 tests"
|
||||
self.assertEqual(test_lg.run_test(lg_exe, test_dir), True, message)
|
||||
return test
|
||||
|
||||
# Main function to run tests and handle arguments
|
||||
def main():
|
||||
# Information to clarify the help screen and set up command line parser
|
||||
parser = argparse.ArgumentParser(
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||
description=('''
|
||||
LaGriT test suite
|
||||
----------------------------
|
||||
|
||||
Level 1 - Default Test Mode
|
||||
Level 2 - Requires Exodus'''),
|
||||
epilog=('''
|
||||
'''))
|
||||
|
||||
|
||||
# Define Arguments for command line
|
||||
parser.add_argument(
|
||||
"-l",
|
||||
"--levels",
|
||||
help="Designate level(s) of testing. Example: --levels 1 2",
|
||||
action="store",
|
||||
type=int,
|
||||
nargs='*',
|
||||
default=[1]
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"-exe",
|
||||
"--executable",
|
||||
help="Full path to LaGriT executable for testing. Example: ~/LaGriT/build/lagrit",
|
||||
action="store",
|
||||
type=str,
|
||||
default=None
|
||||
)
|
||||
|
||||
# Parse command line arguments
|
||||
args = parser.parse_args()
|
||||
|
||||
# Ensure Level 3 is not automatically run
|
||||
if 3 in args.levels:
|
||||
print("Level 3 is for Developers only and should be run manually.")
|
||||
sys.exit(1)
|
||||
|
||||
# Log the parsed arguments for debugging
|
||||
test_lg.log.debug("Called with args: " + str(args))
|
||||
|
||||
# Get the LaGriT executable path from command-line arguments or find it
|
||||
lg_exe = args.executable
|
||||
if lg_exe is None:
|
||||
lg_exe = test_lg.find_lagrit(TEST_ROOT)
|
||||
|
||||
# Collect test directories based on specified levels
|
||||
test_dirs = test_lg.collect_test_dirs(TEST_ROOT, args.levels)
|
||||
|
||||
# Output to let user know current testing levels
|
||||
print("\nRunning tests in level(s): "+str(args.levels)[1:-1] )
|
||||
|
||||
# Output to let user know that Exodus is not being tested
|
||||
if 2 not in args.levels:
|
||||
print("\n ** Exodus is not being tested. To test Exodus, please run Level 2. **")
|
||||
|
||||
# Dynamically generate unittest functions for each test directory
|
||||
for test_dir in test_dirs:
|
||||
# Generate a unique test name based on the test directory
|
||||
test_name = 'test_%s' % os.path.basename(test_dir)
|
||||
# Create a unittest function for the test directory
|
||||
test = generate_unittest(lg_exe, test_dir)
|
||||
# Add the generated test function to the LGTest class
|
||||
setattr(LGTest, test_name, test)
|
||||
|
||||
# Run the unittests with the specified command-line arguments
|
||||
unittest.main(argv=sys.argv[:1])
|
||||
|
||||
# Entry point for the script
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user