public static bool FillVariables(this ITerminal terminal, TextReader input, IEnumerable <Variable> variables, ResolveContext context) { Assert.IsNotNull(variables); Assert.IsNotNull(context); bool isFirst = true; foreach (Variable v in variables) { if (context.HasVariable(v.Name)) { continue; } if (isFirst) { terminal.OutputLine("Please input variable value:"); isFirst = false; } string?line = terminal.InputVariableValue(input, v); if (string.IsNullOrEmpty(line)) { if (v.IsRequired) { return(false); } } else { _ = context.WithVariable(v.Name, line !); } } return(true); }
public void Basic() { ResolveContext context = new ResolveContext(); _ = context.WithVariable("a", "a"); Assert.IsTrue(context.HasVariable("a")); _ = context.WithVariable("a", "b"); Assert.AreEqual("b", context.GetVariable <string>(new Variable("a"))); Assert.IsFalse(context.TryGetVariable <int>(new Variable("a"), out _)); Assert.IsTrue(context.TryGetVariable <string>(new Variable("a"), out _)); _ = context.WithoutVariable("a"); Assert.IsFalse(context.HasVariable("a")); _ = Assert.ThrowsException <Exception>(() => context.GetVariable <string>(new Variable("a").Required())); Assert.IsFalse(context.TryGetVariable <string>(new Variable("a"), out _)); Assert.AreEqual("c", context.GetVariable <string>(new Variable("a").NotRequired("c"))); }