mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-26 15:57:56 +01:00
Change filter in the ansi request scenario.
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user