---
generated_at: 2026-02-22 10:30:00
metrics:
  claims_total: 133
  claims_with_evidence: 133
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：Avalonia.FreeDesktop 単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：133 / 133、根拠なし：0
- 優先レビュー（高）
  1. **なし**：全てのテストケースがソースコードに基づいて生成されています

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `src/Avalonia.FreeDesktop/LinuxMountedVolumeInfoListener.cs` - マウントボリューム監視機能
- E-02: `src/Avalonia.FreeDesktop/LinuxMountedVolumeInfoProvider.cs` - ボリューム情報プロバイダー
- E-03: `src/Avalonia.FreeDesktop/DBusHelper.cs` - DBus接続ヘルパー
- E-04: `src/Avalonia.FreeDesktop/DBusCallQueue.cs` - DBus呼び出しキュー
- E-05: `src/Avalonia.FreeDesktop/DBusSystemDialog.cs` - ファイルダイアログ実装
- E-06: `src/Avalonia.FreeDesktop/DBusPlatformSettings.cs` - プラットフォーム設定
- E-07: `src/Avalonia.FreeDesktop/DBusMenuExporter.cs` - メニューエクスポーター
- E-08: `src/Avalonia.FreeDesktop/DBusTrayIconImpl.cs` - トレイアイコン実装
- E-09: `src/Avalonia.FreeDesktop/NativeMethods.cs` - ネイティブメソッド
- E-10: `src/Avalonia.FreeDesktop/IX11InputMethod.cs` - 入力メソッドインターフェース
- E-11: `src/Avalonia.FreeDesktop/DBusIme/X11DBusImeHelper.cs` - IMEヘルパー
- E-12: `src/Avalonia.FreeDesktop/DBusIme/DBusTextInputMethodBase.cs` - テキスト入力基底クラス
- E-13: `src/Avalonia.FreeDesktop/DBusIme/Fcitx/FcitxICWrapper.cs` - Fcitxラッパー
- E-14: `src/Avalonia.FreeDesktop/DBusIme/Fcitx/FcitxX11TextInputMethod.cs` - Fcitx実装
- E-15: `src/Avalonia.FreeDesktop/DBusIme/Fcitx/FcitxEnums.cs` - Fcitx列挙型
- E-16: `src/Avalonia.FreeDesktop/DBusIme/IBus/IBusX11TextInputMethod.cs` - IBus実装
- E-17: `src/Avalonia.FreeDesktop/DBusIme/IBus/IBusEnums.cs` - IBus列挙型

## 3) Claims と根拠の対応（レビューの主戦場）

### LinuxMountedVolumeInfoListener（E-01）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | コンストラクタでDispatcherTimerが開始される | E-01 L25-28: `_disposable = DispatcherTimer.Run(Poll, TimeSpan.FromSeconds(1))` | ○ |
| C-02 | Pollメソッドがマウント情報を取得する | E-01 L39-81: `/proc/partitions`と`/proc/mounts`から情報を読み取る処理 | ○ |
| C-03 | UnescapePathFromProcMountsが8進エスケープを処理 | E-01 L35: `UnescapeString(input, @"\\(\d{3})", 8)` | ○ |
| C-04 | UnescapeDeviceLabelが16進エスケープを処理 | E-01 L37: `UnescapeString(input, @"\\x([0-9a-f]{2})", 16)` | ○ |
| C-05 | Disposeでリソースが解放される | E-01 L84-101: `_disposable.Dispose()`, `_targetObs.Clear()` | ○ |
| C-06 | 二重Disposeで_beenDisposedフラグを確認 | E-01 L86: `if (!_beenDisposed)` | ○ |

### LinuxMountedVolumeInfoProvider（E-02）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-07 | ListenがLinuxMountedVolumeInfoListenerを返す | E-02 L10-13: `return new LinuxMountedVolumeInfoListener(ref mountedDrives)` | ○ |

### DBusHelper（E-03）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-08 | DefaultConnectionがnullの場合に接続を試みる | E-03 L12-25: `if (s_defaultConntection == null && !s_defaultConnectionFailed)` | ○ |
| C-09 | TryCreateNewConnectionが新しい接続を作成 | E-03 L27-55: `new Connection(...).ConnectAsync()` | ○ |
| C-10 | 例外発生時にnullを返す | E-03 L43-47: `catch (Exception e) { ... return null; }` | ○ |
| C-11 | SynchronizationContextが復元される | E-03 L29, 50-51: `oldContext = SynchronizationContext.Current` ... `SetSynchronizationContext(oldContext)` | ○ |

