DebugExecuteTests.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using IvfTl.ControlHost.Debug;
  2. using IvfTl.ControlHost.Tests.Fakes;
  3. using Newtonsoft.Json.Linq;
  4. using System;
  5. using Xunit;
  6. namespace IvfTl.ControlHost.Tests
  7. {
  8. public class DebugExecuteTests
  9. {
  10. private DateTime _now = new DateTime(2026, 6, 23);
  11. private (DebugSessionManager mgr, FakeSerial serial, string sid) New()
  12. {
  13. var serial = new FakeSerial();
  14. var gate = new FakeGate(5, serial);
  15. var mgr = new DebugSessionManager(sn => gate, () => _now, 10000, _ => { });
  16. string sid = (string)mgr.Acquire(5).Result;
  17. return (mgr, serial, sid);
  18. }
  19. [Fact] public void Execute_ReadTemp_Dispatches()
  20. {
  21. var (mgr, serial, sid) = New();
  22. var r = mgr.Execute(sid, "ReadTemp", null);
  23. Assert.True(r.Ok);
  24. Assert.Contains("Temp", serial.Calls);
  25. }
  26. [Fact] public void Execute_OpenLed_Dispatches()
  27. {
  28. var (mgr, serial, sid) = New();
  29. Assert.True(mgr.Execute(sid, "OpenLed", null).Ok);
  30. Assert.Contains("OpenLed", serial.Calls);
  31. }
  32. [Fact] public void Execute_Expired_Session_Rejected()
  33. {
  34. var (mgr, _, _) = New();
  35. Assert.Equal("SESSION_EXPIRED", mgr.Execute("ghost", "ReadTemp", null).Code);
  36. }
  37. [Fact] public void Execute_Unknown_Op_Rejected()
  38. {
  39. var (mgr, _, sid) = New();
  40. var r = mgr.Execute(sid, "NoSuchOp", null);
  41. Assert.False(r.Ok);
  42. Assert.Equal("BAD_OP", r.Code);
  43. }
  44. [Fact] public void Vertical_MoveTo_InRange_Dispatches()
  45. {
  46. var (mgr, serial, sid) = New();
  47. var r = mgr.Execute(sid, "VerticalMoveTo", JObject.FromObject(new { pos = 90000 }));
  48. Assert.True(r.Ok);
  49. Assert.Contains("VMoveTo(90000)", serial.Calls);
  50. }
  51. [Fact] public void Vertical_MoveTo_OutOfRange_Rejected_NotDispatched()
  52. {
  53. var (mgr, serial, sid) = New();
  54. var r = mgr.Execute(sid, "VerticalMoveTo", JObject.FromObject(new { pos = 130000 }));
  55. Assert.Equal("OUT_OF_RANGE", r.Code);
  56. Assert.DoesNotContain("VMoveTo(130000)", serial.Calls);
  57. }
  58. [Fact] public void Horizontal_Forward_Relative_Clamped()
  59. {
  60. var (mgr, serial, sid) = New();
  61. mgr.Execute(sid, "HorizontalMoveTo", JObject.FromObject(new { pos = 215000 }));
  62. var r = mgr.Execute(sid, "HorizontalForward", JObject.FromObject(new { value = 10000 }));
  63. Assert.Equal("OUT_OF_RANGE", r.Code);
  64. }
  65. [Fact] public void WriteScanStep_Dispatches()
  66. {
  67. var (mgr, serial, sid) = New();
  68. Assert.True(mgr.Execute(sid, "WriteScanStep", JObject.FromObject(new { value = 300 })).Ok);
  69. Assert.Contains("WriteScanStep(300)", serial.Calls);
  70. }
  71. }
  72. }