mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 21:43:21 +00:00
test_runner: Remove customized run_test, TestSuite, and TestLoader.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
committed by
Tim Abbott
parent
e40cdc6c2c
commit
bb8dcb9b1e
@@ -1,12 +1,10 @@
|
|||||||
import os
|
import os
|
||||||
import random
|
import random
|
||||||
import shutil
|
import shutil
|
||||||
import sys
|
|
||||||
import unittest
|
|
||||||
from functools import partial
|
from functools import partial
|
||||||
from multiprocessing.sharedctypes import Synchronized
|
from multiprocessing.sharedctypes import Synchronized
|
||||||
from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Type, Union
|
from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Type, Union
|
||||||
from unittest import loader, runner
|
from unittest import TestLoader, TestSuite, runner
|
||||||
from unittest.result import TestResult
|
from unittest.result import TestResult
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@@ -44,20 +42,6 @@ TEST_RUN_DIR = get_or_create_dev_uuid_var_path(
|
|||||||
|
|
||||||
_worker_id = 0 # Used to identify the worker process.
|
_worker_id = 0 # Used to identify the worker process.
|
||||||
|
|
||||||
def run_test(test: TestCase, result: TestResult) -> bool:
|
|
||||||
failed = False
|
|
||||||
|
|
||||||
try:
|
|
||||||
test._pre_setup()
|
|
||||||
except Exception:
|
|
||||||
result.addError(test, sys.exc_info())
|
|
||||||
return True
|
|
||||||
|
|
||||||
test(result) # unittest will handle skipping, error, failure and success.
|
|
||||||
|
|
||||||
test._post_teardown()
|
|
||||||
return failed
|
|
||||||
|
|
||||||
class TextTestResult(runner.TextTestResult):
|
class TextTestResult(runner.TextTestResult):
|
||||||
"""
|
"""
|
||||||
This class has unpythonic function names because base class follows
|
This class has unpythonic function names because base class follows
|
||||||
@@ -120,7 +104,7 @@ def process_instrumented_calls(func: Callable[[Dict[str, Any]], None]) -> None:
|
|||||||
for call in test_helpers.INSTRUMENTED_CALLS:
|
for call in test_helpers.INSTRUMENTED_CALLS:
|
||||||
func(call)
|
func(call)
|
||||||
|
|
||||||
SerializedSubsuite = Tuple[Type['TestSuite'], List[str]]
|
SerializedSubsuite = Tuple[Type[TestSuite], List[str]]
|
||||||
SubsuiteArgs = Tuple[Type['RemoteTestRunner'], int, SerializedSubsuite, bool]
|
SubsuiteArgs = Tuple[Type['RemoteTestRunner'], int, SerializedSubsuite, bool]
|
||||||
|
|
||||||
def run_subsuite(args: SubsuiteArgs) -> Tuple[int, Any]:
|
def run_subsuite(args: SubsuiteArgs) -> Tuple[int, Any]:
|
||||||
@@ -229,47 +213,6 @@ def init_worker(counter: Synchronized) -> None:
|
|||||||
if not found:
|
if not found:
|
||||||
print("*** Upload directory not found.")
|
print("*** Upload directory not found.")
|
||||||
|
|
||||||
class TestSuite(unittest.TestSuite):
|
|
||||||
def run(self, result: TestResult, debug: bool=False) -> TestResult:
|
|
||||||
"""
|
|
||||||
This function mostly contains the code from
|
|
||||||
unittest.TestSuite.run. The need to override this function
|
|
||||||
occurred because we use run_test to run the testcase.
|
|
||||||
"""
|
|
||||||
topLevel = False
|
|
||||||
if getattr(result, '_testRunEntered', False) is False:
|
|
||||||
result._testRunEntered = topLevel = True # type: ignore[attr-defined]
|
|
||||||
|
|
||||||
for test in self:
|
|
||||||
# but this is correct. Taken from unittest.
|
|
||||||
if result.shouldStop:
|
|
||||||
break
|
|
||||||
|
|
||||||
if isinstance(test, TestSuite):
|
|
||||||
test.run(result, debug=debug)
|
|
||||||
else:
|
|
||||||
self._tearDownPreviousClass(test, result) # type: ignore[attr-defined]
|
|
||||||
self._handleModuleFixture(test, result) # type: ignore[attr-defined]
|
|
||||||
self._handleClassSetUp(test, result) # type: ignore[attr-defined]
|
|
||||||
result._previousTestClass = test.__class__ # type: ignore[attr-defined]
|
|
||||||
if (getattr(test.__class__, '_classSetupFailed', False) or
|
|
||||||
getattr(result, '_moduleSetUpFailed', False)):
|
|
||||||
continue
|
|
||||||
|
|
||||||
failed = run_test(test, result)
|
|
||||||
if failed or result.shouldStop:
|
|
||||||
result.shouldStop = True
|
|
||||||
break
|
|
||||||
|
|
||||||
if topLevel:
|
|
||||||
self._tearDownPreviousClass(None, result) # type: ignore[attr-defined]
|
|
||||||
self._handleModuleTearDown(result) # type: ignore[attr-defined]
|
|
||||||
result._testRunEntered = False # type: ignore[attr-defined]
|
|
||||||
return result
|
|
||||||
|
|
||||||
class TestLoader(loader.TestLoader):
|
|
||||||
suiteClass = TestSuite
|
|
||||||
|
|
||||||
class ParallelTestSuite(django_runner.ParallelTestSuite):
|
class ParallelTestSuite(django_runner.ParallelTestSuite):
|
||||||
run_subsuite = run_subsuite
|
run_subsuite = run_subsuite
|
||||||
init_worker = init_worker
|
init_worker = init_worker
|
||||||
@@ -309,8 +252,6 @@ def initialize_worker_path(worker_id: int) -> None:
|
|||||||
settings.SENDFILE_ROOT = os.path.join(settings.LOCAL_UPLOADS_DIR, "files")
|
settings.SENDFILE_ROOT = os.path.join(settings.LOCAL_UPLOADS_DIR, "files")
|
||||||
|
|
||||||
class Runner(DiscoverRunner):
|
class Runner(DiscoverRunner):
|
||||||
test_suite = TestSuite
|
|
||||||
test_loader = TestLoader()
|
|
||||||
parallel_test_suite = ParallelTestSuite
|
parallel_test_suite = ParallelTestSuite
|
||||||
|
|
||||||
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
||||||
@@ -476,7 +417,7 @@ def get_test_names(suite: Union[TestSuite, ParallelTestSuite]) -> List[str]:
|
|||||||
else:
|
else:
|
||||||
return [t.id() for t in get_tests_from_suite(suite)]
|
return [t.id() for t in get_tests_from_suite(suite)]
|
||||||
|
|
||||||
def get_tests_from_suite(suite: unittest.TestSuite) -> TestCase:
|
def get_tests_from_suite(suite: TestSuite) -> TestCase:
|
||||||
for test in suite:
|
for test in suite:
|
||||||
if isinstance(test, TestSuite):
|
if isinstance(test, TestSuite):
|
||||||
yield from get_tests_from_suite(test)
|
yield from get_tests_from_suite(test)
|
||||||
|
|||||||
Reference in New Issue
Block a user