---
generated_at: 2026-03-01 10:00:00
metrics:
  claims_total: 44
  claims_with_evidence: 42
  claims_without_evidence: 2
confidence_derived: 0.95
---

# 根拠レポート：cascadia-ShellExtension 単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.95**
  - 根拠あり：42 / 44、根拠なし：2
- 優先レビュー（高）
  1. **C-35 DllGetActivationFactory正常系**：WinRTアクティベーションファクトリの具体的な動作はWRLフレームワーク内部依存のため、正確な戻り値の検証が難しい
  2. **C-41 DllMain hinstがnullptrの場合**：nullハンドルでのDisableThreadLibraryCalls呼び出し時の動作はWindows API依存で検証困難

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

- E-01: `src/cascadia/ShellExtension/OpenTerminalHere.h` - OpenTerminalHereクラス宣言（IExplorerCommand, IObjectWithSite実装、メソッドシグネチャ、privateメンバ）
- E-02: `src/cascadia/ShellExtension/OpenTerminalHere.cpp` - OpenTerminalHereクラス実装（全メソッドの実装コード）
- E-03: `src/cascadia/ShellExtension/dllmain.cpp` - DLLエントリポイント・COM登録関数（DllCanUnloadNow, DllGetActivationFactory, DllGetClassObject, DllMain）
- E-04: `src/cascadia/ShellExtension/pch.h` - プリコンパイルヘッダ（依存ライブラリ・インクルードファイル情報）
- E-05: `src/cascadia/ShellExtension/pch.cpp` - プリコンパイルヘッダソース

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | Invoke正常系：選択フォルダでTerminal起動 | E-02 (L26-76) | ○ |
| C-02 | Invoke正常系：Ctrl+Shift押下時にElevateShimExeで起動 | E-02 (L30, L52) | ○ |
| C-03 | Invoke異常系：psiItemArrayがnullptrの場合のフォールバック | E-02 (L33-37, L190-211) | ○ |
| C-04 | Invoke異常系：有効な場所が取得できない場合のS_FALSE | E-02 (L34-37) | ○ |
| C-05 | Invoke異常系：GetDisplayName失敗時のエラー返却 | E-02 (L40, RETURN_IF_FAILED) | ○ |
| C-06 | Invoke異常系：CreateProcessW失敗時のエラー返却 | E-02 (L61, RETURN_IF_WIN32_BOOL_FALSE) | ○ |
| C-07 | GetToolTip正常系：E_NOTIMPL返却 | E-02 (L79-85) | ○ |
| C-08 | GetTitle正常系：ブランディング別メニュータイトル | E-02 (L87-103) | ○ |
| C-09 | GetState正常系：ファイルシステムアイテム時ECS_ENABLED | E-02 (L105-128) | ○ |
| C-10 | GetState正常系：非ファイルシステムアイテム時ECS_HIDDEN | E-02 (L122-125) | ○ |
| C-11 | GetState正常系：圧縮フォルダ時ECS_HIDDEN | E-02 (L124-125) | ○ |
| C-12 | GetState異常系：psiArrayとサイト無効時ECS_HIDDEN | E-02 (L119-125) | ○ |
| C-13 | GetIcon正常系：アイコンパス返却 | E-02 (L130-141) | ○ |
| C-14 | GetFlags正常系：ECF_DEFAULT返却 | E-02 (L143-147) | ○ |
| C-15 | GetCanonicalName正常系：UUID返却 | E-02 (L149-153) | ○ |
| C-16 | EnumSubCommands正常系：E_NOTIMPL返却 | E-02 (L155-159) | ○ |
| C-17 | SetSite正常系：IUnknown保存 | E-02 (L161-165) | ○ |
| C-18 | SetSite境界値：nullptr渡し時のリセット | E-02 (L163) | ○ |
| C-19 | GetSite正常系：QueryInterface結果取得 | E-02 (L167-171) | ○ |
| C-20 | GetSite異常系：site_未設定時のエラー | E-02 (L169, RETURN_IF_FAILED) | ○ |
| C-21 | GetLocationFromSite正常系：サイトからフォルダ位置取得 | E-02 (L173-188) | ○ |
| C-22 | GetLocationFromSite異常系：site_がnullptrでS_FALSE | E-02 (L177-179) | ○ |
| C-23 | GetLocationFromSite異常系：QueryService失敗時のエラー伝播 | E-02 (L183-185, RETURN_IF_FAILED) | ○ |
| C-24 | GetBestLocationFromSelectionOrSite正常系：配列アイテム返却 | E-02 (L190-211) | ○ |
| C-25 | GetBestLocationFromSelectionOrSite正常系：空配列時サイトフォールバック | E-02 (L195-200) | ○ |
| C-26 | GetBestLocationFromSelectionOrSite正常系：nullptr時サイトフォールバック | E-02 (L193, L203-205) | ○ |
| C-27 | GetBestLocationFromSelectionOrSite異常系：両方無効でS_FALSE | E-02 (L208) | ○ |
| C-28 | GetBestLocationFromSelectionOrSite異常系：GetCount失敗時のエラー伝播 | E-02 (L196, RETURN_IF_FAILED) | ○ |
| C-29 | IsControlAndShiftPressed正常系：両キー押下でtrue | E-02 (L214-223) | ○ |
| C-30 | IsControlAndShiftPressed正常系：Ctrlのみでfalse | E-02 (L222) | ○ |
| C-31 | IsControlAndShiftPressed正常系：Shiftのみでfalse | E-02 (L222) | ○ |
| C-32 | IsControlAndShiftPressed境界値：両キー未押下でfalse | E-02 (L222) | ○ |
| C-33 | DllCanUnloadNow正常系：Terminate可能でS_OK | E-03 (L11-14) | ○ |
| C-34 | DllCanUnloadNow正常系：Terminate不可でS_FALSE | E-03 (L13) | ○ |
| C-35 | DllGetActivationFactory正常系：有効なクラスIDでファクトリ取得 | E-03 (L16-19) | △ |
| C-36 | DllGetActivationFactory異常系：無効なクラスIDでエラー | E-03 (L18) | ○ |
| C-37 | DllGetClassObject正常系：有効なCLSIDでクラスオブジェクト取得 | E-03 (L21-24) | ○ |
| C-38 | DllGetClassObject異常系：無効なCLSIDでエラー | E-03 (L23) | ○ |
| C-39 | DllMain正常系：PROCESS_ATTACHでDisableThreadLibraryCalls呼出 | E-03 (L27-34) | ○ |
| C-40 | DllMain正常系：PROCESS_DETACHでTRUE返却 | E-03 (L33) | ○ |
| C-41 | DllMain境界値：hinstがnullptrの場合 | E-03 (L27) | △ |
| C-42 | Invoke正常系：コマンドラインに-dオプションとパスが含まれる | E-02 (L54-59) | ○ |
| C-43 | Invoke境界値：スペースを含むパスのエスケープ | E-02 (L59, QuoteAndEscapeCommandlineArg) | ○ |
| C-44 | GetState境界値：GetAttributesがS_OK以外を返す場合 | E-02 (L123-124) | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-35**: DllGetActivationFactoryの正常系について、OpenTerminalHereがWinRTアクティベーション可能なクラスとして登録されているかはWRLマクロ（CoCreatableClass）の内部動作に依存する。このDLLはCOMベースであり、WinRTアクティベーションファクトリが実際に機能するかは実行環境での検証が必要
  - 候補：WRL Module実装詳細 / CoCreatableClassマクロの動作仕様 / Windows Runtime登録情報
