# テスト方針書

## 概要

本ドキュメントは、space-vim プロジェクトにおけるテスト戦略・方針を定義するものです。space-vim は Vim および NeoVim 向けのディストリビューションであり、Vim script（.vim ファイル）とシェルスクリプト（.sh ファイル）で構成されています。本プロジェクトでは、静的解析ツールによるコード品質検証とインストールスクリプトの動作検証を中心としたテスト戦略を採用しています。

## テスト戦略

### テストレベル

| レベル | 目的 | 担当 |
| --- | --- | --- |
| 単体テスト | Vim script の静的解析（構文エラー、スタイル違反の検出） | CI（自動実行） |
| 結合テスト | シェルスクリプトの構文検証およびインストールスクリプトの動作確認 | CI（自動実行） |
| システムテスト | space-vim の完全インストールおよびプラグインの動作確認 | 手動テスト |
| 受入テスト | エンドユーザー環境での動作確認（Vim/NeoVim での各レイヤー機能の検証） | ユーザーコミュニティ |

### テスト種別

| 種別 | 概要 | 実施タイミング |
| --- | --- | --- |
| 静的コード解析 | vint による Vim script のリント、shellcheck によるシェルスクリプトのリント | Push/PR 時 |
| インストールテスト | install.sh スクリプトの実行による正常インストールの確認 | Push/PR 時 |
| 機能テスト | 各レイヤー・プラグインの機能動作確認 | 手動（新機能追加時） |

## テスト環境

| 環境 | 用途 | 構成 |
| --- | --- | --- |
| GitHub Actions (ubuntu-latest) | CI/CD 自動テスト | Ubuntu 最新版、vim-vint、shellcheck、Python 3.6+ |
| ローカル開発環境 | 開発時の手動テスト | macOS/Linux/Windows、Vim 8+ または NeoVim |

## テストツール

| ツール | 用途 | バージョン |
| --- | --- | --- |
| vint | Vim script の静的解析（構文チェック、スタイルチェック） | reviewdog/action-vint@v1 |
| shellcheck | シェルスクリプトの静的解析 | apt-get でインストール（最新版） |
| reviewdog | GitHub PR へのレビューコメント自動投稿 | reviewdog/action-vint@v1 |

## カバレッジ目標

| 対象 | 目標値 |
| --- | --- |
| Vim script 静的解析 | 全 .vim ファイル（cache.vim を除く）100% |
| シェルスクリプト静的解析 | 全 .sh ファイル 100% |
| インストールスクリプト実行テスト | install.sh の正常終了 100% |

**備考:** Vim script は実行時テストフレームワークを持たないため、ランタイムカバレッジの計測は行いません。代わりに静的解析による品質担保を重視しています。

## テストデータ

本プロジェクトは Vim の設定ファイル群であり、テストデータとして特別なデータセットは必要ありません。テストは以下のリソースを使用します：

- **Vim script ファイル**: core/, layers/ ディレクトリ配下の .vim ファイル
- **シェルスクリプト**: install.sh, uninstall.sh, ci/*.sh
- **設定ファイル**: init.vim, init.spacevim

## 不具合管理

不具合の管理は以下のワークフローに従います：

1. **Issue 登録**: GitHub Issues にテンプレート（.github/ISSUE_TEMPLATE.md）を使用して報告
2. **分類**: バグ、機能要望、質問のラベル付け
3. **修正**: Pull Request による修正とレビュー
4. **検証**: CI による自動テスト通過の確認
5. **クローズ**: マージ後に Issue をクローズ

## CI/CD連携

### GitHub Actions ワークフロー

CI/CD は GitHub Actions を使用し、以下のジョブが Push および Pull Request 時に自動実行されます：

```yaml
name: ci
on: [push, pull_request]

jobs:
  vint:
    # Vim script の静的解析
    - reviewdog/action-vint による Vim script のリント
    - PR にレビューコメントとして結果を投稿

  install-script:
    # インストールスクリプトのテスト
    - shellcheck による *.sh ファイルの静的解析
    - ./install.sh の実行テスト
```

### CI スクリプト（ci/script.sh）

```bash
# すべての .vim ファイルに対して vint を実行（cache.vim を除く）
find . -name "*.vim" -type f | grep -v "cache.vim" | while read filename; do vint -e "$filename"; done

# シェルスクリプトの検証
shellcheck *.sh

# インストールスクリプトの実行
./install.sh
```

### テスト実行条件

- **トリガー**: push イベント、pull_request イベント
- **実行環境**: ubuntu-latest
- **失敗時の挙動**: fail-fast: false（他のジョブは継続実行）

## 備考

### 現状の制約

1. **自動化されたランタイムテストの不在**: Vim script のユニットテストフレームワーク（例: vader.vim, themis.vim）は導入されていません。現在は静的解析のみでコード品質を担保しています。

2. **カバレッジ計測の非対応**: Vim script は一般的にカバレッジ計測が困難であり、本プロジェクトでもカバレッジメトリクスは収集していません。

3. **E2E テストの不在**: プラグインのインストールや各レイヤーの動作を自動検証するエンドツーエンドテストは現在実装されていません。

### 推奨される改善

1. **vader.vim または themis.vim の導入**: Vim script のユニットテストフレームワークを導入し、重要な関数の自動テストを実装することを推奨します。

2. **Docker を使用したテスト環境の標準化**: 異なる Vim/NeoVim バージョンでのテストを自動化するため、Docker コンテナの活用を検討してください。

3. **マトリクステストの追加**: 複数の OS（Ubuntu, macOS, Windows）および Vim/NeoVim バージョンでのマトリクステストを GitHub Actions に追加することを推奨します。
