mirror of
https://github.com/Tyrrrz/CliFx.git
synced 2025-10-25 15:19:17 +00:00
180 lines
5.7 KiB
C#
180 lines
5.7 KiB
C#
using System.Collections.Generic;
|
|
using CliFx.Models;
|
|
using CliFx.Services;
|
|
using NUnit.Framework;
|
|
|
|
namespace CliFx.Tests
|
|
{
|
|
[TestFixture]
|
|
public class CommandOptionParserTests
|
|
{
|
|
private static IEnumerable<TestCaseData> GetData_ParseOptions()
|
|
{
|
|
yield return new TestCaseData(new string[0], CommandOptionSet.Empty);
|
|
|
|
yield return new TestCaseData(
|
|
new[] {"--option", "value"},
|
|
new CommandOptionSet(new[]
|
|
{
|
|
new CommandOption("option", "value")
|
|
})
|
|
);
|
|
|
|
yield return new TestCaseData(
|
|
new[] {"--option1", "value1", "--option2", "value2"},
|
|
new CommandOptionSet(new[]
|
|
{
|
|
new CommandOption("option1", "value1"),
|
|
new CommandOption("option2", "value2")
|
|
})
|
|
);
|
|
|
|
yield return new TestCaseData(
|
|
new[] {"--option", "value1", "value2"},
|
|
new CommandOptionSet(new[]
|
|
{
|
|
new CommandOption("option", new[] {"value1", "value2"})
|
|
})
|
|
);
|
|
|
|
yield return new TestCaseData(
|
|
new[] {"--option", "value1", "--option", "value2"},
|
|
new CommandOptionSet(new[]
|
|
{
|
|
new CommandOption("option", new[] {"value1", "value2"})
|
|
})
|
|
);
|
|
|
|
yield return new TestCaseData(
|
|
new[] {"-a", "value"},
|
|
new CommandOptionSet(new[]
|
|
{
|
|
new CommandOption("a", "value")
|
|
})
|
|
);
|
|
|
|
yield return new TestCaseData(
|
|
new[] {"-a", "value1", "-b", "value2"},
|
|
new CommandOptionSet(new[]
|
|
{
|
|
new CommandOption("a", "value1"),
|
|
new CommandOption("b", "value2")
|
|
})
|
|
);
|
|
|
|
yield return new TestCaseData(
|
|
new[] {"-a", "value1", "value2"},
|
|
new CommandOptionSet(new[]
|
|
{
|
|
new CommandOption("a", new[] {"value1", "value2"})
|
|
})
|
|
);
|
|
|
|
yield return new TestCaseData(
|
|
new[] {"-a", "value1", "-a", "value2"},
|
|
new CommandOptionSet(new[]
|
|
{
|
|
new CommandOption("a", new[] {"value1", "value2"})
|
|
})
|
|
);
|
|
|
|
yield return new TestCaseData(
|
|
new[] {"--option1", "value1", "-b", "value2"},
|
|
new CommandOptionSet(new[]
|
|
{
|
|
new CommandOption("option1", "value1"),
|
|
new CommandOption("b", "value2")
|
|
})
|
|
);
|
|
|
|
yield return new TestCaseData(
|
|
new[] {"--switch"},
|
|
new CommandOptionSet(new[]
|
|
{
|
|
new CommandOption("switch")
|
|
})
|
|
);
|
|
|
|
yield return new TestCaseData(
|
|
new[] {"--switch1", "--switch2"},
|
|
new CommandOptionSet(new[]
|
|
{
|
|
new CommandOption("switch1"),
|
|
new CommandOption("switch2")
|
|
})
|
|
);
|
|
|
|
yield return new TestCaseData(
|
|
new[] {"-s"},
|
|
new CommandOptionSet(new[]
|
|
{
|
|
new CommandOption("s")
|
|
})
|
|
);
|
|
|
|
yield return new TestCaseData(
|
|
new[] {"-a", "-b"},
|
|
new CommandOptionSet(new[]
|
|
{
|
|
new CommandOption("a"),
|
|
new CommandOption("b")
|
|
})
|
|
);
|
|
|
|
yield return new TestCaseData(
|
|
new[] {"-ab"},
|
|
new CommandOptionSet(new[]
|
|
{
|
|
new CommandOption("a"),
|
|
new CommandOption("b")
|
|
})
|
|
);
|
|
|
|
yield return new TestCaseData(
|
|
new[] {"-ab", "value"},
|
|
new CommandOptionSet(new[]
|
|
{
|
|
new CommandOption("a"),
|
|
new CommandOption("b", "value")
|
|
})
|
|
);
|
|
|
|
yield return new TestCaseData(
|
|
new[] {"command"},
|
|
new CommandOptionSet("command")
|
|
);
|
|
|
|
yield return new TestCaseData(
|
|
new[] {"command", "--option", "value"},
|
|
new CommandOptionSet("command", new[]
|
|
{
|
|
new CommandOption("option", "value")
|
|
})
|
|
);
|
|
}
|
|
|
|
[Test]
|
|
[TestCaseSource(nameof(GetData_ParseOptions))]
|
|
public void ParseOptions_Test(IReadOnlyList<string> commandLineArguments, CommandOptionSet expectedCommandOptionSet)
|
|
{
|
|
// Arrange
|
|
var parser = new CommandOptionParser();
|
|
|
|
// Act
|
|
var optionSet = parser.ParseOptions(commandLineArguments);
|
|
|
|
// Assert
|
|
Assert.That(optionSet.CommandName, Is.EqualTo(expectedCommandOptionSet.CommandName), "Command name");
|
|
Assert.That(optionSet.Options.Count, Is.EqualTo(expectedCommandOptionSet.Options.Count), "Option count");
|
|
|
|
for (var i = 0; i < optionSet.Options.Count; i++)
|
|
{
|
|
Assert.That(optionSet.Options[i].Name, Is.EqualTo(expectedCommandOptionSet.Options[i].Name),
|
|
$"Option[{i}] name");
|
|
|
|
Assert.That(optionSet.Options[i].Values, Is.EqualTo(expectedCommandOptionSet.Options[i].Values),
|
|
$"Option[{i}] values");
|
|
}
|
|
}
|
|
}
|
|
} |