From 38a050c8151b9894c62b2d49ef482807412ea98c Mon Sep 17 00:00:00 2001 From: Melodi <62381002+Melodi17@users.noreply.github.com> Date: Wed, 28 Oct 2026 19:48:59 +1000 Subject: feat: ui changes; ci: add tests --- src/marlin.tests/VariableExpanderTests.cs | 39 +++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/marlin.tests/VariableExpanderTests.cs (limited to 'src/marlin.tests/VariableExpanderTests.cs') 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 _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 -- cgit v1.3.1