✨ feat(status): 添加点动摇杆请求日志
* 将状态页直角坐标点动改为 XYZ/WPR 双摇杆布局 * 添加 MovePose 请求日志与清空入口,便于现场观察下发内容 * 扩展状态页集成测试,覆盖摇杆控件和日志资源
This commit is contained in:
@@ -35,7 +35,7 @@ public sealed class StatusEndpointTests(FlyshotServerFactory factory) : IClassFi
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 状态页应当提供直角坐标点动按钮,并复用现有 MovePose HTTP 接口。
|
||||
/// 状态页应当提供双摇杆直角坐标点动面板,并复用现有 MovePose HTTP 接口。
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task GetStatusPageAssets_ExposeCartesianJogControls()
|
||||
@@ -47,24 +47,45 @@ public sealed class StatusEndpointTests(FlyshotServerFactory factory) : IClassFi
|
||||
|
||||
var html = await htmlResponse.Content.ReadAsStringAsync();
|
||||
Assert.Contains("直角坐标点动", html, StringComparison.Ordinal);
|
||||
Assert.Contains("XYZ 平移摇杆", html, StringComparison.Ordinal);
|
||||
Assert.Contains("WPR 姿态摇杆", html, StringComparison.Ordinal);
|
||||
Assert.Contains("id=\"linear-step\"", html, StringComparison.Ordinal);
|
||||
Assert.Contains("id=\"angular-step\"", html, StringComparison.Ordinal);
|
||||
Assert.Contains("max=\"20\"", html, StringComparison.Ordinal);
|
||||
Assert.Contains("请求日志", html, StringComparison.Ordinal);
|
||||
Assert.Contains("id=\"request-log\"", html, StringComparison.Ordinal);
|
||||
Assert.Contains("id=\"clear-log\"", html, StringComparison.Ordinal);
|
||||
|
||||
foreach (var axis in new[] { "x", "y", "z", "w", "p", "r" })
|
||||
foreach (var (axis, negative, positive) in new[]
|
||||
{
|
||||
("x", "X-", "X+"),
|
||||
("y", "Y-", "Y+"),
|
||||
("z", "Z-", "Z+"),
|
||||
("w", "W-", "W+"),
|
||||
("p", "P-", "P+"),
|
||||
("r", "R-", "R+")
|
||||
})
|
||||
{
|
||||
Assert.Contains($"data-axis=\"{axis}\"", html, StringComparison.Ordinal);
|
||||
Assert.Contains($"data-axis=\"{axis}\" data-direction=\"1\"", html, StringComparison.Ordinal);
|
||||
Assert.Contains($"data-axis=\"{axis}\" data-direction=\"-1\"", html, StringComparison.Ordinal);
|
||||
Assert.Contains(negative, html, StringComparison.Ordinal);
|
||||
Assert.Contains(positive, html, StringComparison.Ordinal);
|
||||
}
|
||||
|
||||
using var scriptResponse = await client.GetAsync("/assets/status.js");
|
||||
Assert.Equal(HttpStatusCode.OK, scriptResponse.StatusCode);
|
||||
|
||||
var script = await scriptResponse.Content.ReadAsStringAsync();
|
||||
Assert.Contains("/api/status/snapshot", script, StringComparison.Ordinal);
|
||||
Assert.Contains("/move_pose/", script, StringComparison.Ordinal);
|
||||
Assert.Contains("cartesianPose", script, StringComparison.Ordinal);
|
||||
Assert.Contains("pointerdown", script, StringComparison.Ordinal);
|
||||
Assert.Contains("pointerup", script, StringComparison.Ordinal);
|
||||
Assert.Contains("pointerleave", script, StringComparison.Ordinal);
|
||||
Assert.Contains("blur", script, StringComparison.Ordinal);
|
||||
Assert.Contains("request-log", script, StringComparison.Ordinal);
|
||||
Assert.Contains("clear-log", script, StringComparison.Ordinal);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user