def main(testGroup=('test',), restoreEnvironmentDefaults=False, limit=None, verbosity=2): ''' Run all tests. Group can be test and external >>> print(None) None ''' s1 = commonTest.defaultDoctestSuite(__name__) modGather = commonTest.ModuleGather() modules = modGather.load(restoreEnvironmentDefaults) environLocal.printDebug('looking for Test classes...\n') # look over each module and gather doc tests and unittests totalModules = 0 sortMods = common.misc.sortModules(modules) # print(dir(sortMods[0])) for moduleObject in sortMods: unitTestCases = [] if limit is not None: if totalModules > limit: break totalModules += 1 # get Test classes in module if not hasattr(moduleObject, 'Test'): environLocal.printDebug('%s has no Test class' % moduleObject) else: if 'test' in testGroup: unitTestCases.append(moduleObject.Test) if not hasattr(moduleObject, 'TestExternal'): pass #environLocal.printDebug('%s has no TestExternal class\n' % module) else: if 'external' in testGroup or 'testExternal' in testGroup: unitTestCases.append(moduleObject.TestExternal) # for each Test class, load this into a suite for testCase in unitTestCases: s2 = unittest.defaultTestLoader.loadTestsFromTestCase(testCase) s1.addTests(s2) try: s3 = commonTest.defaultDoctestSuite(moduleObject) s1.addTests(s3) except ValueError: environLocal.printDebug('%s cannot load Doctests' % moduleObject) continue allLocals = [getattr(moduleObject, x) for x in dir(moduleObject)] globs = __import__('music21').__dict__.copy() docTestOptions = (doctest.ELLIPSIS|doctest.NORMALIZE_WHITESPACE) testRunner.addDocAttrTestsToSuite(s1, allLocals, outerFilename=moduleObject.__file__, globs=globs, optionflags=docTestOptions, # no checker here ) testRunner.fixDoctests(s1) environLocal.printDebug('running Tests...\n') with warnings.catch_warnings(): warnings.simplefilter('once', RuntimeWarning) # import modules... warnings.simplefilter('ignore', FutureWarning) # a lot of these scipy->numpy runner = unittest.TextTestRunner(verbosity=verbosity) finalTestResults = runner.run(s1) coverageM21.stopCoverage(cov) if (finalTestResults.errors or finalTestResults.failures or finalTestResults.unexpectedSuccesses): returnCode = 1 else: returnCode = 0 return returnCode
def main(testGroup=('test',), restoreEnvironmentDefaults=False, limit=None, verbosity=2): ''' Run all tests. Group can be test and external >>> print(None) None ''' s1 = commonTest.defaultDoctestSuite(__name__) modGather = commonTest.ModuleGather() modules = modGather.load(restoreEnvironmentDefaults) environLocal.printDebug('looking for Test classes...\n') # look over each module and gather doc tests and unittests totalModules = 0 sortMods = common.misc.sortModules(modules) # print(dir(sortMods[0])) for moduleObject in sortMods: unitTestCases = [] if limit is not None: if totalModules > limit: break totalModules += 1 # get Test classes in module if not hasattr(moduleObject, 'Test'): environLocal.printDebug('%s has no Test class' % moduleObject) else: if 'test' in testGroup: unitTestCases.append(moduleObject.Test) if not hasattr(moduleObject, 'TestExternal'): pass #environLocal.printDebug('%s has no TestExternal class\n' % module) else: if 'external' in testGroup or 'testExternal' in testGroup: unitTestCases.append(moduleObject.TestExternal) # for each Test class, load this into a suite for testCase in unitTestCases: s2 = unittest.defaultTestLoader.loadTestsFromTestCase(testCase) s1.addTests(s2) try: s3 = commonTest.defaultDoctestSuite(moduleObject) s1.addTests(s3) except ValueError: environLocal.printDebug('%s cannot load Doctests' % moduleObject) continue allLocals = [getattr(moduleObject, x) for x in dir(moduleObject)] globs = __import__('music21').__dict__.copy() docTestOptions = (doctest.ELLIPSIS|doctest.NORMALIZE_WHITESPACE) testRunner.addDocAttrTestsToSuite(s1, allLocals, outerFilename=moduleObject.__file__, globs=globs, optionflags=docTestOptions, # no checker here ) testRunner.fixDoctests(s1) environLocal.printDebug('running Tests...\n') with warnings.catch_warnings(): warnings.simplefilter('ignore', RuntimeWarning) # import modules... warnings.simplefilter('default', FutureWarning) # a lot of these scipy->numpy runner = unittest.TextTestRunner(verbosity=verbosity) finalTestResults = runner.run(s1) coverageM21.stopCoverage(cov) if (finalTestResults.errors or finalTestResults.failures or finalTestResults.unexpectedSuccesses): returnCode = 1 else: returnCode = 0 return returnCode
def runOneModuleWithoutImp(args): modGath = args[0] # modGather object fp = args[1] verbosity = False timeStart = time.time() moduleObject = modGath.getModuleWithoutImp(fp) environLocal.printDebug('running %s \n' % fp) if moduleObject == 'skip': success = '%s is skipped \n' % fp environLocal.printDebug(success) return ModuleResponse('Skipped', fp, success) elif moduleObject == 'notInTree': success = ('%s is in the music21 directory but not imported in music21. Skipped -- fix!' % modGath._getNamePeriod(fp)) environLocal.printDebug(success) return ModuleResponse("NotInTree", fp, success) try: moduleName = modGath._getName(fp) s1 = commonTest.defaultDoctestSuite() # get Test classes in moduleObject if not hasattr(moduleObject, 'Test'): environLocal.printDebug('%s has no Test class' % moduleObject) else: s2 = unittest.defaultTestLoader.loadTestsFromTestCase(moduleObject.Test) s1.addTests(s2) try: s3 = commonTest.defaultDoctestSuite(moduleObject) s1.addTests(s3) except ValueError: environLocal.printDebug('%s cannot load Doctests' % moduleObject) pass testRunner.fixDoctests(s1) environLocal.printDebug('running Tests...\n') runner = commonTest.Music21TestRunner(verbosity=verbosity) try: testResult = runner.run(s1) # need to make testResult pickleable by removing the instancemethod parts... errors = [] for e in testResult.errors: errors.append(e[1]) failures = [] for f in testResult.failures: failures.append(f[1]) runTime = round(10*(time.time() - timeStart))/10.0 return ModuleResponse("TestsRun", fp, moduleName, testResult.wasSuccessful(), str(testResult), errors, failures, testResult.testsRun, runTime) except Exception as excp: # pylint: disable=broad-except environLocal.printDebug('*** Exception in running %s: %s...\n' % (moduleName, excp)) return ModuleResponse("TrappedException", fp, moduleName, None, str(excp)) except Exception as excp: # pylint: disable=broad-except environLocal.printDebug('*** Large Exception in running %s: %s...\n' % (fp, excp)) return ModuleResponse("LargeException", fp, None, None, str(excp))
def runOneModuleWithoutImp(args): modGath = args[0] # modGather object fp = args[1] verbosity = False timeStart = time.time() moduleObject = modGath.getModuleWithoutImp(fp) environLocal.printDebug(f'running {fp} \n') namePeriod = modGath._getNamePeriod(fp) if moduleObject == 'skip': success = f'{fp} is skipped \n' environLocal.printDebug(success) return ModuleResponse(returnCode='Skipped', fp=fp, success=success) elif moduleObject == 'notInTree': success = ( f'{namePeriod} is in the music21 directory but not imported in music21. Skipped -- fix!' ) environLocal.printDebug(success) return ModuleResponse(returnCode='NotInTree', fp=fp, success=success) try: moduleName = modGath._getName(fp) s1 = commonTest.defaultDoctestSuite() # get Test classes in moduleObject if not hasattr(moduleObject, 'Test'): environLocal.printDebug(f'{moduleObject} has no Test class') else: s2 = unittest.defaultTestLoader.loadTestsFromTestCase( moduleObject.Test) s1.addTests(s2) try: s3 = commonTest.defaultDoctestSuite(moduleObject) s1.addTests(s3) except ValueError: environLocal.printDebug(f'{moduleObject} cannot load Doctests') pass testRunner.fixDoctests(s1) environLocal.printDebug('running Tests...\n') runner = commonTest.Music21TestRunner(verbosity=verbosity) try: testResult = runner.run(s1) # need to make testResult pickleable by removing the instancemethod parts... errors = [] for e in testResult.errors: errors.append(e[1]) failures = [] for f in testResult.failures: failures.append(f[1]) runTime = round(10 * (time.time() - timeStart)) / 10.0 return ModuleResponse(returnCode='TestsRun', fp=fp, moduleName=moduleName, success=testResult.wasSuccessful(), testRunner=str(testResult), errors=errors, failures=failures, testsRun=testResult.testsRun, runTime=runTime) except Exception as excp: # pylint: disable=broad-except environLocal.printDebug( f'*** Exception in running {moduleName}: {excp}...\n') return ModuleResponse(returnCode='TrappedException', fp=fp, moduleName=moduleName, success=None, testRunner=str(excp)) except Exception as excp: # pylint: disable=broad-except environLocal.printDebug( f'*** Large Exception in running {fp}: {excp}...\n') return ModuleResponse(returnCode='LargeException', fp=fp, testRunner=str(excp))
def main( testGroup: t.Sequence[str] = ('test', ), restoreEnvironmentDefaults=False, limit=None, verbosity=2, show: bool = True, ): ''' Run all tests. Group can be 'test' and/or 'external'. External will not run doctests. ''' for group in testGroup: if group not in ('test', 'external'): raise ValueError( f"Valid test groups are 'test' and 'external'; got {group}") commonTest.testImports() s1 = commonTest.defaultDoctestSuite(__name__) modGather = commonTest.ModuleGather() modules = modGather.load(restoreEnvironmentDefaults) environLocal.printDebug('looking for Test classes...\n') # look over each module and gather doc tests and unittests totalModules = 0 sortMods = common.misc.sortModules(modules) # print(dir(sortMods[0])) for moduleObject in sortMods: unitTestCases = [] if limit is not None: if totalModules > limit: break totalModules += 1 # get Test classes in module if not hasattr(moduleObject, 'Test'): environLocal.printDebug(f'{moduleObject} has no Test class') else: if 'test' in testGroup: unitTestCases.append(moduleObject.Test) # type: ignore if not hasattr(moduleObject, 'TestExternal'): pass # environLocal.printDebug(f'{module} has no TestExternal class\n') else: if 'external' in testGroup: if not show: moduleObject.TestExternal.show = False # type: ignore unitTestCases.append(moduleObject.TestExternal) # type: ignore # for each Test class, load this into a suite for testCase in unitTestCases: s2 = unittest.defaultTestLoader.loadTestsFromTestCase(testCase) s1.addTests(s2) if testGroup == ('external', ): # don't load doctests for runs consisting solely of TestExternal continue try: s3 = commonTest.defaultDoctestSuite(moduleObject) s1.addTests(s3) except ValueError: environLocal.printDebug(f'{moduleObject} cannot load Doctests') continue allLocals = [getattr(moduleObject, x) for x in dir(moduleObject)] globs = __import__('music21').__dict__.copy() docTestOptions = (doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE) testRunner.addDocAttrTestsToSuite( s1, allLocals, outerFilename=moduleObject.__file__, # type: ignore globs=globs, optionflags=docTestOptions, # no checker here ) testRunner.fixDoctests(s1) environLocal.printDebug('running Tests...\n') with warnings.catch_warnings(): warnings.simplefilter('once', RuntimeWarning) # import modules... warnings.simplefilter('ignore', FutureWarning) # a lot of these scipy->numpy runner = unittest.TextTestRunner(verbosity=verbosity) finalTestResults = runner.run(s1) coverageM21.stopCoverage(cov) if (finalTestResults.errors or finalTestResults.failures or finalTestResults.unexpectedSuccesses): returnCode = 1 else: returnCode = 0 return returnCode