123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- # -*- coding: utf-8 -*-
- from __future__ import print_function, absolute_import, division
- import os
- import re
- import pytest
- import yatest.common as yc
- def clean_traceback(traceback):
- traceback = re.sub(br'\033\[(\d|;)+?m', b'', traceback) # strip ANSI codes
- traceback = re.sub(br' at 0x[0-9a-fA-F]+', b'', traceback) # remove object ids
- return traceback
- @pytest.mark.parametrize('mode', [
- 'default',
- 'ultratb_color',
- 'ultratb_verbose',
- ])
- @pytest.mark.parametrize('entry_point', [
- 'main',
- 'custom',
- ])
- def test_traceback(mode, entry_point):
- tb_tool = yc.build_path('library/python/runtime_py3/test/traceback/traceback')
- stdout_path = yc.test_output_path('stdout_raw.txt')
- stderr_path = yc.test_output_path('stderr_raw.txt')
- filtered_stdout_path = yc.test_output_path('stdout.txt')
- filtered_stderr_path = yc.test_output_path('stderr.txt')
- env = os.environ.copy()
- env.pop('PYTHONPATH', None) # Do not let program peek into its sources on filesystem
- if entry_point == 'custom':
- env['Y_PYTHON_ENTRY_POINT'] = 'library.python.runtime_py3.test.traceback.crash:main'
- proc = yc.execute(
- command=[tb_tool, mode],
- env=env,
- stdout=stdout_path,
- stderr=stderr_path,
- check_exit_code=False,
- )
- with open(filtered_stdout_path, 'wb') as f:
- f.write(clean_traceback(proc.std_out))
- with open(filtered_stderr_path, 'wb') as f:
- f.write(clean_traceback(proc.std_err))
- return {
- 'stdout': yc.canonical_file(
- filtered_stdout_path,
- local=True,
- ),
- 'stderr': yc.canonical_file(
- filtered_stderr_path,
- local=True,
- ),
- }
|