Newer
Older
TIASjudge / tests / conftest.py
"""テスト共通のフィクスチャ."""

import os
from pathlib import Path

import pytest

REPO_ROOT = Path(__file__).resolve().parents[1]

#: Qt をヘッドレス(画面なし)で動かすためのプラットフォーム指定.
#: GUI の自動テストは書かない方針(testing.md)だが,`gui` モジュールの import や
#: `--check` 起動で QApplication が生成されるため,CI でも安全に動くよう offscreen を既定にする.
#: 開発者が実画面で確認したい場合は環境変数を明示すれば上書きできる.
QT_PLATFORM_ENV_VAR = "QT_QPA_PLATFORM"
os.environ.setdefault(QT_PLATFORM_ENV_VAR, "offscreen")


@pytest.fixture(scope="session")
def headless_env() -> dict[str, str]:
    """サブプロセスで Qt を起動するための環境変数(offscreen 指定込み)を返す."""
    return {**os.environ, QT_PLATFORM_ENV_VAR: "offscreen"}


@pytest.fixture(scope="session")
def repo_root() -> Path:
    """リポジトリ直下(`pyproject.toml` のある場所)を返す."""
    return REPO_ROOT


@pytest.fixture(scope="session")
def data_csv_path(repo_root: Path) -> Path:
    """同梱学習データ `data/data.csv` のパスを返す(project-structure.md)."""
    return repo_root / "data" / "data.csv"


@pytest.fixture(scope="session")
def data_csv_rows(data_csv_path: Path) -> list[list[str]]:
    """`data.csv` を UTF-8 で読み,全行をカンマ分割した 2 次元リストで返す."""
    text = data_csv_path.read_text(encoding="utf-8")
    return [line.split(",") for line in text.splitlines()]