Добавить пояснения к исходникам, заголовкам TI, настройкам CCS и существующим проверкам. Зафиксировать правила кодировки, обзор модулей и аудит комментариев.
67 lines
6.5 KiB
Python
67 lines
6.5 KiB
Python
# Проверка 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')
|