feat: verify Tornado PGM cut sequence

This commit is contained in:
2026-07-10 16:05:06 +09:00
parent 930424b752
commit d12a5d8095
15 changed files with 4344 additions and 74 deletions

View File

@@ -263,6 +263,79 @@ public sealed class SmokeCommandLineTests
Assert.Equal("invalid-port", parsed.ErrorCode);
}
[Fact]
public void Parse_PgmCutsSequenceRequiresItsOwnLongAcknowledgementAndFixedInputs()
{
var complete = ValidPgmCutsArguments();
var missingAcknowledgement = SmokeCommandLine.Parse(
complete.Where(value => value != SmokeCommandLine.PgmCutsSequenceAcknowledgementFlag)
.ToArray());
var wrongAcknowledgement = SmokeCommandLine.Parse(
complete.Select(value => value == SmokeCommandLine.PgmCutsSequenceAcknowledgementFlag
? SmokeCommandLine.AcknowledgementFlag
: value).ToArray());
var parsed = SmokeCommandLine.Parse(complete);
var explicitObservation = SmokeCommandLine.Parse(
complete.Concat(["--observe-ms", "5000"]).ToArray());
Assert.False(missingAcknowledgement.IsValid);
Assert.Equal("missing-acknowledgement", missingAcknowledgement.ErrorCode);
Assert.False(wrongAcknowledgement.IsValid);
Assert.Equal("unknown-option", wrongAcknowledgement.ErrorCode);
Assert.True(parsed.IsValid);
Assert.True(explicitObservation.IsValid);
Assert.Equal(SmokeCommandKind.PgmCutsSequence, parsed.Invocation.Kind);
Assert.Equal(5_000, parsed.Invocation.ObservationMilliseconds);
Assert.Equal("C:\\Cuts", parsed.Invocation.SceneRoot);
Assert.Null(parsed.Invocation.ConfigPath);
Assert.Null(parsed.Invocation.PrepareSceneCode);
Assert.Null(parsed.Invocation.NextSceneCode);
}
[Theory]
[InlineData("--config")]
[InlineData("--prepare")]
[InlineData("--next")]
public void Parse_PgmCutsSequenceRejectsConfigAndCallerSelectedScenes(string option)
{
var parsed = SmokeCommandLine.Parse(
ValidPgmCutsArguments().Concat([option, "sensitive-value"]).ToArray());
Assert.False(parsed.IsValid);
Assert.Equal("unknown-option", parsed.ErrorCode);
}
[Theory]
[InlineData("4999")]
[InlineData("5001")]
[InlineData("secret")]
public void Parse_PgmCutsSequenceOnlyAcceptsExplicitFiveSecondObservation(string value)
{
var parsed = SmokeCommandLine.Parse(
ValidPgmCutsArguments().Concat(["--observe-ms", value]).ToArray());
Assert.False(parsed.IsValid);
Assert.Equal("invalid-observation-duration", parsed.ErrorCode);
}
[Theory]
[InlineData("localhost", "C:\\Cuts")]
[InlineData("192.0.2.1", "C:\\Cuts")]
[InlineData("127.0.0.1", "relative-cuts")]
public void Parse_PgmCutsSequenceRequiresLiteralLoopbackAndAbsoluteSceneRoot(
string host,
string sceneRoot)
{
var arguments = ValidPgmCutsArguments();
arguments[Array.IndexOf(arguments, "127.0.0.1")] = host;
arguments[Array.IndexOf(arguments, "C:\\Cuts")] = sceneRoot;
var parsed = SmokeCommandLine.Parse(arguments);
Assert.False(parsed.IsValid);
Assert.Equal("missing-or-invalid-required-option", parsed.ErrorCode);
}
private static SmokeCommandParseResult ValidSequenceArguments(
string prepare = "5001",
string observation = "1000") =>
@@ -279,4 +352,18 @@ public sealed class SmokeCommandLineTests
"--observe-ms",
observation
]);
private static string[] ValidPgmCutsArguments() =>
[
"--pgm-cuts-sequence",
SmokeCommandLine.PgmCutsSequenceAcknowledgementFlag,
"--host",
"127.0.0.1",
"--port",
"30001",
"--expected-pgm-window-title",
"Tornado2 PGM",
"--scene-root",
"C:\\Cuts"
];
}