gh-118761: Add test_lazy_import for more modules (#133057)
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
This commit is contained in:
parent
b1aa515bd6
commit
cae660d6dc
@ -26,6 +26,7 @@ from test import support
|
|||||||
from test.support import os_helper
|
from test.support import os_helper
|
||||||
from test.support import skip_emscripten_stack_overflow, skip_wasi_stack_overflow
|
from test.support import skip_emscripten_stack_overflow, skip_wasi_stack_overflow
|
||||||
from test.support.ast_helper import ASTTestMixin
|
from test.support.ast_helper import ASTTestMixin
|
||||||
|
from test.support.import_helper import ensure_lazy_imports
|
||||||
from test.test_ast.utils import to_tuple
|
from test.test_ast.utils import to_tuple
|
||||||
from test.test_ast.snippets import (
|
from test.test_ast.snippets import (
|
||||||
eval_tests, eval_results, exec_tests, exec_results, single_tests, single_results
|
eval_tests, eval_results, exec_tests, exec_results, single_tests, single_results
|
||||||
@ -47,6 +48,12 @@ def ast_repr_update_snapshots() -> None:
|
|||||||
AST_REPR_DATA_FILE.write_text("\n".join(data))
|
AST_REPR_DATA_FILE.write_text("\n".join(data))
|
||||||
|
|
||||||
|
|
||||||
|
class LazyImportTest(unittest.TestCase):
|
||||||
|
@support.cpython_only
|
||||||
|
def test_lazy_import(self):
|
||||||
|
ensure_lazy_imports("ast", {"contextlib", "enum", "inspect", "re", "collections", "argparse"})
|
||||||
|
|
||||||
|
|
||||||
class AST_Tests(unittest.TestCase):
|
class AST_Tests(unittest.TestCase):
|
||||||
maxDiff = None
|
maxDiff = None
|
||||||
|
|
||||||
|
@ -3,8 +3,16 @@ import base64
|
|||||||
import binascii
|
import binascii
|
||||||
import os
|
import os
|
||||||
from array import array
|
from array import array
|
||||||
|
from test.support import cpython_only
|
||||||
from test.support import os_helper
|
from test.support import os_helper
|
||||||
from test.support import script_helper
|
from test.support import script_helper
|
||||||
|
from test.support.import_helper import ensure_lazy_imports
|
||||||
|
|
||||||
|
|
||||||
|
class LazyImportTest(unittest.TestCase):
|
||||||
|
@cpython_only
|
||||||
|
def test_lazy_import(self):
|
||||||
|
ensure_lazy_imports("base64", {"re", "getopt"})
|
||||||
|
|
||||||
|
|
||||||
class LegacyBase64TestCase(unittest.TestCase):
|
class LegacyBase64TestCase(unittest.TestCase):
|
||||||
|
@ -11,9 +11,15 @@ import unittest
|
|||||||
import io
|
import io
|
||||||
import textwrap
|
import textwrap
|
||||||
from test import support
|
from test import support
|
||||||
from test.support.import_helper import import_module
|
from test.support.import_helper import ensure_lazy_imports, import_module
|
||||||
from test.support.pty_helper import run_pty
|
from test.support.pty_helper import run_pty
|
||||||
|
|
||||||
|
class LazyImportTest(unittest.TestCase):
|
||||||
|
@support.cpython_only
|
||||||
|
def test_lazy_import(self):
|
||||||
|
ensure_lazy_imports("cmd", {"inspect", "string"})
|
||||||
|
|
||||||
|
|
||||||
class samplecmdclass(cmd.Cmd):
|
class samplecmdclass(cmd.Cmd):
|
||||||
"""
|
"""
|
||||||
Instance the sampleclass:
|
Instance the sampleclass:
|
||||||
|
@ -10,7 +10,8 @@ import csv
|
|||||||
import gc
|
import gc
|
||||||
import pickle
|
import pickle
|
||||||
from test import support
|
from test import support
|
||||||
from test.support import import_helper, check_disallow_instantiation
|
from test.support import cpython_only, import_helper, check_disallow_instantiation
|
||||||
|
from test.support.import_helper import ensure_lazy_imports
|
||||||
from itertools import permutations
|
from itertools import permutations
|
||||||
from textwrap import dedent
|
from textwrap import dedent
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
@ -1565,6 +1566,10 @@ class MiscTestCase(unittest.TestCase):
|
|||||||
def test__all__(self):
|
def test__all__(self):
|
||||||
support.check__all__(self, csv, ('csv', '_csv'))
|
support.check__all__(self, csv, ('csv', '_csv'))
|
||||||
|
|
||||||
|
@cpython_only
|
||||||
|
def test_lazy_import(self):
|
||||||
|
ensure_lazy_imports("csv", {"re"})
|
||||||
|
|
||||||
def test_subclassable(self):
|
def test_subclassable(self):
|
||||||
# issue 44089
|
# issue 44089
|
||||||
class Foo(csv.Error): ...
|
class Foo(csv.Error): ...
|
||||||
|
@ -4,6 +4,16 @@ import test.support
|
|||||||
import time
|
import time
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
|
from test.support import cpython_only
|
||||||
|
from test.support.import_helper import ensure_lazy_imports
|
||||||
|
|
||||||
|
|
||||||
|
class TestImportTime(unittest.TestCase):
|
||||||
|
|
||||||
|
@cpython_only
|
||||||
|
def test_lazy_import(self):
|
||||||
|
ensure_lazy_imports("email.utils", {"random", "socket"})
|
||||||
|
|
||||||
|
|
||||||
class DateTimeTests(unittest.TestCase):
|
class DateTimeTests(unittest.TestCase):
|
||||||
|
|
||||||
|
@ -19,7 +19,8 @@ from io import StringIO
|
|||||||
from pickle import dumps, loads, PicklingError, HIGHEST_PROTOCOL
|
from pickle import dumps, loads, PicklingError, HIGHEST_PROTOCOL
|
||||||
from test import support
|
from test import support
|
||||||
from test.support import ALWAYS_EQ, REPO_ROOT
|
from test.support import ALWAYS_EQ, REPO_ROOT
|
||||||
from test.support import threading_helper
|
from test.support import threading_helper, cpython_only
|
||||||
|
from test.support.import_helper import ensure_lazy_imports
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
python_version = sys.version_info[:2]
|
python_version = sys.version_info[:2]
|
||||||
@ -5288,6 +5289,10 @@ class MiscTestCase(unittest.TestCase):
|
|||||||
def test__all__(self):
|
def test__all__(self):
|
||||||
support.check__all__(self, enum, not_exported={'bin', 'show_flag_values'})
|
support.check__all__(self, enum, not_exported={'bin', 'show_flag_values'})
|
||||||
|
|
||||||
|
@cpython_only
|
||||||
|
def test_lazy_import(self):
|
||||||
|
ensure_lazy_imports("enum", {"functools", "warnings", "inspect", "re"})
|
||||||
|
|
||||||
def test_doc_1(self):
|
def test_doc_1(self):
|
||||||
class Single(Enum):
|
class Single(Enum):
|
||||||
ONE = 1
|
ONE = 1
|
||||||
|
@ -23,6 +23,7 @@ from inspect import Signature
|
|||||||
|
|
||||||
from test.support import import_helper
|
from test.support import import_helper
|
||||||
from test.support import threading_helper
|
from test.support import threading_helper
|
||||||
|
from test.support import cpython_only
|
||||||
from test.support import EqualToForwardRef
|
from test.support import EqualToForwardRef
|
||||||
|
|
||||||
import functools
|
import functools
|
||||||
@ -63,6 +64,14 @@ class BadTuple(tuple):
|
|||||||
class MyDict(dict):
|
class MyDict(dict):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
class TestImportTime(unittest.TestCase):
|
||||||
|
|
||||||
|
@cpython_only
|
||||||
|
def test_lazy_import(self):
|
||||||
|
import_helper.ensure_lazy_imports(
|
||||||
|
"functools", {"os", "weakref", "typing", "annotationlib", "warnings"}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class TestPartial:
|
class TestPartial:
|
||||||
|
|
||||||
|
@ -6,7 +6,8 @@ import unittest.mock
|
|||||||
from functools import partial
|
from functools import partial
|
||||||
|
|
||||||
from test import support
|
from test import support
|
||||||
from test.support import os_helper
|
from test.support import cpython_only, os_helper
|
||||||
|
from test.support.import_helper import ensure_lazy_imports
|
||||||
|
|
||||||
|
|
||||||
# TODO:
|
# TODO:
|
||||||
@ -931,6 +932,10 @@ class MiscTestCase(unittest.TestCase):
|
|||||||
support.check__all__(self, gettext,
|
support.check__all__(self, gettext,
|
||||||
not_exported={'c2py', 'ENOENT'})
|
not_exported={'c2py', 'ENOENT'})
|
||||||
|
|
||||||
|
@cpython_only
|
||||||
|
def test_lazy_import(self):
|
||||||
|
ensure_lazy_imports("gettext", {"re", "warnings", "locale"})
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
@ -1,13 +1,18 @@
|
|||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from test.support import verbose, is_android, linked_to_musl, os_helper
|
from test.support import cpython_only, verbose, is_android, linked_to_musl, os_helper
|
||||||
from test.support.warnings_helper import check_warnings
|
from test.support.warnings_helper import check_warnings
|
||||||
from test.support.import_helper import import_fresh_module
|
from test.support.import_helper import ensure_lazy_imports, import_fresh_module
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
import unittest
|
import unittest
|
||||||
import locale
|
import locale
|
||||||
import sys
|
import sys
|
||||||
import codecs
|
import codecs
|
||||||
|
|
||||||
|
class LazyImportTest(unittest.TestCase):
|
||||||
|
@cpython_only
|
||||||
|
def test_lazy_import(self):
|
||||||
|
ensure_lazy_imports("locale", {"re", "warnings"})
|
||||||
|
|
||||||
|
|
||||||
class BaseLocalizedTest(unittest.TestCase):
|
class BaseLocalizedTest(unittest.TestCase):
|
||||||
#
|
#
|
||||||
|
@ -6,7 +6,8 @@ import sys
|
|||||||
import unittest.mock
|
import unittest.mock
|
||||||
from platform import win32_edition
|
from platform import win32_edition
|
||||||
from test import support
|
from test import support
|
||||||
from test.support import force_not_colorized, os_helper
|
from test.support import cpython_only, force_not_colorized, os_helper
|
||||||
|
from test.support.import_helper import ensure_lazy_imports
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import _winapi
|
import _winapi
|
||||||
@ -435,6 +436,10 @@ class MiscTestCase(unittest.TestCase):
|
|||||||
def test__all__(self):
|
def test__all__(self):
|
||||||
support.check__all__(self, mimetypes)
|
support.check__all__(self, mimetypes)
|
||||||
|
|
||||||
|
@cpython_only
|
||||||
|
def test_lazy_import(self):
|
||||||
|
ensure_lazy_imports("mimetypes", {"os", "posixpath", "urllib.parse", "argparse"})
|
||||||
|
|
||||||
|
|
||||||
class CommandLineTest(unittest.TestCase):
|
class CommandLineTest(unittest.TestCase):
|
||||||
@force_not_colorized
|
@force_not_colorized
|
||||||
|
@ -14,8 +14,9 @@ import unittest
|
|||||||
|
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
from test import support
|
from test import support
|
||||||
from test.support import os_helper
|
from test.support import cpython_only, os_helper
|
||||||
from test.support.i18n_helper import TestTranslationsBase, update_translation_snapshots
|
from test.support.i18n_helper import TestTranslationsBase, update_translation_snapshots
|
||||||
|
from test.support.import_helper import ensure_lazy_imports
|
||||||
|
|
||||||
import optparse
|
import optparse
|
||||||
from optparse import make_option, Option, \
|
from optparse import make_option, Option, \
|
||||||
@ -1655,6 +1656,10 @@ class MiscTestCase(unittest.TestCase):
|
|||||||
not_exported = {'check_builtin', 'AmbiguousOptionError', 'NO_DEFAULT'}
|
not_exported = {'check_builtin', 'AmbiguousOptionError', 'NO_DEFAULT'}
|
||||||
support.check__all__(self, optparse, not_exported=not_exported)
|
support.check__all__(self, optparse, not_exported=not_exported)
|
||||||
|
|
||||||
|
@cpython_only
|
||||||
|
def test_lazy_import(self):
|
||||||
|
ensure_lazy_imports("optparse", {"textwrap"})
|
||||||
|
|
||||||
|
|
||||||
class TestTranslations(TestTranslationsBase):
|
class TestTranslations(TestTranslationsBase):
|
||||||
def test_translations(self):
|
def test_translations(self):
|
||||||
|
@ -16,6 +16,7 @@ from unittest import mock
|
|||||||
from urllib.request import pathname2url
|
from urllib.request import pathname2url
|
||||||
|
|
||||||
from test.support import import_helper
|
from test.support import import_helper
|
||||||
|
from test.support import cpython_only
|
||||||
from test.support import is_emscripten, is_wasi
|
from test.support import is_emscripten, is_wasi
|
||||||
from test.support import infinite_recursion
|
from test.support import infinite_recursion
|
||||||
from test.support import os_helper
|
from test.support import os_helper
|
||||||
@ -80,6 +81,12 @@ class UnsupportedOperationTest(unittest.TestCase):
|
|||||||
self.assertTrue(isinstance(pathlib.UnsupportedOperation(), NotImplementedError))
|
self.assertTrue(isinstance(pathlib.UnsupportedOperation(), NotImplementedError))
|
||||||
|
|
||||||
|
|
||||||
|
class LazyImportTest(unittest.TestCase):
|
||||||
|
@cpython_only
|
||||||
|
def test_lazy_import(self):
|
||||||
|
import_helper.ensure_lazy_imports("pathlib", {"shutil"})
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Tests for the pure classes.
|
# Tests for the pure classes.
|
||||||
#
|
#
|
||||||
|
@ -15,7 +15,8 @@ from textwrap import dedent
|
|||||||
import doctest
|
import doctest
|
||||||
import unittest
|
import unittest
|
||||||
from test import support
|
from test import support
|
||||||
from test.support import import_helper, os_helper
|
from test.support import cpython_only, import_helper, os_helper
|
||||||
|
from test.support.import_helper import ensure_lazy_imports
|
||||||
|
|
||||||
from test.pickletester import AbstractHookTests
|
from test.pickletester import AbstractHookTests
|
||||||
from test.pickletester import AbstractUnpickleTests
|
from test.pickletester import AbstractUnpickleTests
|
||||||
@ -36,6 +37,12 @@ except ImportError:
|
|||||||
has_c_implementation = False
|
has_c_implementation = False
|
||||||
|
|
||||||
|
|
||||||
|
class LazyImportTest(unittest.TestCase):
|
||||||
|
@cpython_only
|
||||||
|
def test_lazy_import(self):
|
||||||
|
ensure_lazy_imports("pickle", {"re"})
|
||||||
|
|
||||||
|
|
||||||
class PyPickleTests(AbstractPickleModuleTests, unittest.TestCase):
|
class PyPickleTests(AbstractPickleModuleTests, unittest.TestCase):
|
||||||
dump = staticmethod(pickle._dump)
|
dump = staticmethod(pickle._dump)
|
||||||
dumps = staticmethod(pickle._dumps)
|
dumps = staticmethod(pickle._dumps)
|
||||||
|
@ -11,6 +11,9 @@ import re
|
|||||||
import types
|
import types
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
|
from test.support import cpython_only
|
||||||
|
from test.support.import_helper import ensure_lazy_imports
|
||||||
|
|
||||||
# list, tuple and dict subclasses that do or don't overwrite __repr__
|
# list, tuple and dict subclasses that do or don't overwrite __repr__
|
||||||
class list2(list):
|
class list2(list):
|
||||||
pass
|
pass
|
||||||
@ -129,6 +132,10 @@ class QueryTestCase(unittest.TestCase):
|
|||||||
self.b = list(range(200))
|
self.b = list(range(200))
|
||||||
self.a[-12] = self.b
|
self.a[-12] = self.b
|
||||||
|
|
||||||
|
@cpython_only
|
||||||
|
def test_lazy_import(self):
|
||||||
|
ensure_lazy_imports("pprint", {"dataclasses", "re"})
|
||||||
|
|
||||||
def test_init(self):
|
def test_init(self):
|
||||||
pp = pprint.PrettyPrinter()
|
pp = pprint.PrettyPrinter()
|
||||||
pp = pprint.PrettyPrinter(indent=4, width=40, depth=5,
|
pp = pprint.PrettyPrinter(indent=4, width=40, depth=5,
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from test import support
|
from test import support
|
||||||
|
from test.support.import_helper import ensure_lazy_imports
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
from pstats import SortKey
|
from pstats import SortKey
|
||||||
from enum import StrEnum, _test_simple_enum
|
from enum import StrEnum, _test_simple_enum
|
||||||
@ -10,6 +11,12 @@ import pstats
|
|||||||
import tempfile
|
import tempfile
|
||||||
import cProfile
|
import cProfile
|
||||||
|
|
||||||
|
class LazyImportTest(unittest.TestCase):
|
||||||
|
@support.cpython_only
|
||||||
|
def test_lazy_import(self):
|
||||||
|
ensure_lazy_imports("pstats", {"typing"})
|
||||||
|
|
||||||
|
|
||||||
class AddCallersTestCase(unittest.TestCase):
|
class AddCallersTestCase(unittest.TestCase):
|
||||||
"""Tests for pstats.add_callers helper."""
|
"""Tests for pstats.add_callers helper."""
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ import itertools
|
|||||||
import shlex
|
import shlex
|
||||||
import string
|
import string
|
||||||
import unittest
|
import unittest
|
||||||
|
from test.support import cpython_only
|
||||||
from test.support import import_helper
|
from test.support import import_helper
|
||||||
|
|
||||||
|
|
||||||
@ -364,6 +365,7 @@ class ShlexTest(unittest.TestCase):
|
|||||||
with self.assertRaises(AttributeError):
|
with self.assertRaises(AttributeError):
|
||||||
shlex_instance.punctuation_chars = False
|
shlex_instance.punctuation_chars = False
|
||||||
|
|
||||||
|
@cpython_only
|
||||||
def test_lazy_imports(self):
|
def test_lazy_imports(self):
|
||||||
import_helper.ensure_lazy_imports('shlex', {'collections', 're', 'os'})
|
import_helper.ensure_lazy_imports('shlex', {'collections', 're', 'os'})
|
||||||
|
|
||||||
|
@ -2,8 +2,9 @@ import unittest
|
|||||||
from unittest import mock
|
from unittest import mock
|
||||||
from test import support
|
from test import support
|
||||||
from test.support import (
|
from test.support import (
|
||||||
is_apple, os_helper, refleak_helper, socket_helper, threading_helper
|
cpython_only, is_apple, os_helper, refleak_helper, socket_helper, threading_helper
|
||||||
)
|
)
|
||||||
|
from test.support.import_helper import ensure_lazy_imports
|
||||||
import _thread as thread
|
import _thread as thread
|
||||||
import array
|
import array
|
||||||
import contextlib
|
import contextlib
|
||||||
@ -257,6 +258,12 @@ HAVE_SOCKET_HYPERV = _have_socket_hyperv()
|
|||||||
# Size in bytes of the int type
|
# Size in bytes of the int type
|
||||||
SIZEOF_INT = array.array("i").itemsize
|
SIZEOF_INT = array.array("i").itemsize
|
||||||
|
|
||||||
|
class TestLazyImport(unittest.TestCase):
|
||||||
|
@cpython_only
|
||||||
|
def test_lazy_import(self):
|
||||||
|
ensure_lazy_imports("socket", {"array", "selectors"})
|
||||||
|
|
||||||
|
|
||||||
class SocketTCPTest(unittest.TestCase):
|
class SocketTCPTest(unittest.TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
@ -2,6 +2,14 @@ import unittest
|
|||||||
import string
|
import string
|
||||||
from string import Template
|
from string import Template
|
||||||
import types
|
import types
|
||||||
|
from test.support import cpython_only
|
||||||
|
from test.support.import_helper import ensure_lazy_imports
|
||||||
|
|
||||||
|
|
||||||
|
class LazyImportTest(unittest.TestCase):
|
||||||
|
@cpython_only
|
||||||
|
def test_lazy_import(self):
|
||||||
|
ensure_lazy_imports("base64", {"re", "collections"})
|
||||||
|
|
||||||
|
|
||||||
class ModuleTest(unittest.TestCase):
|
class ModuleTest(unittest.TestCase):
|
||||||
|
@ -5,7 +5,7 @@ Tests for the threading module.
|
|||||||
import test.support
|
import test.support
|
||||||
from test.support import threading_helper, requires_subprocess, requires_gil_enabled
|
from test.support import threading_helper, requires_subprocess, requires_gil_enabled
|
||||||
from test.support import verbose, cpython_only, os_helper
|
from test.support import verbose, cpython_only, os_helper
|
||||||
from test.support.import_helper import import_module
|
from test.support.import_helper import ensure_lazy_imports, import_module
|
||||||
from test.support.script_helper import assert_python_ok, assert_python_failure
|
from test.support.script_helper import assert_python_ok, assert_python_failure
|
||||||
from test.support import force_not_colorized
|
from test.support import force_not_colorized
|
||||||
|
|
||||||
@ -120,6 +120,10 @@ class BaseTestCase(unittest.TestCase):
|
|||||||
class ThreadTests(BaseTestCase):
|
class ThreadTests(BaseTestCase):
|
||||||
maxDiff = 9999
|
maxDiff = 9999
|
||||||
|
|
||||||
|
@cpython_only
|
||||||
|
def test_lazy_import(self):
|
||||||
|
ensure_lazy_imports("threading", {"functools", "warnings"})
|
||||||
|
|
||||||
@cpython_only
|
@cpython_only
|
||||||
def test_name(self):
|
def test_name(self):
|
||||||
def func(): pass
|
def func(): pass
|
||||||
|
@ -24,10 +24,12 @@ from test.support import script_helper, os_helper
|
|||||||
from test.support import (
|
from test.support import (
|
||||||
findfile, requires_zlib, requires_bz2, requires_lzma,
|
findfile, requires_zlib, requires_bz2, requires_lzma,
|
||||||
captured_stdout, captured_stderr, requires_subprocess,
|
captured_stdout, captured_stderr, requires_subprocess,
|
||||||
|
cpython_only
|
||||||
)
|
)
|
||||||
from test.support.os_helper import (
|
from test.support.os_helper import (
|
||||||
TESTFN, unlink, rmtree, temp_dir, temp_cwd, fd_count, FakePath
|
TESTFN, unlink, rmtree, temp_dir, temp_cwd, fd_count, FakePath
|
||||||
)
|
)
|
||||||
|
from test.support.import_helper import ensure_lazy_imports
|
||||||
|
|
||||||
|
|
||||||
TESTFN2 = TESTFN + "2"
|
TESTFN2 = TESTFN + "2"
|
||||||
@ -49,6 +51,13 @@ def get_files(test):
|
|||||||
yield f
|
yield f
|
||||||
test.assertFalse(f.closed)
|
test.assertFalse(f.closed)
|
||||||
|
|
||||||
|
|
||||||
|
class LazyImportTest(unittest.TestCase):
|
||||||
|
@cpython_only
|
||||||
|
def test_lazy_import(self):
|
||||||
|
ensure_lazy_imports("zipfile", {"typing"})
|
||||||
|
|
||||||
|
|
||||||
class AbstractTestsWithSourceFile:
|
class AbstractTestsWithSourceFile:
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUpClass(cls):
|
def setUpClass(cls):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user