diff options
Diffstat (limited to 'src/marlin.tests/VariableExpanderTests.cs')
| -rw-r--r-- | src/marlin.tests/VariableExpanderTests.cs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/marlin.tests/VariableExpanderTests.cs b/src/marlin.tests/VariableExpanderTests.cs new file mode 100644 index 0000000..c04152e --- /dev/null +++ b/src/marlin.tests/VariableExpanderTests.cs @@ -0,0 +1,39 @@ +namespace marlin.tests; + +using core.util; + +public class VariableExpanderTests +{ + private Dictionary<string, string> _variables = new(); + + [SetUp] + public void Setup() + { + this._variables["name"] = "john"; + this._variables["branch"] = "master"; + } + + [TestCase("hello world", "hello world")] // passthroughs + [TestCase("hi {name}!", "hi john!")] // classic variable expansion + [TestCase("hi {name=bob}!", "hi john!")] // existent variable with fallback + [TestCase("hi {nonvar=bob}!", "hi bob!")] // non-existent variable with fallback + [TestCase("hi {name? plane}!", "hi plane!")] // use value if set + [TestCase("hi {nonvar? plane}!", "hi !")] // omit value if not set + [TestCase("mycommand {--checkout branch}", "mycommand --checkout master")] // inject cli arg when set + [TestCase("mycommand {--checkout nonvar}", "mycommand")] // omit cli arg when not set + [TestCase("i will {{escape}}", "i will {escape}")] // escaping works + public void ExpansionMatches(string input, string output) + { + var result = VariableExpander.Expand(input, this._variables); + Assert.That(result, Is.EqualTo(output)); + } + + [TestCase("un {", typeof(UnmatchedBraceException))] // unmatched leading + [TestCase("un }", typeof(UnmatchedBraceException))] // unmatched trailing + [TestCase("{nonvar}", typeof(VariableNotFoundException))] // non existent variable + public void ExpansionFails(string input, Type exceptionType) + { + Assert.That(() => VariableExpander.Expand(input, this._variables), + Throws.TypeOf(exceptionType)); + } +}
\ No newline at end of file |