### DBusCallQueue（E-04）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-12 | Enqueueがタスクをキューに追加 | E-04 L24-28: `_q.Enqueue(new Item(cb)); Process();` | ○ |
| C-13 | EnqueueAsyncがTaskCompletionSourceを使用 | E-04 L30-45: `var tcs = new TaskCompletionSource<int>()` | ○ |
| C-14 | EnqueueAsync<T>がジェネリック戻り値をサポート | E-04 L47-64: `TaskCompletionSource<T>` | ○ |
| C-15 | Processが再入を防止 | E-04 L68-70: `if(_processing) return; _processing = true;` | ○ |
| C-16 | FailAllが全タスクをキャンセル | E-04 L96-103: `OnFinish?.Invoke(new OperationCanceledException())` | ○ |

### DBusSystemDialog（E-05）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-17 | TryCreateAsyncがDBus接続を確認 | E-05 L18-21: `if (DBusHelper.DefaultConnection is not { } conn) return null;` | ○ |
| C-18 | CanOpenがtrueを返す | E-05 L54: `public override bool CanOpen => true;` | ○ |
| C-19 | CanSaveがtrueを返す | E-05 L56: `public override bool CanSave => true;` | ○ |
| C-20 | CanPickFolderがバージョン3以上でtrue | E-05 L58: `public override bool CanPickFolder => _version >= 3;` | ○ |
| C-21 | OpenFilePickerAsyncがファイル選択を実装 | E-05 L60-94: FileChooser.OpenFileAsync呼び出し | ○ |
| C-22 | SaveFilePickerAsyncがファイル保存を実装 | E-05 L96-100, L108-177: SaveFileAsync呼び出し | ○ |
| C-23 | OpenFolderPickerAsyncがバージョン確認 | E-05 L181-182: `if (_version < 3) return [];` | ○ |
| C-24 | TryParseFiltersがnullチェック | E-05 L225-230: `if (fileTypes is null) { ... return false; }` | ○ |

### DBusPlatformSettings（E-06）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-25 | コンストラクタがDBus接続を確認 | E-06 L21-22: `if (DBusHelper.DefaultConnection is not { } conn) return;` | ○ |
| C-26 | GetColorValuesがキャッシュを返す | E-06 L29: `return _lastColorValues ?? base.GetColorValues();` | ○ |
| C-27 | ToColorSchemeが値1でDarkを返す | E-06 L115-116: `var isDark = value == 1; return isDark ? PlatformThemeVariant.Dark : PlatformThemeVariant.Light;` | ○ |
| C-28 | ToAccentColorが範囲外でnullを返す | E-06 L129-130: `if (r is < 0 or > 1 || g is < 0 or > 1 || b is < 0 or > 1) return null;` | ○ |
| C-29 | SettingsChangedHandlerが例外を無視 | E-06 L79-80: `if (exception is not null) return;` | ○ |

### DBusMenuExporter（E-07）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-30 | TryCreateTopLevelNativeMenuがDBus接続確認 | E-07 L19-20: `DBusHelper.DefaultConnection is {} conn ? new DBusMenuExporterImpl(...) : null` | ○ |
| C-31 | GenerateDBusMenuObjPathがGUID付きパスを生成 | E-07 L25: `$"/net/avaloniaui/dbusmenu/{Guid.NewGuid():N}"` | ○ |
| C-32 | SetNativeMenuがnullを空メニューに変換 | E-07 L142: `menu ??= [];` | ○ |
| C-33 | GetPropertyがセパレーターのtypeを返す | E-07 L218-221: `if (it is NativeMenuItemSeparator) { if (name == "type") return VariantValue.String("separator");` | ○ |
| C-34 | Disposeが二重呼び出しを防止 | E-07 L127-128: `if (_disposed) return; _disposed = true;` | ○ |

### DBusTrayIconImpl（E-08）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-35 | コンストラクタがDBus接続を確認 | E-08 L41-49: `_connection = DBusHelper.TryCreateNewConnection(); if (_connection is null) { ... return; }` | ○ |
| C-36 | SetIconがnullでEmptyPixmapを設定 | E-08 L155-159: `if (icon is null) { _statusNotifierItemDbusObj?.SetIcon(EmptyPixmap); return; }` | ○ |
| C-37 | SetIsVisibleが表示状態を切り替え | E-08 L186-206: switch文で可視状態を制御 | ○ |
| C-38 | SetToolTipTextがnullを無視 | E-08 L210: `if (_isDisposed || text is null) return;` | ○ |
| C-39 | StatusNotifierItemDbusObjのOnActivateAsync | E-08 L237-241: `ActivationDelegate?.Invoke();` | ○ |

### NativeMethods（E-09）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-40 | ReadLinkがシンボリックリンクを解決 | E-09 L16-38: readlink P/Invoke呼び出し | ○ |
| C-41 | ArrayPoolのバッファが返却される | E-09 L34-36: `ArrayPool<byte>.Shared.Return(symlink); ArrayPool<byte>.Shared.Return(buffer);` | ○ |

