"No","テストID","対象ファイル","対象クラス/関数","対象メソッド","テスト観点","テストケース名","前提条件","入力値","期待結果","優先度","備考"
"1","UT-RMP-001","src/Avalonia.Remote.Protocol/AvaloniaRemoteMessageGuidAttribute.cs","AvaloniaRemoteMessageGuidAttribute","コンストラクタ","正常系","有効なGUID文字列でインスタンスが生成されること","なし","guid=""9AEC9A2E-6315-4066-B4BA-E9A9EFD0F8CC""","Guidプロパティに正しいGuidが設定される","高","メッセージ型識別の基本機能"
"2","UT-RMP-002","src/Avalonia.Remote.Protocol/AvaloniaRemoteMessageGuidAttribute.cs","AvaloniaRemoteMessageGuidAttribute","コンストラクタ","異常系","無効なGUID文字列で例外がスローされること","なし","guid=""invalid-guid""","FormatExceptionがスローされる","高","不正な入力の検証"
"3","UT-RMP-003","src/Avalonia.Remote.Protocol/AvaloniaRemoteMessageGuidAttribute.cs","AvaloniaRemoteMessageGuidAttribute","コンストラクタ","異常系","空文字列で例外がスローされること","なし","guid=""""","FormatExceptionがスローされる","中","空文字列の検証"
"4","UT-RMP-004","src/Avalonia.Remote.Protocol/AvaloniaRemoteMessageGuidAttribute.cs","AvaloniaRemoteMessageGuidAttribute","コンストラクタ","異常系","nullで例外がスローされること","なし","guid=null","ArgumentNullExceptionがスローされる","中","null入力の検証"
"5","UT-RMP-005","src/Avalonia.Remote.Protocol/DefaultMessageTypeResolver.cs","DefaultMessageTypeResolver","コンストラクタ","正常系","アセンブリからメッセージ型が正しく登録されること","AvaloniaRemoteMessageGuidAttribute付きの型を含むアセンブリ","assemblies=[テストアセンブリ]","GetByGuidとGetGuidで型とGUIDの相互変換が可能","高","型リゾルバの基本初期化"
"6","UT-RMP-006","src/Avalonia.Remote.Protocol/DefaultMessageTypeResolver.cs","DefaultMessageTypeResolver","コンストラクタ","正常系","空のアセンブリ配列で初期化できること","なし","assemblies=[]","例外がスローされない","中","空配列での初期化"
"7","UT-RMP-007","src/Avalonia.Remote.Protocol/DefaultMessageTypeResolver.cs","DefaultMessageTypeResolver","コンストラクタ","正常系","nullアセンブリ配列で初期化できること","なし","assemblies=null","例外がスローされない（内部でデフォルトアセンブリが使用される）","中","null配列での初期化"
"8","UT-RMP-008","src/Avalonia.Remote.Protocol/DefaultMessageTypeResolver.cs","DefaultMessageTypeResolver","GetByGuid","正常系","登録済みGUIDで正しい型が返されること","型が登録済み","id=登録済みGUID","対応するType型が返される","高","GUID→型変換"
"9","UT-RMP-009","src/Avalonia.Remote.Protocol/DefaultMessageTypeResolver.cs","DefaultMessageTypeResolver","GetByGuid","異常系","未登録GUIDで例外がスローされること","型が未登録","id=未登録GUID","KeyNotFoundExceptionがスローされる","高","未登録GUIDの処理"
"10","UT-RMP-010","src/Avalonia.Remote.Protocol/DefaultMessageTypeResolver.cs","DefaultMessageTypeResolver","GetGuid","正常系","登録済み型で正しいGUIDが返されること","型が登録済み","type=登録済み型","対応するGuidが返される","高","型→GUID変換"
"11","UT-RMP-011","src/Avalonia.Remote.Protocol/DefaultMessageTypeResolver.cs","DefaultMessageTypeResolver","GetGuid","異常系","未登録型で例外がスローされること","型が未登録","type=未登録型","KeyNotFoundExceptionがスローされる","高","未登録型の処理"
"12","UT-RMP-012","src/Avalonia.Remote.Protocol/BsonStreamTransport.cs","BsonStreamTransportConnection","コンストラクタ","正常系","有効なパラメータでインスタンスが生成されること","なし","resolver, inputStream, outputStream, disposeCallback","インスタンスが正常に生成される","高","接続オブジェクトの生成"
"13","UT-RMP-013","src/Avalonia.Remote.Protocol/BsonStreamTransport.cs","BsonStreamTransportConnection","Dispose","正常系","Disposeでキャンセルとコールバックが呼ばれること","インスタンス生成済み","なし","CancellationTokenSourceがキャンセルされ、disposeCallbackが呼ばれる","高","リソース解放"
"14","UT-RMP-014","src/Avalonia.Remote.Protocol/BsonStreamTransport.cs","BsonStreamTransportConnection","Dispose","正常系","disposeCallbackがnullの場合でもDisposeが成功すること","disposeCallback=null","なし","例外がスローされない","中","nullコールバックの処理"
"15","UT-RMP-015","src/Avalonia.Remote.Protocol/BsonStreamTransport.cs","BsonStreamTransportConnection","StartReading","正常系","読み取りタスクが開始されること","インスタンス生成済み","なし","Readerタスクが開始される","高","読み取り開始"
"16","UT-RMP-016","src/Avalonia.Remote.Protocol/BsonStreamTransport.cs","BsonStreamTransportConnection","StartReading","異常系","2回呼び出すと例外がスローされること","StartReading既に呼び出し済み","なし","InvalidOperationExceptionがスローされる","高","重複呼び出し防止"
"17","UT-RMP-017","src/Avalonia.Remote.Protocol/BsonStreamTransport.cs","BsonStreamTransportConnection","Send","正常系","メッセージがシリアライズされて送信されること","接続確立済み、ライター正常","data=有効なメッセージオブジェクト","メッセージがBSON形式で出力ストリームに書き込まれる","高","メッセージ送信"
"18","UT-RMP-018","src/Avalonia.Remote.Protocol/BsonStreamTransport.cs","BsonStreamTransportConnection","Send","異常系","書き込み中に別のSendを呼ぶと例外がスローされること","Send実行中","data=任意のメッセージ","InvalidOperationExceptionがスローされる","高","同時書き込み防止"
"19","UT-RMP-019","src/Avalonia.Remote.Protocol/BsonStreamTransport.cs","BsonStreamTransportConnection","Send","異常系","ライターが壊れている場合は何もしないこと","_writerIsBroken=true","data=任意のメッセージ","メソッドが即座にリターンし、例外がスローされない","中","壊れたライターの処理"
"20","UT-RMP-020","src/Avalonia.Remote.Protocol/BsonStreamTransport.cs","BsonStreamTransportConnection","Send","異常系","書き込みエラー時にOnExceptionが発火すること","出力ストリームが例外をスロー","data=任意のメッセージ","OnExceptionイベントが発火し、_writerIsBrokenがtrueになる","高","エラーハンドリング"
"21","UT-RMP-021","src/Avalonia.Remote.Protocol/TcpTransportBase.cs","TcpTransportBase","コンストラクタ","正常系","リゾルバを設定してインスタンスが生成されること","なし","resolver=有効なIMessageTypeResolver","インスタンスが正常に生成される","高","トランスポート基底クラスの初期化"
"22","UT-RMP-022","src/Avalonia.Remote.Protocol/TcpTransportBase.cs","TcpTransportBase","Listen","正常系","サーバーが指定アドレス・ポートでリッスン開始すること","ネットワーク利用可能","address=IPAddress.Loopback, port=0, cb=コールバック","IDisposableが返され、サーバーがリッスン状態になる","高","サーバー開始"
"23","UT-RMP-023","src/Avalonia.Remote.Protocol/TcpTransportBase.cs","TcpTransportBase","Listen","正常系","接続受付時にコールバックが呼ばれること","サーバーリッスン中","クライアント接続","コールバックにIAvaloniaRemoteTransportConnectionが渡される","高","接続受付"
"24","UT-RMP-024","src/Avalonia.Remote.Protocol/TcpTransportBase.cs","TcpTransportBase","Listen","正常系","返却されたIDisposableをDisposeするとサーバーが停止すること","サーバーリッスン中","Dispose呼び出し","新規接続が受け付けられなくなる","高","サーバー停止"
"25","UT-RMP-025","src/Avalonia.Remote.Protocol/TcpTransportBase.cs","TcpTransportBase","Connect","正常系","指定アドレス・ポートに接続できること","サーバーがリッスン中","address=サーバーアドレス, port=サーバーポート","IAvaloniaRemoteTransportConnectionが返される","高","クライアント接続"
"26","UT-RMP-026","src/Avalonia.Remote.Protocol/TcpTransportBase.cs","TcpTransportBase","Connect","異常系","接続失敗時に例外がスローされること","サーバーが存在しない","address=存在しないアドレス, port=任意","SocketExceptionがスローされる","高","接続失敗"
"27","UT-RMP-027","src/Avalonia.Remote.Protocol/BsonTcpTransport.cs","BsonTcpTransport","コンストラクタ（パラメータなし）","正常系","デフォルトリゾルバでインスタンスが生成されること","なし","なし","DefaultMessageTypeResolverを使用してインスタンスが生成される","高","デフォルトコンストラクタ"
"28","UT-RMP-028","src/Avalonia.Remote.Protocol/BsonTcpTransport.cs","BsonTcpTransport","コンストラクタ（リゾルバ指定）","正常系","カスタムリゾルバでインスタンスが生成されること","なし","resolver=カスタムIMessageTypeResolver","指定したリゾルバを使用してインスタンスが生成される","高","カスタムリゾルバ指定"
"29","UT-RMP-029","src/Avalonia.Remote.Protocol/BsonTcpTransport.cs","BsonTcpTransport","CreateTransport","正常系","BsonStreamTransportConnectionがラップされて返されること","なし","resolver, stream, dispose","TransportConnectionWrapperでラップされたオブジェクトが返される","高","トランスポート生成"
"30","UT-RMP-030","src/Avalonia.Remote.Protocol/TransportConnectionWrapper.cs","TransportConnectionWrapper","コンストラクタ","正常系","内部接続のイベントがフックされること","なし","conn=有効なIAvaloniaRemoteTransportConnection","OnMessageとOnExceptionイベントがフックされる","高","ラッパー初期化"
"31","UT-RMP-031","src/Avalonia.Remote.Protocol/TransportConnectionWrapper.cs","TransportConnectionWrapper","Dispose","正常系","内部接続のDisposeが呼ばれること","インスタンス生成済み","なし","_conn.Dispose()が呼ばれる","高","リソース解放"
"32","UT-RMP-032","src/Avalonia.Remote.Protocol/TransportConnectionWrapper.cs","TransportConnectionWrapper","Send","正常系","メッセージがキューに追加されて送信されること","インスタンス生成済み","data=任意のメッセージ","メッセージがキューに追加され、ワーカーが処理する","高","メッセージ送信"
"33","UT-RMP-033","src/Avalonia.Remote.Protocol/TransportConnectionWrapper.cs","TransportConnectionWrapper","Send","正常系","複数メッセージが順序通り送信されること","インスタンス生成済み","data1, data2, data3","メッセージが追加順に送信される","高","送信順序保証"
"34","UT-RMP-034","src/Avalonia.Remote.Protocol/TransportConnectionWrapper.cs","TransportConnectionWrapper","Send","異常系","送信エラー時にタスクが例外で完了すること","内部接続がエラーをスロー","data=任意のメッセージ","返されたTaskが例外で完了する","高","送信エラー処理"
"35","UT-RMP-035","src/Avalonia.Remote.Protocol/TransportConnectionWrapper.cs","TransportConnectionWrapper","OnMessage","正常系","ハンドラ追加後にメッセージが配信されること","インスタンス生成済み","ハンドラ追加後、メッセージ受信","ハンドラが呼び出される","高","メッセージ受信"
"36","UT-RMP-036","src/Avalonia.Remote.Protocol/TransportConnectionWrapper.cs","TransportConnectionWrapper","OnMessage","正常系","ハンドラ追加前のメッセージがスタッシュされて再生されること","インスタンス生成済み","メッセージ受信後、ハンドラ追加","スタッシュされたメッセージがハンドラに配信される","高","メッセージスタッシュ"
"37","UT-RMP-037","src/Avalonia.Remote.Protocol/TransportConnectionWrapper.cs","TransportConnectionWrapper","Start","正常系","内部接続のStartが呼ばれること","インスタンス生成済み","なし","_conn.Start()が呼ばれる","中","接続開始"
"38","UT-RMP-038","src/Avalonia.Remote.Protocol/EventStash.cs","EventStash<T>","コンストラクタ","正常系","トランスポートと例外ハンドラで初期化されること","なし","transport, exceptionHandler","インスタンスが正常に生成される","中","イベントスタッシュ初期化"
"39","UT-RMP-039","src/Avalonia.Remote.Protocol/EventStash.cs","EventStash<T>","Add","正常系","最初のハンドラ追加時にスタッシュが再生されること","スタッシュにイベントあり","handler=有効なハンドラ","スタッシュされた全イベントがハンドラに配信される","高","スタッシュ再生"
"40","UT-RMP-040","src/Avalonia.Remote.Protocol/EventStash.cs","EventStash<T>","Add","正常系","2番目以降のハンドラ追加時は再生されないこと","既にハンドラ追加済み","handler=有効なハンドラ","スタッシュ再生は行われない","中","複数ハンドラ追加"
"41","UT-RMP-041","src/Avalonia.Remote.Protocol/EventStash.cs","EventStash<T>","Add","異常系","再生中に例外が発生した場合exceptionHandlerが呼ばれること","exceptionHandler設定済み、ハンドラが例外をスロー","handler=例外をスローするハンドラ","exceptionHandlerが例外付きで呼ばれる","高","例外ハンドリング"
"42","UT-RMP-042","src/Avalonia.Remote.Protocol/EventStash.cs","EventStash<T>","Remove","正常系","ハンドラが削除されること","ハンドラ追加済み","handler=追加済みハンドラ","以降のFireでハンドラが呼ばれない","中","ハンドラ削除"
"43","UT-RMP-043","src/Avalonia.Remote.Protocol/EventStash.cs","EventStash<T>","Fire","正常系","ハンドラがない場合イベントがスタッシュされること","ハンドラ未追加","transport, ev","イベントが_stashに追加される","高","イベントスタッシュ"
"44","UT-RMP-044","src/Avalonia.Remote.Protocol/EventStash.cs","EventStash<T>","Fire","正常系","ハンドラがある場合イベントが即座に配信されること","ハンドラ追加済み","transport, ev","ハンドラがイベント付きで呼ばれる","高","イベント配信"
"45","UT-RMP-045","src/Avalonia.Remote.Protocol/ViewportMessages.cs","MeasureViewportMessage","プロパティ","正常系","Width/Heightが正しく設定・取得できること","なし","Width=100.0, Height=200.0","プロパティが正しい値を返す","中","ビューポート測定メッセージ"
"46","UT-RMP-046","src/Avalonia.Remote.Protocol/ViewportMessages.cs","ClientViewportAllocatedMessage","プロパティ","正常系","Width/Height/DpiX/DpiYが正しく設定・取得できること","なし","Width=800.0, Height=600.0, DpiX=96.0, DpiY=96.0","プロパティが正しい値を返す","中","クライアントビューポート割り当てメッセージ"
"47","UT-RMP-047","src/Avalonia.Remote.Protocol/ViewportMessages.cs","FrameMessage","プロパティ","正常系","全プロパティが正しく設定・取得できること","なし","SequenceId, Format, Data, Width, Height, Stride, DpiX, DpiY","プロパティが正しい値を返す","中","フレームメッセージ"
"48","UT-RMP-048","src/Avalonia.Remote.Protocol/ViewportMessages.cs","FrameMessage","プロパティ","境界値","Dataがnullの場合も設定できること","なし","Data=null","Dataプロパティがnullを返す","低","null Dataの処理"
"49","UT-RMP-049","src/Avalonia.Remote.Protocol/ViewportMessages.cs","FrameMessage","プロパティ","境界値","Dataが空配列の場合も設定できること","なし","Data=new byte[0]","Dataプロパティが空配列を返す","低","空配列Dataの処理"
"50","UT-RMP-050","src/Avalonia.Remote.Protocol/ViewportMessages.cs","ClientSupportedPixelFormatsMessage","プロパティ","正常系","Formatsが正しく設定・取得できること","なし","Formats=[Rgb565, Rgba8888]","プロパティが正しい値を返す","中","ピクセルフォーマットメッセージ"
"51","UT-RMP-051","src/Avalonia.Remote.Protocol/ViewportMessages.cs","ClientSupportedPixelFormatsMessage","プロパティ","境界値","Formatsがnullの場合も設定できること","なし","Formats=null","Formatsプロパティがnullを返す","低","null Formatsの処理"
"52","UT-RMP-052","src/Avalonia.Remote.Protocol/ViewportMessages.cs","ClientSupportedPixelFormatsMessage","プロパティ","境界値","Formatsが空配列の場合も設定できること","なし","Formats=new PixelFormat[0]","Formatsプロパティが空配列を返す","低","空配列Formatsの処理"
"53","UT-RMP-053","src/Avalonia.Remote.Protocol/InputMessages.cs","PointerMovedEventMessage","プロパティ","正常系","X/Y/Modifiersが正しく設定・取得できること","なし","X=100.0, Y=200.0, Modifiers=[Control]","プロパティが正しい値を返す","中","ポインタ移動メッセージ"
"54","UT-RMP-054","src/Avalonia.Remote.Protocol/InputMessages.cs","PointerPressedEventMessage","プロパティ","正常系","Button/X/Y/Modifiersが正しく設定・取得できること","なし","Button=Left, X=100.0, Y=200.0","プロパティが正しい値を返す","中","ポインタ押下メッセージ"
"55","UT-RMP-055","src/Avalonia.Remote.Protocol/InputMessages.cs","ScrollEventMessage","プロパティ","正常系","DeltaX/DeltaY/X/Y/Modifiersが正しく設定・取得できること","なし","DeltaX=10.0, DeltaY=-20.0, X=100.0, Y=200.0","プロパティが正しい値を返す","中","スクロールメッセージ"
"56","UT-RMP-056","src/Avalonia.Remote.Protocol/InputMessages.cs","KeyEventMessage","プロパティ","正常系","IsDown/Key/PhysicalKey/KeySymbol/Modifiersが正しく設定・取得できること","なし","IsDown=true, Key=A, KeySymbol=""a""","プロパティが正しい値を返す","中","キーイベントメッセージ"
"57","UT-RMP-057","src/Avalonia.Remote.Protocol/InputMessages.cs","TextInputEventMessage","プロパティ","正常系","Text/Modifiersが正しく設定・取得できること","なし","Text=""Hello"", Modifiers=[]","プロパティが正しい値を返す","中","テキスト入力メッセージ"
"58","UT-RMP-058","src/Avalonia.Remote.Protocol/InputMessages.cs","TextInputEventMessage","プロパティ","正常系","Textのデフォルト値がstring.Emptyであること","なし","新規インスタンス","Textがstring.Emptyを返す","中","デフォルト値確認"
"59","UT-RMP-059","src/Avalonia.Remote.Protocol/DesignMessages.cs","UpdateXamlMessage","プロパティ","正常系","Xaml/AssemblyPath/XamlFileProjectPathが正しく設定・取得できること","なし","Xaml=""<Button/>"", AssemblyPath=""C:\\app.dll""","プロパティが正しい値を返す","中","XAML更新メッセージ"
"60","UT-RMP-060","src/Avalonia.Remote.Protocol/DesignMessages.cs","UpdateXamlResultMessage","プロパティ","正常系","Error/Handle/Exceptionが正しく設定・取得できること","なし","Error=""Parse error"", Handle=""abc123""","プロパティが正しい値を返す","中","XAML更新結果メッセージ"
"61","UT-RMP-061","src/Avalonia.Remote.Protocol/DesignMessages.cs","ExceptionDetails","コンストラクタ（デフォルト）","正常系","パラメータなしで初期化できること","なし","なし","インスタンスが生成され、プロパティがnull/デフォルト","中","例外詳細デフォルト初期化"
"62","UT-RMP-062","src/Avalonia.Remote.Protocol/DesignMessages.cs","ExceptionDetails","コンストラクタ（Exception）","正常系","Exceptionから情報が抽出されること","なし","e=new Exception(""Test error"")","ExceptionType=""Exception"", Message=""Test error""","高","例外詳細の抽出"
"63","UT-RMP-063","src/Avalonia.Remote.Protocol/DesignMessages.cs","ExceptionDetails","コンストラクタ（Exception）","正常系","TargetInvocationExceptionの場合InnerExceptionが使用されること","なし","e=new TargetInvocationException(new Exception(""Inner""))","ExceptionType=""Exception"", Message=""Inner""","高","TargetInvocationExceptionの処理"
"64","UT-RMP-064","src/Avalonia.Remote.Protocol/DesignMessages.cs","ExceptionDetails","コンストラクタ（Exception）","正常系","XmlExceptionの場合行番号と位置が設定されること","なし","e=new XmlException(""msg"", null, 10, 5)","LineNumber=10, LinePosition=5","高","XmlException情報の抽出"
"65","UT-RMP-065","src/Avalonia.Remote.Protocol/DesignMessages.cs","StartDesignerSessionMessage","プロパティ","正常系","SessionIdが正しく設定・取得できること","なし","SessionId=""session-123""","プロパティが正しい値を返す","中","デザイナーセッション開始メッセージ"
"66","UT-RMP-066","src/Avalonia.Remote.Protocol/TransportMessages.cs","HtmlTransportStartedMessage","プロパティ","正常系","Uriが正しく設定・取得できること","なし","Uri=""http://localhost:5000""","プロパティが正しい値を返す","中","HTMLトランスポート開始メッセージ"
"67","UT-RMP-067","src/Avalonia.Remote.Protocol/ViewportMessages.cs","PixelFormat","列挙値","正常系","Rgb565の値が正しいこと","なし","PixelFormat.Rgb565","列挙値が0","低","ピクセルフォーマット列挙値確認"
"68","UT-RMP-068","src/Avalonia.Remote.Protocol/ViewportMessages.cs","PixelFormat","列挙値","正常系","MaxValueがBgra8888と等しいこと","なし","PixelFormat.MaxValue","PixelFormat.Bgra8888と等しい","低","MaxValue確認"
"69","UT-RMP-069","src/Avalonia.Remote.Protocol/InputMessages.cs","InputModifiers","列挙値","正常系","フラグ属性が正しく機能すること","なし","InputModifiers.Alt | InputModifiers.Control","組み合わせたフラグ値","中","入力修飾子フラグ"
"70","UT-RMP-070","src/Avalonia.Remote.Protocol/InputMessages.cs","MouseButton","列挙値","正常系","None/Left/Right/Middleの値が正しいこと","なし","各MouseButton値","正しい列挙値","低","マウスボタン列挙値確認"
