mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Remove brittle mode of generator3.py tests when it's run in the same process
GitOrigin-RevId: c21ac992fb9c52221c70bd16c57323a6f52c023c
This commit is contained in:
committed by
intellij-monorepo-bot
parent
3bdc81e100
commit
15782e17f4
@@ -5,7 +5,6 @@ import textwrap
|
||||
import unittest
|
||||
|
||||
import generator3
|
||||
from generator3 import GenerationStatus
|
||||
from generator3_tests import GeneratorTestCase, python3_only, python2_only
|
||||
from pycharm_generator_utils.constants import (
|
||||
CACHE_DIR_NAME,
|
||||
@@ -14,13 +13,11 @@ from pycharm_generator_utils.constants import (
|
||||
ENV_TEST_MODE_FLAG,
|
||||
ENV_VERSION,
|
||||
)
|
||||
# Such version implies that skeletons are always regenerated
|
||||
from pycharm_generator_utils.util_methods import mkdir
|
||||
|
||||
# Such version implies that skeletons are always regenerated
|
||||
TEST_GENERATOR_VERSION = '1000.0'
|
||||
|
||||
_run_generator_in_separate_process = True
|
||||
|
||||
|
||||
class SkeletonCachingTest(GeneratorTestCase):
|
||||
PYTHON_STUBS_DIR = 'python_stubs'
|
||||
@@ -39,9 +36,6 @@ class SkeletonCachingTest(GeneratorTestCase):
|
||||
if not extra_syspath_entry:
|
||||
extra_syspath_entry = self.test_data_dir
|
||||
|
||||
if mod_qname and not mod_path:
|
||||
mod_path = self.imported_module_path(mod_qname, extra_syspath_entry)
|
||||
|
||||
env = {
|
||||
ENV_TEST_MODE_FLAG: 'True',
|
||||
ENV_VERSION: gen_version or TEST_GENERATOR_VERSION,
|
||||
@@ -52,57 +46,35 @@ class SkeletonCachingTest(GeneratorTestCase):
|
||||
if extra_env:
|
||||
env.update(extra_env)
|
||||
|
||||
if _run_generator_in_separate_process:
|
||||
generator3_path = os.path.abspath(generator3.__file__)
|
||||
base, ext = os.path.splitext(generator3_path)
|
||||
if ext == '.pyc':
|
||||
generator3_path = base + '.py'
|
||||
args = [
|
||||
sys.executable,
|
||||
generator3_path,
|
||||
'-d', output_dir,
|
||||
'-s', extra_syspath_entry,
|
||||
]
|
||||
generator3_path = os.path.abspath(generator3.__file__)
|
||||
base, ext = os.path.splitext(generator3_path)
|
||||
if ext == '.pyc':
|
||||
generator3_path = base + '.py'
|
||||
args = [
|
||||
sys.executable,
|
||||
generator3_path,
|
||||
'-d', output_dir,
|
||||
'-s', extra_syspath_entry,
|
||||
]
|
||||
|
||||
if extra_args:
|
||||
args.extend(extra_args)
|
||||
if extra_args:
|
||||
args.extend(extra_args)
|
||||
|
||||
if builtins:
|
||||
args.append('-b')
|
||||
else:
|
||||
args.append(mod_qname)
|
||||
if mod_path:
|
||||
args.append(mod_path)
|
||||
|
||||
self.log.info('Launching generator3 as: ' + ' '.join(args))
|
||||
process = subprocess.Popen(args, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
process.wait()
|
||||
sys.stdout.write(process.stdout.read().decode('utf-8'))
|
||||
process.stdout.close()
|
||||
sys.stderr.write(process.stderr.read().decode('utf-8'))
|
||||
process.stderr.close()
|
||||
return process.returncode == 0
|
||||
if builtins:
|
||||
args.append('-b')
|
||||
else:
|
||||
os.environ.update(env)
|
||||
sys.path.append(extra_syspath_entry)
|
||||
try:
|
||||
success = True
|
||||
if builtins:
|
||||
for mod_qname in sys.builtin_module_names:
|
||||
result = generator3.process_one(mod_qname, None, True, output_dir)
|
||||
success &= (result != GenerationStatus.FAILED)
|
||||
else:
|
||||
builtins = mod_qname in sys.builtin_module_names
|
||||
return generator3.process_one(mod_qname, mod_path, builtins, output_dir) != GenerationStatus.FAILED
|
||||
except Exception:
|
||||
self.log.error('Raised inside generator', exc_info=True)
|
||||
return False
|
||||
finally:
|
||||
if mod_qname != 'sys':
|
||||
sys.modules.pop(mod_qname, None)
|
||||
sys.path.pop()
|
||||
for name in env:
|
||||
del os.environ[name]
|
||||
args.append(mod_qname)
|
||||
if mod_path:
|
||||
args.append(mod_path)
|
||||
|
||||
self.log.info('Launching generator3 as: ' + ' '.join(args))
|
||||
process = subprocess.Popen(args, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
process.wait()
|
||||
sys.stdout.write(process.stdout.read().decode('utf-8'))
|
||||
process.stdout.close()
|
||||
sys.stderr.write(process.stderr.read().decode('utf-8'))
|
||||
process.stderr.close()
|
||||
return process.returncode == 0
|
||||
|
||||
@property
|
||||
def temp_skeletons_dir(self):
|
||||
@@ -112,19 +84,6 @@ class SkeletonCachingTest(GeneratorTestCase):
|
||||
def temp_cache_dir(self):
|
||||
return os.path.join(self.temp_dir, self.PYTHON_STUBS_DIR, CACHE_DIR_NAME)
|
||||
|
||||
@staticmethod
|
||||
def imported_module_path(mod_qname, extra_syspath_entry):
|
||||
sys.path.insert(0, extra_syspath_entry)
|
||||
try:
|
||||
return os.path.abspath(getattr(__import__(mod_qname), '__file__'))
|
||||
except AttributeError:
|
||||
pass
|
||||
finally:
|
||||
if mod_qname != 'sys':
|
||||
sys.modules.pop(mod_qname, None)
|
||||
sys.path.pop(0)
|
||||
return None
|
||||
|
||||
def test_layout_for_builtin_module(self):
|
||||
self.run_generator(mod_qname='_ast')
|
||||
self.assertDirLayoutEquals(os.path.join(self.temp_dir, self.PYTHON_STUBS_DIR), """
|
||||
@@ -216,8 +175,6 @@ class SkeletonCachingTest(GeneratorTestCase):
|
||||
def test_skeleton_not_regenerated_for_failed_module_on_same_generator_version(self):
|
||||
self.check_generator_output('failing', mod_path='failing.py', gen_version='0.1', success=False)
|
||||
|
||||
@unittest.skipIf(not _run_generator_in_separate_process,
|
||||
'Importing module causing SIGSEGV cannot be done in the same interpreter')
|
||||
def test_segmentation_fault_handling(self):
|
||||
self.check_generator_output('sigsegv', mod_path='sigsegv.py', gen_version='0.1', success=False)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user