- **C-41**: DllMainにnullptrのhinstを渡した場合の動作はWindows APIのDisableThreadLibraryCallsの実装に依存する。ドキュメント上ではhinstがnullptrの場合の動作は未定義
  - 候補：Win32 API仕様書 / DisableThreadLibraryCallsドキュメント

## 5) リスクフラグ（レビュー観点）
- **1: 中リスク** - COMインターフェース（IExplorerCommand）のモック化が必要であり、テスト環境の構築難易度が高い。特にIShellItem, IShellItemArray, IServiceProvider, IFolderViewのモック実装が必要
- **0: 低リスク** - IsControlAndShiftPressedのGetAsyncKeyState依存は、関数ポインタの差し替えやDetours等でモック可能
- **1: 中リスク** - Invokeメソッド内のCreateProcessW呼び出しは実際のプロセス起動を伴うため、テスト時にはモック化またはスタブ化が必須
- **0: 低リスク** - GetToolTip, GetFlags, GetCanonicalName, EnumSubCommandsは固定値を返すだけのため、テストは容易

## 6) レビュアーチェックリスト（最小）
- [ ] 各IExplorerCommandメソッドのテストケースがCOMインターフェース仕様に準拠しているか確認する
- [ ] GetState内のSFGAO_FILESYSTEM/SFGAO_FOLDER/SFGAO_STREAM属性チェックのテストケースが正しい組み合わせをカバーしているか確認する
- [ ] GetBestLocationFromSelectionOrSiteのフォールバックロジック（配列 -> サイト -> S_FALSE）が全パスカバーされているか確認する
- [ ] Invokeメソッドのコマンドライン構築（QuoteAndEscapeCommandlineArg含む）のテストケースがエッジケースを網羅しているか確認する
- [ ] DllGetActivationFactoryがWinRTアクティベーションとして実際に使用されるかプロジェクト構成を確認する
- [ ] ブランディング別（RELEASE/PREVIEW/CANARY/DEV）のGetTitle戻り値が妥当か確認する
