Repository navigation
Expand file tree
/
Copy pathCliOutputGuardTests.cs
More file actions
107 lines (93 loc) · 3.56 KB
/
Copy pathCliOutputGuardTests.cs
File metadata and controls
107 lines (93 loc) · 3.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
using XISOSharp.Cli;
namespace XISOSharp.Tests;
/// <summary>
/// Tests for the CLI input==output refusal rules (TODO #15, xdvdfs #36).
/// Pure path logic — no fixtures, no CLI run.
/// </summary>
public sealed class CliOutputGuardTests
{
[Fact]
public void CheckRewriteOutput_NullOutput_Allows() =>
Assert.Null(CliOutputGuard.CheckRewriteOutput("game.iso", null));
[Fact]
public void CheckRewriteOutput_DistinctOutput_Allows() =>
Assert.Null(CliOutputGuard.CheckRewriteOutput("game.iso", "rewritten.iso"));
[Fact]
public void CheckRewriteOutput_SameAsInput_Refuses()
{
string? refusal = CliOutputGuard.CheckRewriteOutput("game.iso", "./game.iso");
Assert.NotNull(refusal);
Assert.Contains("omit -o", refusal, StringComparison.Ordinal);
}
[Fact]
public void CheckRewriteOutput_SameAsBackup_Refuses()
{
string? refusal = CliOutputGuard.CheckRewriteOutput("game.iso", "game.iso.old");
Assert.NotNull(refusal);
Assert.Contains(".old", refusal, StringComparison.Ordinal);
}
[Fact]
public void CheckSingleInputOutput_Same_Refuses()
{
string? refusal = CliOutputGuard.CheckSingleInputOutput("game.iso", "game.iso");
Assert.NotNull(refusal);
Assert.Contains("-o", refusal, StringComparison.Ordinal);
}
[Fact]
public void CheckSingleInputOutput_Null_Allows() =>
Assert.Null(CliOutputGuard.CheckSingleInputOutput("game.iso", null));
[Fact]
public void CheckRebuildOutput_OutputEqualsPart_RefusesAndNamesIt()
{
string? refusal = CliOutputGuard.CheckRebuildOutput("game.xiso", null,
"game.xiso", "game.video.iso", null, null);
Assert.NotNull(refusal);
Assert.Contains("game.xiso", refusal, StringComparison.Ordinal);
}
[Fact]
public void CheckRebuildOutput_OutputEqualsSectorsFile_Refuses()
{
string? refusal = CliOutputGuard.CheckRebuildOutput("sectors.txt", "sectors.txt",
"game.xiso", "game.video.iso", null, null);
Assert.NotNull(refusal);
Assert.Contains("sectors", refusal, StringComparison.Ordinal);
}
[Fact]
public void CheckRebuildOutput_Distinct_Allows() =>
Assert.Null(CliOutputGuard.CheckRebuildOutput("redump.iso", "sectors.txt",
"game.xiso", "game.video.iso", null, null));
[Fact]
public void CheckImageOutput_Same_Refuses()
{
string? refusal = CliOutputGuard.CheckImageOutput("game.iso", "game.iso");
Assert.NotNull(refusal);
Assert.Contains("same file", refusal, StringComparison.Ordinal);
}
[Fact]
public void CheckImageOutput_Distinct_Allows() =>
Assert.Null(CliOutputGuard.CheckImageOutput("game.iso", "game.cso"));
[Theory]
[InlineData("-d")]
[InlineData("-o")]
[InlineData("-x")]
[InlineData("--help")]
[InlineData("--skip-existing")]
[InlineData("--continue-on-error")]
[InlineData("--batch")]
public void CheckMisplacedFlag_KnownFlag_ReportsMustComeFirst(string token)
{
string? refusal = CliOutputGuard.CheckMisplacedFlag(token);
Assert.NotNull(refusal);
Assert.Contains(token, refusal, StringComparison.Ordinal);
Assert.Contains("must come before", refusal, StringComparison.Ordinal);
}
[Theory]
[InlineData("game.iso")]
[InlineData("./new/")]
[InlineData("-Z")]
[InlineData("-")]
[InlineData("")]
[InlineData(null)]
public void CheckMisplacedFlag_NotAFlag_Allows(string? token) =>
Assert.Null(CliOutputGuard.CheckMisplacedFlag(token));
}