浏览代码

Handling null response.

BDisp 8 月之前
父节点
当前提交
629cea841d

+ 6 - 1
Terminal.Gui/ConsoleDrivers/AnsiEscapeSequence/AnsiEscapeSequenceRequest.cs

@@ -83,7 +83,12 @@ public class AnsiEscapeSequenceRequest
                 throw new InvalidOperationException ("Terminator request is empty.");
             }
 
-            if (!ansiRequest.Response.EndsWith (ansiRequest.Terminator [^1]))
+            if (string.IsNullOrEmpty (ansiRequest.Response))
+            {
+                throw new InvalidOperationException ("Response request is null.");
+            }
+
+            if (!string.IsNullOrEmpty (ansiRequest.Response) && !ansiRequest.Response.EndsWith (ansiRequest.Terminator [^1]))
             {
                 string resp = string.IsNullOrEmpty (ansiRequest.Response) ? "" : ansiRequest.Response.Last ().ToString ();
 

+ 1 - 1
Terminal.Gui/ConsoleDrivers/AnsiEscapeSequence/AnsiEscapeSequenceResponse.cs

@@ -24,7 +24,7 @@ public class AnsiEscapeSequenceResponse
     ///     </see>
     ///     .
     /// </summary>
-    public required string Response { get; init; }
+    public required string? Response { get; init; }
 
     // QUESTION: Does string.Empty indicate no terminator expected? If not, perhaps make this property nullable?
     /// <summary>

+ 1 - 1
UICatalog/Scenarios/AnsiEscapeSequenceRequests.cs

@@ -172,7 +172,7 @@ public sealed class AnsiEscapeSequenceRequests : Scenario
                                                                                           out AnsiEscapeSequenceResponse ansiEscapeSequenceResponse
                                                                                          );
 
-                                     tvResponse.Text = ansiEscapeSequenceResponse.Response;
+                                     tvResponse.Text = ansiEscapeSequenceResponse.Response ?? "";
                                      tvError.Text = ansiEscapeSequenceResponse.Error;
                                      tvValue.Text = ansiEscapeSequenceResponse.ExpectedResponseValue ?? "";
                                      tvTerminator.Text = ansiEscapeSequenceResponse.Terminator;