mirror of
https://github.com/zulip/zulip.git
synced 2026-07-18 21:04:19 +08:00
Since relatively few systems have the typing module, this makes the checks for whether the user is properly running our test scripts in the virtualenv more likely to trigger well.
100 lines
3.4 KiB
Python
Executable File
100 lines
3.4 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
from __future__ import print_function
|
|
import optparse
|
|
import os
|
|
import sys
|
|
import subprocess
|
|
|
|
try:
|
|
import django
|
|
from django.conf import settings
|
|
from django.test.utils import get_runner
|
|
# We don't actually need typing, but it's a good guard for being
|
|
# outside a Zulip virtualenv.
|
|
import typing
|
|
except ImportError as e:
|
|
print("ImportError: {}".format(e))
|
|
print("You need to run the Zulip tests inside a Zulip dev environment.")
|
|
print("If you are using Vagrant, you can `vagrant ssh` to enter the Vagrant guest.")
|
|
sys.exit(1)
|
|
|
|
if __name__ == "__main__":
|
|
TOOLS_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
sys.path.insert(0, os.path.dirname(TOOLS_DIR))
|
|
os.environ['DJANGO_SETTINGS_MODULE'] = 'zproject.test_settings'
|
|
# "-u" uses unbuffered IO, which is important when wrapping it in subprocess
|
|
os.environ['PYTHONUNBUFFERED'] = 'y'
|
|
django.setup()
|
|
|
|
parser = optparse.OptionParser()
|
|
parser.add_option('--nonfatal-errors', action="store_false", default=True,
|
|
dest="fatal_errors", help="Continue past test failures to run all tests")
|
|
parser.add_option('--coverage', dest='coverage',
|
|
action="store_true",
|
|
default=False, help='Compute test coverage.')
|
|
parser.add_option('--profile', dest='profile',
|
|
action="store_true",
|
|
default=False, help='Profile test runtime.')
|
|
parser.add_option('--no-shallow', dest='no_shallow',
|
|
action="store_true",
|
|
default=False,
|
|
help="Don't allow shallow testing of templates")
|
|
parser.add_option('--verbose', dest='verbose',
|
|
action="store_true",
|
|
default=False,
|
|
help="Show detailed output")
|
|
|
|
(options, args) = parser.parse_args()
|
|
if len(args) == 0:
|
|
suites = ["zerver.tests"]
|
|
else:
|
|
suites = args
|
|
|
|
if options.coverage:
|
|
import coverage
|
|
cov = coverage.Coverage(omit="*/zulip-venv-cache/*")
|
|
cov.start()
|
|
if options.profile:
|
|
import cProfile
|
|
prof = cProfile.Profile()
|
|
prof.enable()
|
|
|
|
subprocess.call(os.path.join(TOOLS_DIR, 'setup', 'generate-fixtures'))
|
|
|
|
TestRunner = get_runner(settings)
|
|
test_runner = TestRunner()
|
|
failures = test_runner.run_tests(suites, fatal_errors=options.fatal_errors)
|
|
|
|
templates_not_rendered = test_runner.get_shallow_tested_templates()
|
|
if templates_not_rendered:
|
|
missed_count = len(templates_not_rendered)
|
|
if options.no_shallow or options.verbose:
|
|
print("*** Shallow tested templates: {}".format(missed_count))
|
|
|
|
if options.verbose:
|
|
for template in templates_not_rendered:
|
|
print('--- {}'.format(template))
|
|
|
|
if options.no_shallow:
|
|
failures = True
|
|
|
|
if options.coverage:
|
|
cov.stop()
|
|
cov.save()
|
|
print("Printing coverage data")
|
|
cov.report(show_missing=False)
|
|
cov.html_report()
|
|
print("HTML report saved to htmlcov/")
|
|
if options.profile:
|
|
prof.disable()
|
|
prof.dump_stats("/tmp/profile.data")
|
|
print("Profile data saved to /tmp/profile.data")
|
|
print("You can visualize it using e.g. `runsnake /tmp/profile.data`")
|
|
|
|
if failures:
|
|
print('FAILED!')
|
|
else:
|
|
print('DONE!')
|
|
sys.exit(bool(failures))
|