summaryrefslogtreecommitdiff
path: root/src/marlin.tests/VariableExpanderTests.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/marlin.tests/VariableExpanderTests.cs')
-rw-r--r--src/marlin.tests/VariableExpanderTests.cs39
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