kvs/тесты/двоеточие_в_строке/двоеточие_в_строке.py

90 lines
4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
import subprocess
import sys
import os
# Пути относительно папки двоеточие_в_строке/
PROJECT_ROOT = "../../" # корень kvs/
SOURCE_REL = "тесты/двоеточие_в_строке/двоеточие_в_строке.квс"
ELF_REL = "тесты/двоеточие_в_строке/двоеточие_в_строке.elf"
def clean():
"""Удалить временные файлы после теста"""
files = [
"двоеточие_в_строке.elf",
"двоеточие_в_строке.csv",
"двоеточие_в_строке.аст",
"двоеточие_в_строке.токены",
"двоеточие_в_строке.константа",
"двоеточие_в_строке_pass4.log"
]
for f in files:
if os.path.exists(f):
os.remove(f)
def main():
print("DEBUG: Начало теста двоеточие_в_строке", file=sys.stderr)
# Переходим в корень проекта для сборки
os.chdir(PROJECT_ROOT)
print(f"DEBUG: Рабочая папка = {os.getcwd()}", file=sys.stderr)
# 1. Сборка (запускаем из корня)
print("DEBUG: Сборка двоеточие_в_строке.квс", file=sys.stderr)
build = subprocess.run(["python3", "квс_сборка.py", SOURCE_REL],
capture_output=True, text=True)
if build.returncode != 0:
print(f"❌ Ошибка сборки: {build.returncode}", file=sys.stderr)
print(f"STDERR: {build.stderr}", file=sys.stderr)
print(f"STDOUT: {build.stdout}", file=sys.stderr)
clean()
sys.exit(1)
print("DEBUG: Сборка успешна", file=sys.stderr)
# Возвращаемся в папку двоеточие_в_строке для запуска
os.chdir("тесты/двоеточие_в_строке")
# 2. Проверка, что ELF создан
if not os.path.exists("двоеточие_в_строке.elf"):
print("❌ Файл двоеточие_в_строке.elf не создан", file=sys.stderr)
clean()
sys.exit(1)
print("DEBUG: ELF файл существует", file=sys.stderr)
# 3. Запуск и проверка
print("DEBUG: Запуск ELF", file=sys.stderr)
run = subprocess.run(["./двоеточие_в_строке.elf"], capture_output=True, text=True)
print(f"DEBUG: Код возврата = {run.returncode}", file=sys.stderr)
print(f"DEBUG: stdout = {repr(run.stdout)}", file=sys.stderr)
# Проверка вывода — здесь ключевой момент: строка с двоеточием
expected_output = "Приве : мир!\n"
if run.stdout != expected_output:
print(f"❌ Вывод не совпадает", file=sys.stderr)
print(f" Ожидалось: {repr(expected_output)}", file=sys.stderr)
print(f" Получено: {repr(run.stdout)}", file=sys.stderr)
# Дополнительная диагностика
if "Приве " in run.stdout and " мир!\n" not in run.stdout:
print(f" 💡 Похоже, строка обрезана на пробеле или двоеточии", file=sys.stderr)
elif "Приве" in run.stdout and "мир" not in run.stdout:
print(f" 💡 Похоже, строка обрезана на двоеточии", file=sys.stderr)
clean()
sys.exit(1)
# Проверка кода возврата
if run.returncode != 0:
print(f"❌ Код возврата: ожидался 0, получен {run.returncode}", file=sys.stderr)
clean()
sys.exit(1)
# Успех
print("✅ Тест пройден: строка с двоеточием обработана корректно", file=sys.stderr)
clean()
sys.exit(0)
if __name__ == "__main__":
main()