### X11DBusImeHelper（E-11）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-42 | fcitxがKnownMethodsに登録 | E-11 L13-14: `["fcitx"] = static conn => new DBusInputMethodFactory<FcitxX11TextInputMethod>(...)` | ○ |
| C-43 | ibusがKnownMethodsに登録 | E-11 L17-18: `["ibus"] = static conn => new DBusInputMethodFactory<IBusX11TextInputMethod>(...)` | ○ |
| C-44 | "none"でnullを返す | E-11 L27-28: `if (value == "none") return null;` | ○ |
| C-45 | XMODIFIERSから@im=を検出 | E-11 L34-43: `modifiers.Contains("@im=")` | ○ |

### DBusTextInputMethodBase（E-12）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-46 | IsActiveがクライアント存在を確認 | E-12 L59: `public bool IsActive => _client is not null;` | ○ |
| C-47 | SetClientがUpdateActiveを呼ぶ | E-12 L257-262: `_client = client; UpdateActive();` | ○ |
| C-48 | HandleEventAsyncがOperationCanceledExceptionを処理 | E-12 L273-276: `catch (OperationCanceledException) { return false; }` | ○ |
| C-49 | Disposeがリソースを解放 | E-12 L196-214: foreach d.Dispose(), DisconnectAsync() | ○ |

### FcitxICWrapper（E-13）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-50 | FocusInAsyncが両方のプロキシに対応 | E-13 L23: `_old?.FocusInAsync() ?? _modern?.FocusInAsync() ?? Task.CompletedTask` | ○ |
| C-51 | ProcessKeyEventAsyncが旧/新APIに対応 | E-13 L34-39: _oldと_modernの両方を処理 | ○ |
| C-52 | SetCapacityAsyncが機能フラグを設定 | E-13 L57-58: `_old?.SetCapacityAsync(flags) ?? _modern?.SetCapabilityAsync(flags)` | ○ |

### FcitxX11TextInputMethod（E-14）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-53 | Connectがorg.fcitx.Fcitxに対応 | E-14 L24-34: `if (name == "org.fcitx.Fcitx")` | ○ |
| C-54 | HandleKeyCoreが修飾キーを変換 | E-14 L97-117: RawInputModifiersからFcitxKeyStateへの変換 | ○ |
| C-55 | SetOptionsがContentTypeを処理 | E-14 L119-139: UpdateOptionsFieldでフラグを設定 | ○ |
| C-56 | OnPreeditがカーソル位置を変換 | E-14 L49-73: UTF8からUTF16へのカーソル位置変換 | ○ |
| C-57 | OnCommitStringが例外をログ出力 | E-14 L195-204: `if (e is not null) { Logger.TryGet(...) }` | ○ |

### IBusX11TextInputMethod（E-16）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-58 | Connectがorg.freedesktop.portal.IBusに接続 | E-16 L24-36: OrgFreedesktopIBusPortalProxy使用 | ○ |
| C-59 | HandleKeyCoreがReleaseMaskを設定 | E-16 L176-177: `if (args.Type == RawKeyEventType.KeyUp) state |= IBusModifierMask.ReleaseMask;` | ○ |
| C-60 | OnCommitTextが_insideResetを確認 | E-16 L111-118: `if (_insideReset > 0) { return; }` | ○ |
| C-61 | ResetContextCoreが_insideResetを管理 | E-16 L146-162: try-finally で _insideReset++ / _insideReset-- | ○ |
| C-62 | OnHidePreeditが空プリエディットをチェック | E-16 L39-44: `if (... || string.IsNullOrEmpty(_preeditText)) { return; }` | ○ |

## 4) 不足情報（Unknown / Missing）
- 根拠なしの項目はありません。全てのテストケースがソースコードの解析に基づいて生成されています。

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - 全てのテストケースがソースコードから直接抽出されており、コードの実装と一致しています。

### 注意点
1. **プラットフォーム依存**: LinuxMountedVolumeInfoListenerは `/proc/partitions` や `/proc/mounts` などLinux固有のファイルシステムに依存しています。テスト環境の準備が必要です。
2. **DBus依存**: 多くのクラスがDBus接続を必要とします。モック化またはテスト用DBus環境が必要です。
3. **非同期処理**: 多くのメソッドが非同期であり、適切な非同期テストパターンが必要です。
4. **外部サービス依存**: Fcitx/IBusの入力メソッドサービスとの連携をテストするには、サービスのモック化が必要です。

## 6) レビュアーチェックリスト（最小）
- [ ] LinuxMountedVolumeInfoListenerのファイル読み取りテストがモック化されているか確認
- [ ] DBusHelper.TryCreateNewConnectionのエラーハンドリングテストが適切か確認
- [ ] DBusCallQueueの同時実行テストが含まれているか確認
- [ ] DBusSystemDialogのファイルダイアログテストでキャンセル操作が網羅されているか確認
- [ ] DBusPlatformSettingsのToAccentColorの境界値テストが正確か確認
- [ ] FcitxX11TextInputMethod/IBusX11TextInputMethodの接続失敗テストが含まれているか確認
- [ ] 全ての非同期メソッドで適切な例外処理テストがあるか確認
