forked from scriptcs/scriptcs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathArgumentHandlerTests.cs
More file actions
137 lines (112 loc) · 5.69 KB
/
ArgumentHandlerTests.cs
File metadata and controls
137 lines (112 loc) · 5.69 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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
using Moq;
using ScriptCs.Argument;
using ScriptCs.Contracts;
using Should;
using Xunit;
namespace ScriptCs.Tests
{
public class ArgumentHandlerTests
{
public class ParseMethod
{
private static IArgumentHandler Setup(string fileContent, string fileName = "scriptcs.opts", bool fileExists = true)
{
const string currentDirectory = "C:\\test\\folder";
string filePath = currentDirectory + '\\' + fileName;
var fs = new Mock<IFileSystem>();
fs.SetupGet(x => x.CurrentDirectory).Returns(currentDirectory);
fs.Setup(x => x.FileExists(filePath)).Returns(fileExists);
fs.Setup(x => x.ReadFile(filePath)).Returns(fileContent);
var console = new ScriptConsole();
return new ArgumentHandler(new ArgumentParser(console), new ConfigFileParser(console), fs.Object);
}
[Fact]
public void ShouldHandleConfigFileAndCommandLineArguments()
{
const string file = "{\"Install\": \"install test value\" }";
string[] args = { "server.csx", "-log", "error", "--", "-port", "8080" };
var argumentHandler = Setup(file);
var result = argumentHandler.Parse(args);
result.ShouldNotBeNull();
result.Arguments.ShouldEqual(args);
result.CommandArguments.ScriptName.ShouldEqual("server.csx");
result.CommandArguments.LogLevel.ShouldEqual(LogLevel.Error);
result.CommandArguments.Install.ShouldEqual("install test value");
result.ScriptArguments.ShouldEqual(new string[] { "-port", "8080" });
}
[Fact]
public void ShouldHandleCommandLineArgumentsOverConfigFile()
{
const string file = "{\"Install\": \"config file arg\", \"debug\": \"true\" }";
string[] args = { "server.csx", "-Install", "command line arg", "-cache", "--", "-port", "8080" };
var argumentHandler = Setup(file);
var result = argumentHandler.Parse(args);
result.ShouldNotBeNull();
result.Arguments.ShouldEqual(args);
result.CommandArguments.ScriptName.ShouldEqual("server.csx");
result.CommandArguments.Install.ShouldEqual("command line arg");
result.CommandArguments.Cache.ShouldEqual(true);
result.ScriptArguments.ShouldEqual(new string[] { "-port", "8080" });
}
[Fact]
public void ShouldHandleCommandLineArgumentsOverConfigFileWithPropertyName()
{
const string file = "{\"LogLevel\": \"info\", }";
string[] args = { "server.csx", "-log", "error", "--", "-port", "8080" };
var argumentHandler = Setup(file);
var result = argumentHandler.Parse(args);
result.ShouldNotBeNull();
result.Arguments.ShouldEqual(args);
result.CommandArguments.ScriptName.ShouldEqual("server.csx");
result.CommandArguments.LogLevel.ShouldEqual(LogLevel.Error);
result.ScriptArguments.ShouldEqual(new string[] { "-port", "8080" });
}
[Fact]
public void ShouldHandleInvalidCommandLineArguments()
{
string[] args = { "-version", "-foo", "-bar" };
var argumentHandler = Setup(null, "test.txt", false);
var result = argumentHandler.Parse(args);
result.CommandArguments.ShouldBeNull();
result.Arguments.Length.ShouldEqual<int>(3);
}
[Fact]
public void ShouldHandleOnlyCommandLineArguments()
{
string[] args = { "server.csx", "--", "-port", "8080" };
var argumentHandler = Setup(null, "test.txt", false);
var result = argumentHandler.Parse(args);
result.ShouldNotBeNull();
result.Arguments.ShouldEqual(args);
result.CommandArguments.ScriptName.ShouldEqual("server.csx");
result.ScriptArguments.ShouldEqual(new string[] { "-port", "8080" });
}
[Fact]
public void ShouldHandleOnlyConfigFile()
{
const string file = "{\"log\": \"error\", \"script\": \"server.csx\" }";
var argumentHandler = Setup(file);
var result = argumentHandler.Parse(new string[0]);
result.ShouldNotBeNull();
result.CommandArguments.ScriptName.ShouldEqual("server.csx");
result.CommandArguments.LogLevel.ShouldEqual(LogLevel.Error);
result.ScriptArguments.ShouldEqual(new string[0]);
}
[Fact]
public void ShouldHandleCustomConfigFile()
{
const string fileName = "text.txt";
const string file = "{\"Install\": \"install test value\" }";
string[] args = { "server.csx", "-log", "error", "-config", fileName, "--", "-port", "8080" };
var argumentHandler = Setup(file, fileName);
var result = argumentHandler.Parse(args);
result.ShouldNotBeNull();
result.Arguments.ShouldEqual(args);
result.CommandArguments.ScriptName.ShouldEqual("server.csx");
result.CommandArguments.LogLevel.ShouldEqual(LogLevel.Error);
result.ScriptArguments.ShouldEqual(new string[] { "-port", "8080" });
result.CommandArguments.Install.ShouldEqual("install test value");
}
}
}
}