From 644afa96d3a47702597cfabd66f3776b4b0a150d Mon Sep 17 00:00:00 2001 From: BDisp Date: Mon, 11 Nov 2024 16:02:45 +0000 Subject: [PATCH] Change filter in the ansi request scenario. --- .../Scenarios/AnsiEscapeSequenceRequests.cs | 49 +++++++++++-------- .../Input/AnsiEscapeSequenceRequestsTests.cs | 7 +++ 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/UICatalog/Scenarios/AnsiEscapeSequenceRequests.cs b/UICatalog/Scenarios/AnsiEscapeSequenceRequests.cs index 8c140d0ee..f9ce6c4cc 100644 --- a/UICatalog/Scenarios/AnsiEscapeSequenceRequests.cs +++ b/UICatalog/Scenarios/AnsiEscapeSequenceRequests.cs @@ -9,12 +9,11 @@ namespace UICatalog.Scenarios; [ScenarioCategory ("Tests")] public sealed class AnsiEscapeSequenceRequests : Scenario { - private readonly List _sends = new (); + private readonly Dictionary _sends = new (); private readonly object _lockAnswers = new (); - private readonly Dictionary _answers = new (); - private readonly object _lockErrors = new (); - private readonly Dictionary _errors = new (); + private readonly Dictionary _answers = new (); + private readonly Dictionary _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, 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) diff --git a/UnitTests/Input/AnsiEscapeSequenceRequestsTests.cs b/UnitTests/Input/AnsiEscapeSequenceRequestsTests.cs index aadcc77b7..1658fb469 100644 --- a/UnitTests/Input/AnsiEscapeSequenceRequestsTests.cs +++ b/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); + } }