Пример #1
0
        public void Hidden_commands_are_ignored_when_loading_commands()
        {
            // ARRANGE
            using var assembly = Compile(@"
                using System;
                using CommandLine;

                [Verb(""command1"")]
                public class Command1Options
                { }

                [Verb(""command2"", Hidden = true)]
                public class Command2Options
                { }
            ");

            var sut = new CommandLineParserLoader(m_Logger);

            // ACT
            var application = sut.Load(assembly);

            // ASSERT
            Assert.NotNull(application);
            var multiCommandApplication = Assert.IsType <MultiCommandApplicationDocumentation>(application);

            Assert.Collection(multiCommandApplication.Commands,
                              command => Assert.Equal("command1", command.Name));
        }
Пример #2
0
        public void Application_usage_is_loaded_correctly_for_multi_command_applications()
        {
            // ARRANGE
            using var assembly = Compile($@"
                using System;
                using CommandLine;
                using CommandLine.Text;

                [assembly: AssemblyUsage(""usage line 1"", ""usage line 2"")]

                [Verb(""command"")]
                public class MyOptionClass
                {{ }}
            ");

            var sut = new CommandLineParserLoader(m_Logger);

            // ACT
            var application = sut.Load(assembly);

            // ASSERT
            Assert.NotNull(application);
            Assert.NotNull(application.Usage);
            Assert.Collection(application.Usage,
                              line => Assert.Equal("usage line 1", line),
                              line => Assert.Equal("usage line 2", line));
        }
Пример #3
0
        public void Application_version_is_loaded_from_AssemblyInformationalVersionAttribute_if_it_exists()
        {
            // ARRANGE
            var informationalVersion = "some-version-string";
            var version = "1.2.3.0";

            using var assembly = Compile($@"
                using System;
                using System.Reflection;

                [assembly: AssemblyInformationalVersion(""{informationalVersion}"")]
                [assembly: AssemblyVersion(""{version}"")]

                public class MyOptionClass
                {{ }}
            ");

            var sut = new CommandLineParserLoader(m_Logger);

            // ACT
            var application = sut.Load(assembly);

            // ASSERT
            Assert.NotNull(application);
            Assert.Equal(informationalVersion, application.Version);
        }
Пример #4
0
        public void Application_name_is_loaded_from_AssemblyTitleAttribute_if_it_exists()
        {
            // ARRANGE
            var assemblyName  = "ApplicationName";
            var assemblyTitle = "AssemblyTitle";

            using var assembly = Compile($@"
                using System;
                using System.Reflection;

                [assembly: AssemblyTitleAttribute(""{assemblyTitle}"")]


                public class MyOptionClass
                {{ }}
            ",
                                         assemblyName: assemblyName);

            var sut = new CommandLineParserLoader(m_Logger);

            // ACT
            var application = sut.Load(assembly);

            // ASSERT
            Assert.NotNull(application);
            Assert.Equal(assemblyTitle, application.Name);
        }
Пример #5
0
        public void Option_classes_can_be_inner_classes(ApplicationType applicationType)
        {
            // ARRANGE
            using var assembly = Compile($@"
                using System;
                using CommandLine;

                public class OuterClass
                {{
                    {GetClassAttributes(applicationType)}
                    public class InnerClass
                    {{
                        [Option(""parameter1"")]
                        public string Option1 {{ get; set; }}
                    }}
                }}
            ");

            var sut = new CommandLineParserLoader(m_Logger);

            // ACT
            var application = sut.Load(assembly);

            // ASSERT
            Assert.NotNull(application);
            var parameterCollection = GetParameterCollection(application, applicationType);
            var parameter           = Assert.Single(parameterCollection.NamedParameters);

            Assert.Equal("parameter1", parameter.Name);
        }
Пример #6
0
        public void Load_returns_an_instance_of_SingleCommandApplication_when_assembly_only_has_a_single_options_class()
        {
            // ARRANGE
            using var assembly = Compile(@"
                using System;
                
                public class MyOptionClass
                { }
            ");

            var sut = new CommandLineParserLoader(m_Logger);

            // ACT
            var application = sut.Load(assembly);

            // ASSERT
            Assert.NotNull(application);
            Assert.IsType <SingleCommandApplicationDocumentation>(application);
        }
Пример #7
0
        public void Load_returns_an_instance_of_MultiCommandApplication_when_assembly_only_has_a_classes_with_a_Verb_attribute()
        {
            // ARRANGE
            using var assembly = Compile(@"
                using System;
                using CommandLine;

                [Verb(""myVerb"")]
                public class MyOptionClass
                { }
            ");

            var sut = new CommandLineParserLoader(m_Logger);

            // ACT
            var application = sut.Load(assembly);

            // ASSERT
            Assert.NotNull(application);
            Assert.IsType <MultiCommandApplicationDocumentation>(application);
        }
Пример #8
0
        public void Application_usage_is_null_if_assembly_does_not_have_a_AssemblyUsage_attribute()
        {
            // ARRANGE
            using var assembly = Compile($@"
                using System;
                using CommandLine;

                [Verb(""command"")]
                public class MyOptionClass
                {{ }}
            ");

            var sut = new CommandLineParserLoader(m_Logger);

            // ACT
            var application = sut.Load(assembly);

            // ASSERT
            Assert.NotNull(application);
            Assert.Null(application.Usage);
        }
Пример #9
0
        public void Application_name_is_the_assembly_name_if_no_AssemblyTitleAttribute_exists()
        {
            // ARRANGE
            var assemblyName = "ApplicationName";

            using var assembly = Compile(@"
                using System;
                
                public class MyOptionClass
                { }
            ",
                                         assemblyName: assemblyName);

            var sut = new CommandLineParserLoader(m_Logger);

            // ACT
            var application = sut.Load(assembly);

            // ASSERT
            Assert.NotNull(application);
            Assert.Equal(assemblyName, application.Name);
        }
Пример #10
0
        public void Commands_are_loaded_correctly()
        {
            // ARRANGE
            using var assembly = Compile(@"
                using System;
                using CommandLine;

                [Verb(""command1"")]
                public class Command1Options
                { }

                [Verb(""command2"", HelpText = ""Some help text"")]
                public class Command2Options
                { }
            ");

            var sut = new CommandLineParserLoader(m_Logger);

            // ACT
            var application = sut.Load(assembly);

            // ASSERT
            Assert.NotNull(application);
            var multiCommandApplication = Assert.IsType <MultiCommandApplicationDocumentation>(application);

            Assert.Collection(multiCommandApplication.Commands,
                              command =>
            {
                Assert.Equal("command1", command.Name);
                Assert.Null(command.Description);
            },
                              command =>
            {
                Assert.Equal("command2", command.Name);
                Assert.Equal("Some help text", command.Description);
            });
        }
Пример #11
0
        public void Named_parameters_are_loaded_correctly(ApplicationType applicationType)
        {
            // ARRANGE
            using var assembly = Compile($@"
                using System;
                using CommandLine;

                public enum SomeEnum
                {{
                    Value1,
                    Value2,
                    SomeOtherValue
                }}

                {GetClassAttributes(applicationType)}
                public class Command1Options
                {{

                    [Option(""option1"", HelpText = ""some help text"", Default = ""some default"")]
                    public string Option1Property {{ get; set; }}

                    [Option('x', Default = 23)]
                    public int Option2Property {{ get; set; }}

                    [Option('y', Default = true)]
                    public bool? Option3Property {{ get; set; }}

                    [Option(""option4"", Hidden = true)]
                    public string Option4Property {{ get; set; }}

                    [Option(""option5"", Required = true, MetaValue = ""PATH"")]
                    public string Option5Property {{ get; set; }}

                    [Option('z', ""option6"")]
                    public SomeEnum Option6Property {{ get; set; }}

                    [Option(""option7"", Default = SomeEnum.SomeOtherValue)]
                    public SomeEnum Option7Property {{ get; set; }}

                    [Option(""option8"", Default = true)]
                    public bool? Option8Property {{ get; set; }}

                }}
            ");

            // ACT
            var sut = new CommandLineParserLoader(m_Logger);

            // ACT
            var application = sut.Load(assembly);

            // ASSERT
            Assert.NotNull(application);
            var parameterCollection = GetParameterCollection(application, applicationType);

            Assert.Empty(parameterCollection.SwitchParameters);
            Assert.Empty(parameterCollection.PositionalParameters);
            Assert.Collection(parameterCollection.NamedParameters,
                              param =>
            {
                Assert.Equal("option1", param.Name);
                Assert.Null(param.ShortName);
                Assert.Equal("some help text", param.Description);
                Assert.False(param.Required);
                Assert.Equal("some default", param.DefaultValue);
                Assert.Null(param.AcceptedValues);
                Assert.Null(param.ValuePlaceHolderName);
            },
                              param =>
            {
                Assert.Equal("option5", param.Name);
                Assert.Null(param.ShortName);
                Assert.Null(param.Description);
                Assert.True(param.Required);
                Assert.Null(param.DefaultValue);
                Assert.Null(param.AcceptedValues);
                Assert.Equal("PATH", param.ValuePlaceHolderName);
            },
                              param =>
            {
                Assert.Equal("option6", param.Name);
                Assert.Equal("z", param.ShortName);
                Assert.Null(param.Description);
                Assert.False(param.Required);
                Assert.Null(param.DefaultValue);
                Assert.NotNull(param.AcceptedValues);
                Assert.Equal(3, param.AcceptedValues !.Count);
                Assert.Contains("Value1", param.AcceptedValues);
                Assert.Contains("Value2", param.AcceptedValues);
                Assert.Contains("SomeOtherValue", param.AcceptedValues);
                Assert.Null(param.ValuePlaceHolderName);
            },