예제 #1
0
파일: Program.cs 프로젝트: mikeruhl/goflag
        static void Main(string[] args)
        {
            var fs         = Flag.NewFlagSet("BooleanExample", ErrorHandling.ExitOnError);
            var switchFlag = Flag.Bool("insert", false, "use the flag without a value as a bool as a switch");
            var equalsFlag = Flag.Bool("equals", false, "use equals(=) sign format as well");
            var intFlag    = Flag.Bool("inty", false, "use 0 or 1 to indicate bool value");

            args = new[] { "-insert", "-equals=true ", "-inty", "1" };
            fs.Parse(args);
            Console.WriteLine($"-insert value: {switchFlag}");
            Console.WriteLine($"-equalsFlag value: {equalsFlag}");
            Console.WriteLine($"-intFlag value: {intFlag}");
        }
예제 #2
0
        public void TestChangingArgs()
        {
            ResetForTesting(() => Assert.True(false, "bad parse"));
            //the go src sets os.Args, which is the command line arguments, something that is read-only in .net
            var args   = new[] { "cmd", "-before", "subcmd", "-after", "args" };
            var before = Flag.Bool("before", false, "");
            var err    = Flag.CommandLine.Parse(args.Skip(1).ToArray());

            Assert.True(err == null, err?.ToString());

            var cmd   = Flag.Arg(0);
            var after = Flag.Bool("after", false, "");

            args = Flag.Args();
            Flag.CommandLine.Parse(args.Skip(1).ToArray());
            args = Flag.Args();
            Assert.True(before && cmd == "subcmd" && after && args[0] == "args", $"expected true subcmd true [args] got {before} {cmd} {after} {string.Join(',', args)}");
        }
예제 #3
0
        public void TestEverything()
        {
            Flag.Bool("test_bool", false, "bool value");
            Flag.Int("test_int", 0, "int value");
            Flag.Int64("test_int64", 0, "int64 value");
            Flag.Uint("test_uint", 0, "uint value");
            Flag.Uint64("test_uint64", 0, "uint64 value");
            Flag.String("test_string", "0", "string value");
            Flag.Float("test_float64", 0, "float64 value");
            Flag.Duration("test_duration", TimeSpan.FromSeconds(0), "time.Duration value");

            var desired = "0";
            var m       = new Dictionary <string, IFlag>();
            var visitor = new Action <IFlag>(f =>
            {
                if (f.Name.Length > 5 && f.Name.Substring(0, 5) == "test_")
                {
                    m[f.Name] = f;
                    var ok    = false;
                    if (f.ToString() == desired)
                    {
                        ok = true;
                    }
                    else if (f.Name == "test_bool" && f.ToString() == (desired == "1" ? "True" : "False"))
                    {
                        ok = true;
                    }
                    else if (f.Name == "test_duration" && f.ToString() == TimeSpan.Parse(desired == "1" ? "00:00:01" : "00:00:00").ToString())
                    {
                        ok = true;
                    }

                    Assert.True(ok, $"Visit: bad value {f} for {f.Name}");
                }
            });

            Flag.VisitAll(visitor);

            Assert.True(8 == m.Count, "VisitAll misses some flags");

            m = new Dictionary <string, IFlag>();

            Flag.Visit(visitor);
            Assert.True(0 == m.Count, "Visit sees unset flags");


            // Now set all flags
            Flag.Set("test_bool", "true");
            Flag.Set("test_int", "1");
            Flag.Set("test_int64", "1");
            Flag.Set("test_uint", "1");
            Flag.Set("test_uint64", "1");
            Flag.Set("test_string", "1");
            Flag.Set("test_float64", "1");
            Flag.Set("test_duration", "00:00:01");
            desired = "1";
            Flag.Visit(visitor);
            Assert.True(8 == m.Count, "Visit fails after set");

            // Now test they're visited in sort order.
            var flagNames = new List <string>();

            Flag.Visit(f => { flagNames.Add(f.Name); });
            var sorted = flagNames.ToArray();

            Array.Sort(sorted);

            for (var i = 0; i < flagNames.Count; i++)
            {
                Assert.True(flagNames[i] == sorted[i], $"flag names not sorted: {string.Join(' ', flagNames)}");
            }
        }
예제 #4
0
        public void TestGet()
        {
            Flag.Bool("test_bool", true, "bool value");
            Flag.Int("test_int", 1, "int value");
            Flag.Int64("test_int64", 2, "int64 value");
            Flag.Uint("test_uint", 3, "uint value");
            Flag.Uint64("test_uint64", 4, "uint64 value");
            Flag.String("test_string", "5", "string value");
            Flag.Float("test_float64", 6, "float64 value");
            Flag.Duration("test_duration", TimeSpan.FromSeconds(7), "time.Duration value");

            var visitor = new Action <IFlag>(f =>
            {
                var ok = false;
                if (f.Name.Length > 5 && f.Name.Substring(0, 5) == "test_")
                {
                    if (f.TrackedType == typeof(bool))
                    {
                        var b = f as ValueFlag <bool>;
                        ok    = b;
                    }
                    else if (f.TrackedType == typeof(int))
                    {
                        var b = f as ValueFlag <int>;
                        ok    = b == 1;
                    }
                    else if (f.TrackedType == typeof(long))
                    {
                        var b = f as ValueFlag <long>;
                        ok    = b == 2;
                    }
                    else if (f.TrackedType == typeof(uint))
                    {
                        var b = f as ValueFlag <uint>;
                        ok    = b == 3;
                    }
                    else if (f.TrackedType == typeof(ulong))
                    {
                        var b = f as ValueFlag <ulong>;
                        ok    = b == 4;
                    }
                    else if (f.TrackedType == typeof(string))
                    {
                        var b = f as ValueFlag <string>;
                        ok    = b == "5";
                    }
                    else if (f.TrackedType == typeof(float))
                    {
                        var b = f as ValueFlag <float>;
                        ok    = b == 6;
                    }
                    else if (f.TrackedType == typeof(TimeSpan))
                    {
                        var b = f as ValueFlag <TimeSpan>;
                        ok    = b == TimeSpan.FromSeconds(7);
                    }

                    Assert.True(ok, $"Visit: bad value {f.TrackedType.Name}({f}) for {f.Name}");
                }
            });

            Flag.VisitAll(visitor);
        }