Example #1
0
        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")));
        }