def main(argv): wingtest_common.SetupSysArgv(argv) dirname = wingtest_common.process_directory_arg(argv) # Assume all args not starting with - are filenames for tests for i, arg in enumerate(argv): if not arg.startswith('-') and not os.path.isabs(arg): argv[i] = os.path.join(dirname, arg) argv.append('--nocapture') result = NoseTestResults(sys.stdout) runner = wingtest_common.XmlTestRunner(result) try: try: nose.run(argv=argv, testRunner=runner) except SystemExit: raise except Exception: # Note that import error from test files end up here, so this is # not just for runner exceptions if isinstance(xmlout, wingtest_common.XmlStream): xmlout._write_exc_info(sys.exc_info()) else: exc_type, exc, tb = sys.exc_info() sys.excepthook(exc_type, exc, tb) finally: xmlout.finish()
def main(argv): sys.stderr.write(str(argv) + '\n') # XXX Hack to allow setting a different settings module for testing only if 'WING_TEST_DJANGO_SETTINGS_MODULE' in os.environ: os.environ['DJANGO_SETTINGS_MODULE'] = os.environ['WING_TEST_DJANGO_SETTINGS_MODULE'] f, filename, info = imp.find_module('wingtest_common', [os.path.dirname(__file__)]) try: wingtest_common = imp.load_module('wingtest_common', f, filename, info) finally: f.close() if 0: import wingtest_common class CDjangoXMLTestResult(wingtest_common.XmlTestResult): def startTest(self, test): unittest.TestResult.startTest(self, test) class_filename = self._testClassFilename(test) code_filename, lineno = self._sourceCodeLocation(test) if hasattr(test, '_dt_test'): name = test.id() if name.startswith('django.contrib.'): name = name[len('django.contrib.'):] else: parts = name.split('.') name = '.'.join(parts[1:]) parts = name.split('.') if '__test__' in name: new_parts = [] for i, part in enumerate(parts): if i+1 < len(parts) and parts[i+1] == '__test__': pass else: new_parts.append(part) name = '.'.join(new_parts) else: name = '.'.join(parts[:-1]) + '.__test__' else: name = self._testDottedName(test) self.stream._start_test(name, class_filename, code_filename=code_filename, lineno=lineno) def _sourceCodeLocation(self, test): if hasattr(test, '_dt_test'): if not test._dt_test.lineno: lineno = 0 else: lineno = test._dt_test.lineno return test._dt_test.filename, lineno else: return wingtest_common.XmlTestResult._sourceCodeLocation(self, test) testedModule = get_tested_module(argv) if testedModule.endswith('.__test__'): testedModule = testedModule[:-len('.__test__')] testedModuleList = testedModule and testedModule.split('.') or [] manage_dir = init_django(argv) class MyXmlStream(wingtest_common.XmlStream): def _start_test(self, name, filename, lineno=None, code_filename=None): testPath, testFilename = os.path.split(filename) testPath = os.path.normpath(testPath) if testFilename == 'tests.py': appName = os.path.basename(testPath) else: appName = os.path.basename(os.path.dirname(testPath)) if name.find('__test__') == -1 and appName != 'django': testname = '%s.%s' % (appName, name) else: testname = name if testname.endswith('__test__'): parts = testname.split('.') if len(parts) > 1: testname = '.'.join(parts[:-1]) sys.stderr.write('test: %s' % testname) super(MyXmlStream, self)._start_test(testname, os.path.join(manage_dir, 'manage.py'), lineno-1, code_filename) xmlout = wingtest_common.CreateOutputStream(argv, xml_stream_cls=MyXmlStream) sys.stdout = sys.stderr = xmlout wingtest_common.process_directory_arg(argv) result = CDjangoXMLTestResult(sys.stdout) testedModule = '.'.join(testedModuleList[1:]) test_labels = testedModule and [testedModule] or [] # Add 'test' to sys.argv since some code uses it to decide if # it's being tested or just run sys.argv = [os.path.join(manage_dir, 'manage.py'), 'test'] + test_labels sys.stderr.write(str(sys.argv) + '\n') from django.conf import settings try: from django.test.simple import DjangoTestRunner, DjangoTestSuiteRunner test_base = DjangoTestRunner except: try: # Django <= 1.7 from django.test.simple import DjangoTestSuiteRunner except: # Django 1.8+ import django django.setup() from django.test.utils import get_runner DjangoTestSuiteRunner = get_runner(settings) from unittest import TextTestRunner test_base = TextTestRunner # South (schema migration tool) does not use the 'test' command anymore if 'south' in settings.INSTALLED_APPS: try: # Older versions of South had this layout from south.management.commands.test import MigrateAndSyncCommand except ImportError: from south.management.commands import MigrateAndSyncCommand from django.core import management management.get_commands() # Point at the core syncdb command when creating tests; tests should # always be up to date with the most recent model structure if hasattr(settings, "SOUTH_TESTS_MIGRATE") and not settings.SOUTH_TESTS_MIGRATE: management._commands['syncdb'] = 'django.core' else: management._commands['syncdb'] = MigrateAndSyncCommand() class MyTestRunner(test_base): def __init__(self, testResult, **kwargs): super(MyTestRunner, self).__init__(**kwargs) self.testResult = testResult def _makeResult(self): return self.testResult class MyTestSuiteRunner(DjangoTestSuiteRunner): def __init__(self, testResult, **kwargs): super(MyTestSuiteRunner, self).__init__(**kwargs) self.testResult = testResult def run_suite(self, suite, **kwargs): return MyTestRunner(self.testResult, verbosity=self.verbosity, failfast=self.failfast).run(suite) runner = MyTestSuiteRunner(result, verbosity=0, interactive=False) try: try: failures = runner.run_tests(test_labels) except SystemExit: raise except Exception: # Note that import error from test files might end up here if isinstance(xmlout, MyXmlStream): xmlout._write_exc_info(sys.exc_info()) else: exc_type, exc, tb = sys.exc_info() sys.excepthook(exc_type, exc, tb) finally: xmlout.finish()
def main(argv): sys.stderr.write(str(argv) + '\n') # XXX Hack to allow setting a different settings module for testing only if 'WING_TEST_DJANGO_SETTINGS_MODULE' in os.environ: os.environ['DJANGO_SETTINGS_MODULE'] = os.environ[ 'WING_TEST_DJANGO_SETTINGS_MODULE'] f, filename, info = imp.find_module('wingtest_common', [os.path.dirname(__file__)]) try: wingtest_common = imp.load_module('wingtest_common', f, filename, info) finally: f.close() if 0: import wingtest_common class CDjangoXMLTestResult(wingtest_common.XmlTestResult): def startTest(self, test): unittest.TestResult.startTest(self, test) class_filename = self._testClassFilename(test) code_filename, lineno = self._sourceCodeLocation(test) if hasattr(test, '_dt_test'): name = test.id() if name.startswith('django.contrib.'): name = name[len('django.contrib.'):] else: parts = name.split('.') name = '.'.join(parts[1:]) parts = name.split('.') if '__test__' in name: new_parts = [] for i, part in enumerate(parts): if i + 1 < len(parts) and parts[i + 1] == '__test__': pass else: new_parts.append(part) name = '.'.join(new_parts) else: name = '.'.join(parts[:-1]) + '.__test__' else: name = self._testDottedName(test) self.stream._start_test(name, class_filename, code_filename=code_filename, lineno=lineno) def _sourceCodeLocation(self, test): if hasattr(test, '_dt_test'): if not test._dt_test.lineno: lineno = 0 else: lineno = test._dt_test.lineno return test._dt_test.filename, lineno else: return wingtest_common.XmlTestResult._sourceCodeLocation( self, test) testedModule = get_tested_module(argv) if testedModule.endswith('.__test__'): testedModule = testedModule[:-len('.__test__')] testedModuleList = testedModule and testedModule.split('.') or [] manage_dir = init_django(argv) class MyXmlStream(wingtest_common.XmlStream): def _start_test(self, name, filename, lineno=None, code_filename=None): testPath, testFilename = os.path.split(filename) testPath = os.path.normpath(testPath) if testFilename == 'tests.py': appName = os.path.basename(testPath) else: appName = os.path.basename(os.path.dirname(testPath)) if name.find('__test__') == -1 and appName != 'django': testname = '%s.%s' % (appName, name) else: testname = name if testname.endswith('__test__'): parts = testname.split('.') if len(parts) > 1: testname = '.'.join(parts[:-1]) sys.stderr.write('test: %s' % testname) super(MyXmlStream, self)._start_test(testname, os.path.join(manage_dir, 'manage.py'), lineno - 1, code_filename) xmlout = wingtest_common.CreateOutputStream(argv, xml_stream_cls=MyXmlStream) sys.stdout = sys.stderr = xmlout wingtest_common.process_directory_arg(argv) result = CDjangoXMLTestResult(sys.stdout) testedModule = '.'.join(testedModuleList[1:]) test_labels = testedModule and [testedModule] or [] # Add 'test' to sys.argv since some code uses it to decide if # it's being tested or just run sys.argv = [os.path.join(manage_dir, 'manage.py'), 'test'] + test_labels sys.stderr.write(str(sys.argv) + '\n') from django.conf import settings try: from django.test.simple import DjangoTestRunner, DjangoTestSuiteRunner test_base = DjangoTestRunner except: try: # Django <= 1.7 from django.test.simple import DjangoTestSuiteRunner except: # Django 1.8+ import django django.setup() from django.test.utils import get_runner DjangoTestSuiteRunner = get_runner(settings) from unittest import TextTestRunner test_base = TextTestRunner # South (schema migration tool) does not use the 'test' command anymore if 'south' in settings.INSTALLED_APPS: try: # Older versions of South had this layout from south.management.commands.test import MigrateAndSyncCommand except ImportError: from south.management.commands import MigrateAndSyncCommand from django.core import management management.get_commands() # Point at the core syncdb command when creating tests; tests should # always be up to date with the most recent model structure if hasattr(settings, "SOUTH_TESTS_MIGRATE") and not settings.SOUTH_TESTS_MIGRATE: management._commands['syncdb'] = 'django.core' else: management._commands['syncdb'] = MigrateAndSyncCommand() class MyTestRunner(test_base): def __init__(self, testResult, **kwargs): super(MyTestRunner, self).__init__(**kwargs) self.testResult = testResult def _makeResult(self): return self.testResult class MyTestSuiteRunner(DjangoTestSuiteRunner): def __init__(self, testResult, **kwargs): super(MyTestSuiteRunner, self).__init__(**kwargs) self.testResult = testResult def run_suite(self, suite, **kwargs): return MyTestRunner(self.testResult, verbosity=self.verbosity, failfast=self.failfast).run(suite) runner = MyTestSuiteRunner(result, verbosity=0, interactive=False) try: try: failures = runner.run_tests(test_labels) except SystemExit: raise except Exception: # Note that import error from test files might end up here if isinstance(xmlout, MyXmlStream): xmlout._write_exc_info(sys.exc_info()) else: exc_type, exc, tb = sys.exc_info() sys.excepthook(exc_type, exc, tb) finally: xmlout.finish()