using SSPCTester.Logic.Models;
namespace SSPCTester.Logic.Testing;
/// 保护功能测试:刷新固定保护测试项的实测值与测量状态。
public sealed class ProtectTest : ITestModule
{
public const string ModuleName = "保护功能";
public string Name => ModuleName;
public async Task RunAsync(TestContext ctx, IProgress progress, CancellationToken ct)
{
ProtectTestPlan.EnsureRows(ctx.Project);
for (int i = 0; i < ctx.Project.ProtectResults.Count; i++)
{
ct.ThrowIfCancellationRequested();
var row = ctx.Project.ProtectResults[i];
bool preserveManualJudgement = row.Status is TestStatus.Pass or TestStatus.Fail;
if (!preserveManualJudgement)
row.Status = TestStatus.Running;
ProtectTestPlan.RefreshMeasuredValues(ctx.Project, overwriteExisting: false);
progress.Report(new TestProgress { ModuleName = Name, Step = i, TotalSteps = ctx.Project.ProtectResults.Count, Message = $"保护项测量:{row.ProtectType}" });
await Task.Delay(150, ct).ConfigureAwait(false);
if (!preserveManualJudgement && row.Status == TestStatus.Running)
row.Status = TestStatus.Measured;
progress.Report(new TestProgress { ModuleName = Name, Step = i + 1, TotalSteps = ctx.Project.ProtectResults.Count, StepStatus = row.Status });
}
}
}