Explorar o código

Change filter in the ansi request scenario.

BDisp hai 8 meses
pai
achega
644afa96d3

+ 28 - 21
UICatalog/Scenarios/AnsiEscapeSequenceRequests.cs

@@ -9,12 +9,11 @@ namespace UICatalog.Scenarios;
 [ScenarioCategory ("Tests")]
 public sealed class AnsiEscapeSequenceRequests : Scenario
 {
-    private readonly List<DateTime> _sends = new ();
+    private readonly Dictionary<DateTime, AnsiEscapeSequenceRequest> _sends = new ();
 
     private readonly object _lockAnswers = new ();
-    private readonly Dictionary<DateTime, string> _answers = new ();
-    private readonly object _lockErrors = new ();
-    private readonly Dictionary<DateTime, string> _errors = new ();
+    private readonly Dictionary<DateTime, AnsiEscapeSequenceRequest> _answers = new ();
+    private readonly Dictionary<DateTime, AnsiEscapeSequenceRequest> _errors = new ();
 
     private GraphView _graphView;
 
@@ -117,7 +116,7 @@ public sealed class AnsiEscapeSequenceRequests : Scenario
 
         cbDar.ValueChanging += (s, e) =>
                                {
-                                   if (e.NewValue < 0 || e.NewValue > 20)
+                                   if (e.NewValue is < 0 or > 20)
                                    {
                                        e.Cancel = true;
                                    }
@@ -327,7 +326,7 @@ public sealed class AnsiEscapeSequenceRequests : Scenario
             return "No requests sent yet";
         }
 
-        string last = _answers.Last ().Value;
+        string last = _answers.Last ().Value.AnsiEscapeSequenceResponse!.Response;
 
         int unique = _answers.Values.Distinct ().Count ();
         int total = _answers.Count;
@@ -342,7 +341,7 @@ public sealed class AnsiEscapeSequenceRequests : Scenario
             return "No errors received yet";
         }
 
-        string last = _errors.Last ().Value;
+        string last = _errors.Last ().Value.AnsiEscapeSequenceResponse!.Error;
 
         int unique = _errors.Values.Distinct ().Count ();
         int total = _errors.Count;
@@ -350,33 +349,34 @@ public sealed class AnsiEscapeSequenceRequests : Scenario
         return $"Last:{last} U:{unique} T:{total}";
     }
 
-    private void HandleResponse (string response)
+    private void HandleResponse (AnsiEscapeSequenceRequest ansiRequest)
     {
         lock (_lockAnswers)
         {
-            _answers.Add (DateTime.Now, response);
+            _answers.Add (DateTime.Now, ansiRequest);
         }
     }
 
-    private void HandleResponseError (string response)
+    private void HandleResponseError (AnsiEscapeSequenceRequest ansiRequest)
     {
         lock (_lockAnswers)
         {
-            _errors.Add (DateTime.Now, response);
+            _errors.Add (DateTime.Now, ansiRequest);
         }
     }
 
     private void SendDar ()
     {
-        _sends.Add (DateTime.Now);
         AnsiEscapeSequenceRequest ansiRequest = AnsiEscapeSequenceRequestUtils.CSI_SendDeviceAttributes;
-        if (Application.Driver!.TryWriteAnsiRequest (Application.MainLoop.MainLoopDriver, ref ansiRequest))
+        _sends.Add (DateTime.Now, ansiRequest);
+
+        if (Application.Driver!.TryWriteAnsiRequest (Application.MainLoop!.MainLoopDriver, ref ansiRequest))
         {
-            HandleResponse (ansiRequest.AnsiEscapeSequenceResponse?.Response);
+            HandleResponse (ansiRequest);
         }
         else
         {
-            HandleResponseError (ansiRequest.AnsiEscapeSequenceResponse?.Response);
+            HandleResponseError (ansiRequest);
         }
     }
 
@@ -398,19 +398,26 @@ public sealed class AnsiEscapeSequenceRequests : Scenario
         _graphView.GraphColor = new Attribute (Color.Green, Color.Black);
     }
 
-    private int ToSeconds (DateTime t) { return (int)(DateTime.Now - t).TotalSeconds; }
+    private static Func<KeyValuePair<DateTime, AnsiEscapeSequenceRequest>, int> ToSeconds () { return t => (int)(DateTime.Now - t.Key).TotalSeconds; }
 
     private void UpdateGraph ()
     {
         _sentSeries.Points = _sends
-                             .GroupBy (ToSeconds)
+                             .Where (
+                                     r => r.Value?.AnsiEscapeSequenceResponse is null
+                                          || (r.Value?.AnsiEscapeSequenceResponse is { }
+                                              && string.IsNullOrEmpty (r.Value?.AnsiEscapeSequenceResponse.Response)))
+                             .GroupBy (ToSeconds ())
                              .Select (g => new PointF (g.Key, g.Count ()))
                              .ToList ();
 
-        _answeredSeries.Points = _answers.Keys
-                                         .GroupBy (ToSeconds)
-                                         .Select (g => new PointF (g.Key, g.Count ()))
-                                         .ToList ();
+        _answeredSeries.Points = _answers
+                                 .Where (
+                                         r => r.Value.AnsiEscapeSequenceResponse is { }
+                                              && !string.IsNullOrEmpty (r.Value?.AnsiEscapeSequenceResponse.Response))
+                                 .GroupBy (ToSeconds ())
+                                 .Select (g => new PointF (g.Key, g.Count ()))
+                                 .ToList ();
 
         //  _graphView.ScrollOffset  = new PointF(,0);
         if (_sentSeries.Points.Count > 0 || _answeredSeries.Points.Count > 0)

+ 7 - 0
UnitTests/Input/AnsiEscapeSequenceRequestsTests.cs

@@ -69,4 +69,11 @@ public class AnsiEscapeSequenceRequestsTests
         Assert.NotNull (seqReqStatus);
         Assert.Equal ("t", seqReqStatus.AnsiRequest.Terminator);
     }
+
+    [Fact]
+    public void Request_Initialization_AnsiEscapeSequenceResponse_Is_Null ()
+    {
+        AnsiEscapeSequenceRequest ansiRequest = new () { Request = "\u001b[0c", Terminator = "c"};
+        Assert.Null (ansiRequest.AnsiEscapeSequenceResponse);
+    }
 }