Repository navigation
Expand file tree
/
Copy pathOverwritePromptExtraTests.cs
More file actions
115 lines (101 loc) · 3.79 KB
/
Copy pathOverwritePromptExtraTests.cs
File metadata and controls
115 lines (101 loc) · 3.79 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
108
109
110
111
112
113
114
115
using XISOSharp.Cli;
namespace XISOSharp.Tests;
/// <summary>
/// Additional unit tests for <see cref="OverwritePrompt"/>: contradictory flags,
/// existing file/directory handling, and interactive prompt responses.
/// </summary>
public class OverwritePromptExtraTests : IDisposable
{
private readonly List<string> _tempDirs = [];
/// <summary>Removes temporary directories.</summary>
public void Dispose()
{
foreach (string dir in _tempDirs)
{
try
{
Directory.Delete(dir, recursive: true);
}
catch
{
// Best effort.
}
}
}
private string CreateTempDir()
{
string dir = Path.Combine(Path.GetTempPath(), $"xiso_prompt_{Guid.NewGuid():N}");
Directory.CreateDirectory(dir);
_tempDirs.Add(dir);
return dir;
}
private static bool Confirm(string path, bool yes, bool no, string input, out string output)
{
StringWriter writer = new();
bool result = OverwritePrompt.ConfirmOverwrite(path, yes, no, new StringReader(input), writer);
output = writer.ToString();
return result;
}
/// <summary>Verifies a missing output is accepted without prompting.</summary>
[Fact]
public void MissingPath_ReturnsTrue()
{
string missing = Path.Combine(CreateTempDir(), "missing.bin");
Assert.True(Confirm(missing, false, false, string.Empty, out string output));
Assert.Equal(string.Empty, output);
}
/// <summary>Verifies contradictory flags deny even when the output does not exist.</summary>
[Fact]
public void BothFlags_Deny()
{
string missing = Path.Combine(CreateTempDir(), "missing.bin");
Assert.False(Confirm(missing, true, true, string.Empty, out string output));
Assert.Contains("Cannot use both", output, StringComparison.Ordinal);
}
/// <summary>Verifies assume-no refuses an existing file.</summary>
[Fact]
public void AssumeNo_ExistingFile_Refuses()
{
string dir = CreateTempDir();
string file = Path.Combine(dir, "out.bin");
File.WriteAllText(file, "x");
Assert.False(Confirm(file, false, true, string.Empty, out string output));
Assert.Contains("File already exists", output, StringComparison.Ordinal);
}
/// <summary>Verifies assume-no refuses an existing directory output.</summary>
[Fact]
public void AssumeNo_ExistingDirectory_Refuses()
{
string dir = CreateTempDir();
Assert.False(Confirm(dir, false, true, string.Empty, out string output));
Assert.Contains("File already exists", output, StringComparison.Ordinal);
}
/// <summary>Verifies assume-yes overwrites an existing file without prompting.</summary>
[Fact]
public void AssumeYes_ExistingFile_ReturnsTrue()
{
string dir = CreateTempDir();
string file = Path.Combine(dir, "out.bin");
File.WriteAllText(file, "x");
Assert.True(Confirm(file, true, false, string.Empty, out _));
}
/// <summary>Verifies interactive yes answers proceed and other answers deny.</summary>
[Theory]
[InlineData("y", true)]
[InlineData("Y", true)]
[InlineData("yes", true)]
[InlineData("YES", true)]
[InlineData(" yes ", true)]
[InlineData("n", false)]
[InlineData("no", false)]
[InlineData("", false)]
[InlineData("maybe", false)]
public void Prompt_Responses(string response, bool expected)
{
string dir = CreateTempDir();
string file = Path.Combine(dir, "out.bin");
File.WriteAllText(file, "x");
Assert.Equal(expected, Confirm(file, false, false, response, out string output));
Assert.Contains("Would you like to overwrite?", output, StringComparison.Ordinal);
}
}