# テスト方針書

## 概要

本ドキュメントは、Doom Emacs（Emacs設定フレームワーク）プロジェクトにおけるテスト戦略、テスト環境、テストツール、およびCI/CD連携について定義する。Doom Emacsは約150のオプションモジュールで構成されるEmacs Lispプロジェクトであり、Buttercup（BDDテストフレームワーク）およびERT（Emacs Regression Testing）を使用した単体テストを実施している。

## テスト戦略

### テストレベル

| レベル | 目的 | 担当 |
| --- | --- | --- |
| 単体テスト | 各モジュール・関数の動作検証。UIコンポーネント、エディタ機能、言語サポート、ツール連携等の個別機能をテスト | 開発者 |
| 結合テスト | モジュール間の連携確認。require!/load!によるモジュール読み込み、persp-mode等の外部パッケージとの統合を検証 | 開発者 |
| システムテスト | Doom Emacs全体としての動作確認。プロファイルシステム、CLIコマンド（doom sync, doom doctor等）の動作検証 | 開発者・QA |
| 受入テスト | エンドユーザー観点でのEmacs設定として正常動作することを確認 | コミュニティ |

### テスト種別

| 種別 | 概要 | 実施タイミング |
| --- | --- | --- |
| 機能テスト | ポップアップ制御、ワークスペース管理、パス管理、Evil統合等の機能動作確認 | 開発時・PR作成時 |
| 性能テスト | 起動時間、ランタイムパフォーマンスの測定（Doomの設計思想「Gotta go fast」に基づく） | リリース前 |
| セキュリティテスト | パスワード管理（tools/pass）等のセキュリティ関連機能の検証 | 機能変更時 |

## テスト環境

| 環境 | 用途 | 構成 |
| --- | --- | --- |
| ローカル開発環境 | 開発者による単体テスト実行 | GNU Emacs 27.1-30.2、Buttercup/ERT |
| CI環境 | 自動化テスト・リント実行 | GitHub Actions（doomemacs/ci）、lint-commits.yml |
| 隔離テスト環境 | テスト分離レベルに応じた実行 | nil（同一セッション）、file、group、t（完全分離） |

## テストツール

| ツール | 用途 | バージョン |
| --- | --- | --- |
| Buttercup | Emacs Lisp用BDDテストフレームワーク。describe/it構文でテストを記述 | 最新安定版 |
| ERT (Emacs Regression Testing) | Emacs標準テストフレームワーク（ert-deftest形式） | Emacs内蔵 |
| Overseer | ERTテスト実行・管理。buttercup-minor-modeと連携 | 最新安定版 |
| Flycheck/Flymake | 静的解析・シンタックスチェック | Emacs内蔵/パッケージ |
| flycheck-package | パッケージ品質チェック | 最新安定版 |

## カバレッジ目標

| 対象 | 目標値 |
| --- | --- |
| 行カバレッジ | 明示的な目標値は設定されていない |
| 分岐カバレッジ | 明示的な目標値は設定されていない |

注: 現時点でプロジェクトにカバレッジ測定ツールの設定は確認されていない。テストは主要なモジュール（ui/popup、ui/workspaces、ui/doom-dashboard、tools/pass、tools/ein、completion/company、lang/org、lang/web、editor/evil）に対して実装されている。

## テストデータ

テストデータは各テストファイル内で直接定義される。主な準備方法：

- **before-all / before-each**: テストスイート・テストケース前の初期化処理
- **after-all / after-each**: テスト後のクリーンアップ処理
- **spy-on**: 外部依存関数のモック化（例：auth-source-pass-parse-entry、doom-project-root）
- **バッファ操作**: get-buffer-create、set-buffer等によるテスト用バッファの作成・操作
- **ウィンドウ構成**: current-window-configuration / set-window-configurationによる状態保存・復元

## 不具合管理

- **GitHub Issues**: 不具合報告・追跡の主要ツール
- **Discord Server**: コミュニティサポート・不具合報告の補助チャネル
- **doom doctor**: ユーザー環境の診断コマンド、一般的な問題の自動検出
- **Upstream bugs プロジェクトボード**: 外部パッケージ起因の問題を追跡

## CI/CD連携

### GitHub Actions ワークフロー

| ワークフロー | トリガー | 目的 |
| --- | --- | --- |
| lint-commits.yml | push, pull_request | コミットメッセージのリント（doomemacs/ci@legacy） |
| triage.yml | スケジュール（12時間ごと） | 古いIssueのマーク、クローズスレッドのロック |

### テスト実行コマンド

テストは `doom test` CLIコマンド（lisp/cli/test.el）で実行される。

```bash
# ERTバックエンドでテスト実行
doom test --ert [targets]

# Buttercupバックエンドでテスト実行
doom test --buttercup [targets]

# 並列実行（ジョブ数指定）
doom test -j 4 [targets]
```

### テスト分離レベル

`doom-test-isolation-level` 変数により分離レベルを制御：
- `nil`: 全テストを同一セッションで実行
- `file`: ファイルごとに分離セッション
- `group`: グループごとに分離セッション
- `t`: 個別テストごとに分離セッション（非常に遅い）

## 備考

- **テストファイル命名規則**: `test/test-*.el` または `test-*.el` パターン
- **Buttercup minor mode**: `/test[/-].+\.el$` パターンにマッチするファイルで自動有効化
- **テスト実行キーバインド**:
  - `SPC m t t`: 現在のファイルのButtercupテスト実行
  - `SPC m t a`: プロジェクト全体のButtercupテスト実行
  - `SPC m t s`: カーソル位置のテスト実行
- **注意事項**: lisp/cli/test.el は v3.1 で修正予定（FIXME コメントあり）
