# Проверка ump_logger на модели пк. Комментарии и исходный текст в UTF-8. # Продолжает текущий вызов, список или выражение: """Boot regression independent of the external shared protocol checkout.; порядок аргументов сохраняется. """Boot regression independent of the external shared protocol checkout. Run with GCC in PATH: python tests/ump_logger/run_init_test.py The negative control must fail without the boot initialization call. """ # Подключает модуль os для этой проверки или подготовки сборки. import os # Импортирует необходимые имена: from pathlib import Path. from pathlib import Path # Подключает модуль subprocess для этой проверки или подготовки сборки. import subprocess # Подключает модуль tempfile для этой проверки или подготовки сборки. import tempfile # Задаёт root по выражению справа; значение используется последующими операциями. root = Path(__file__).resolve().parents[2] # Задаёт source по выражению справа; значение используется последующими операциями. source = root / 'tests/ump_logger/init_test.c' # Задаёт compiler по выражению справа; значение используется последующими операциями. compiler = os.environ.get('CC', 'gcc') # Открывает управляемый ресурс tempfile.TemporaryDirectory(prefix='ump-init-') as directory с автоматическим освобождением. with tempfile.TemporaryDirectory(prefix='ump-init-') as directory: # Задаёт directory по выражению справа; значение используется последующими операциями. directory = Path(directory) # Читает исходный файл или образ для последующей проверки и разбора. text = source.read_text(encoding="utf-8").replace( # Продолжает текущий вызов, список или выражение: '../../Source/Internal/log_to_mem.c',; порядок аргументов сохраняется. '../../Source/Internal/log_to_mem.c', # Продолжает текущий вызов, список или выражение: (root / 'Source/Internal/log_to_mem.c').as_posix(),; порядок аргументов сохраняется. (root / 'Source/Internal/log_to_mem.c').as_posix(), # Продолжает текущий вызов, список или выражение: ); порядок аргументов сохраняется. ) # Перебирает initialize in (False, True) в указанном порядке. for initialize in (False, True): # Задаёт case по выражению справа; значение используется последующими операциями. case = directory / 'init_test.c' # Сохраняет подготовленный файл в указанном формате для следующего шага. case.write_text(text if initialize else text.replace('ump_log_init();', ';'), encoding="utf-8") # Задаёт executable по выражению справа; значение используется последующими операциями. executable = directory / 'init_test.exe' # Запускает внешний компилятор, генератор или тест; ненулевой результат проверяется параметрами вызова. subprocess.run([ # Продолжает текущий вызов, список или выражение: compiler, '-Wno-unknown-pragmas', '-Wno-int-to-pointer-cast',; порядок аргументов сохраняется. compiler, '-Wno-unknown-pragmas', '-Wno-int-to-pointer-cast', # Продолжает текущий вызов, список или выражение: '-I' + str(root / 'tests/ump_logger/stubs'),; порядок аргументов сохраняется. '-I' + str(root / 'tests/ump_logger/stubs'), # Продолжает текущий вызов, список или выражение: '-I' + str(root / 'Source/Internal/Include'),; порядок аргументов сохраняется. '-I' + str(root / 'Source/Internal/Include'), # Продолжает текущий вызов, список или выражение: str(case), '-o', str(executable),; порядок аргументов сохраняется. str(case), '-o', str(executable), # Задаёт ], check по выражению справа; значение используется последующими операциями. ], check=True) # Запускает внешний компилятор, генератор или тест; ненулевой результат проверяется параметрами вызова. result = subprocess.run([str(executable)]) # Проверяет условие if initialize перед выполнением следующего блока. if initialize: # Проверяет обязательное условие result.returncode == 0, f'Initialization failed: {result.returncode}'; нарушение делает тест неуспешным. assert result.returncode == 0, f'Initialization failed: {result.returncode}' # Обрабатывает альтернативу предыдущего условия. else: # Проверяет обязательное условие result.returncode != 0, 'Negative control unexpectedly passed'; нарушение делает тест неуспешным. assert result.returncode != 0, 'Negative control unexpectedly passed' # Продолжает текущий вызов, список или выражение: print(f'{"Initialized boot" if initialize else "Dirty RAM negative control"}: PASS'); порядок аргументов сохраняется. print(f'{"Initialized boot" if initialize else "Dirty RAM negative control"}: PASS')