Skip to content

Commit d5d44c5

Browse files
fredrikhrjonsequitur
authored andcommitted
Add tests for special environment directive cases
1 parent 48816c4 commit d5d44c5

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

src/System.CommandLine.Tests/EnvironmentVariableDirectiveTests.cs

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.CommandLine.Builder;
44
using System.CommandLine.Invocation;
55
using System.CommandLine.Parsing;
6+
using System.Linq;
67
using System.Text;
78
using System.Threading.Tasks;
89

@@ -85,5 +86,100 @@ public static async Task Trims_environment_variable_value()
8586

8687
Assert.True(asserted);
8788
}
89+
90+
[Fact]
91+
public static async Task Sets_environment_variable_value_containing_equals_sign()
92+
{
93+
bool asserted = false;
94+
string variable = $"TEST_ENVIRONMENT_VARIABLE{randomizer.Next()}";
95+
const string value = "This is = a test containing equals";
96+
var rootCommand = new RootCommand
97+
{
98+
Handler = CommandHandler.Create(() =>
99+
{
100+
asserted = true;
101+
Assert.Equal(value, Environment.GetEnvironmentVariable(variable));
102+
})
103+
};
104+
105+
var parser = new CommandLineBuilder(rootCommand)
106+
.UseEnvironmentVariableDirective()
107+
.Build();
108+
109+
await parser.InvokeAsync(new[] { $"[env:{variable}={value}]" });
110+
111+
Assert.True(asserted);
112+
}
113+
114+
[Fact]
115+
public static async Task Ignores_environment_directive_without_equals_sign()
116+
{
117+
bool asserted = false;
118+
string variable = $"TEST_ENVIRONMENT_VARIABLE{randomizer.Next()}";
119+
var rootCommand = new RootCommand
120+
{
121+
Handler = CommandHandler.Create(() =>
122+
{
123+
asserted = true;
124+
Assert.Null(Environment.GetEnvironmentVariable(variable));
125+
})
126+
};
127+
128+
var parser = new CommandLineBuilder(rootCommand)
129+
.UseEnvironmentVariableDirective()
130+
.Build();
131+
132+
await parser.InvokeAsync(new[] { $"[env:{variable}]" });
133+
134+
Assert.True(asserted);
135+
}
136+
137+
[Fact]
138+
public static async Task Ignores_environment_directive_with_empty_variable_name()
139+
{
140+
bool asserted = false;
141+
string value = $"This is a test, random: {randomizer.Next()}";
142+
var rootCommand = new RootCommand
143+
{
144+
Handler = CommandHandler.Create(() =>
145+
{
146+
asserted = true;
147+
var env = Environment.GetEnvironmentVariables();
148+
Assert.DoesNotContain(value, env.Values.Cast<string>().ToArray());
149+
})
150+
};
151+
152+
var parser = new CommandLineBuilder(rootCommand)
153+
.UseEnvironmentVariableDirective()
154+
.Build();
155+
156+
await parser.InvokeAsync(new[] { $"[env:={value}]" });
157+
158+
Assert.True(asserted);
159+
}
160+
161+
[Fact]
162+
public static async Task Ignores_environment_directive_with_whitespace_variable_name()
163+
{
164+
bool asserted = false;
165+
string value = $"This is a test, random: {randomizer.Next()}";
166+
var rootCommand = new RootCommand
167+
{
168+
Handler = CommandHandler.Create(() =>
169+
{
170+
asserted = true;
171+
var env = Environment.GetEnvironmentVariables();
172+
Assert.DoesNotContain(value, env.Values.Cast<string>().ToArray());
173+
})
174+
};
175+
176+
var parser = new CommandLineBuilder(rootCommand)
177+
.UseEnvironmentVariableDirective()
178+
.Build();
179+
180+
await parser.InvokeAsync(new[] { $"[env: ={value}]" });
181+
182+
Assert.True(asserted);
183+
}
88184
}
89185
}

0 commit comments

Comments
 (0)