Beispiel #1
0
        public void ParseOptions_NoArgs_ReturnsNull()
        {
            // Arrange
            var sut = new OptionParser();

            // Act
            var result = sut.ParseOptions(new string[] { });

            // Assert
            Assert.IsNull(result);
        }
Beispiel #2
0
        public void ParseOptions_WithMkdirArg_ReturnsMkdirSubOptions()
        {
            // Arrange
            var sut = new OptionParser();

            // Act
            var result = sut.ParseOptions(new string[] { "mkdir", "\\mydir" });

            // Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOf <MkdirSubOptions>(result);
            var mkdirSubOptions = result as MkdirSubOptions;

            Assert.AreEqual("\\mydir", mkdirSubOptions.DirectoryPath[0]);
        }
Beispiel #3
0
        public void ParseOptions_WithDeleteArg_ReturnsDeleteSubOptions()
        {
            // Arrange
            var sut = new OptionParser();

            // Act
            var result = sut.ParseOptions(new string[] { "rm", "test.txt" });

            // Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOf <DeleteSubOptions>(result);
            var deleteSubOptions = result as DeleteSubOptions;

            Assert.AreEqual("test.txt", deleteSubOptions.FilePath[0]);
        }
Beispiel #4
0
        public void ParseOptions_WithLsArg_ReturnsListingSubOptions()
        {
            // Arrange
            var sut = new OptionParser();

            // Act
            var result = sut.ParseOptions(new string[] { "ls", "\\mydir" });

            // Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOf <ListingSubOptions>(result);
            var listingSubOptions = result as ListingSubOptions;

            Assert.AreEqual("\\mydir", listingSubOptions.FilePath[0]);
        }
Beispiel #5
0
        public void ParseOptions_WithPutArg_ReturnsPutSubOptions()
        {
            // Arrange
            var sut = new OptionParser();

            // Act
            var result = sut.ParseOptions(new string[] { "put", "test.txt", "\\mydir" });

            // Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOf <PutSubOptions>(result);
            var putSubOptions = result as PutSubOptions;

            Assert.AreEqual("test.txt", putSubOptions.PutValues[0]);
            Assert.AreEqual("\\mydir", putSubOptions.PutValues[1]);
        }
Beispiel #6
0
        public static Configuration ParseConfiguration(string[] args)
        {
            var optionParser = new OptionParser(OptionDescriptorDefinitions.OptionDescriptors);
            var options      = optionParser.ParseOptions(args);

            var config = CreateConfiguration();

            string directory = null;

            Option opt;

            while (options.Count > 0)
            {
                opt = options[0];
                options.RemoveAt(0);

                if (OptionDescriptorDefinitions.PlaceHolderOptionDescriptor == opt.Descriptor)
                {
                    if (!string.IsNullOrEmpty(opt.Value))
                    {
                        config.PlaceHolderName = opt.Value;
                    }
                    else
                    {
                        throw new Exception(string.Format("No value provided for option: '{0}'", opt.Name));
                    }
                    continue;
                }

                if (OptionDescriptorDefinitions.TextOptionDescriptor == opt.Descriptor)
                {
                    if (!string.IsNullOrEmpty(opt.Value))
                    {
                        config.PlaceHolderTemplate = CreateTemplateEngine(opt.Value);
                    }
                    continue;
                }

                if (OptionDescriptorDefinitions.PlaceHolderFileOptionDescriptor == opt.Descriptor)
                {
                    if (!string.IsNullOrEmpty(opt.Value))
                    {
                        try
                        {
                            var filename = opt.Value;
                            var placeHolderTemplateText = File.ReadAllText(filename);
                            config.PlaceHolderTemplate = CreateTemplateEngine(placeHolderTemplateText);
                        }
                        catch (Exception ex)
                        {
                            Logger.Log(ex);
                        }
                    }
                    else
                    {
                        throw new Exception(string.Format("No value provided for option: '{0}'", opt.Name));
                    }
                    continue;
                }

                if (OptionDescriptorDefinitions.VariableSubstitutionOptionDescriptor == opt.Descriptor)
                {
                    if (!string.IsNullOrEmpty(opt.Value))
                    {
                        try
                        {
                            config.VariableSubstitution = Convert.ToBoolean(opt.Value);
                        }
                        catch
                        {
                            throw new Exception(string.Format("No boolean value provided for option: '{0}'", opt.Name));
                        }
                    }
                    else
                    {
                        throw new Exception(string.Format("No value provided for option: '{0}'", opt.Name));
                    }
                    continue;
                }

                if (OptionDescriptorDefinitions.FollowSymbolicLinksOptionDescriptor == opt.Descriptor)
                {
                    if (!string.IsNullOrEmpty(opt.Value))
                    {
                        try
                        {
                            config.FollowSymbolicLinks = Convert.ToBoolean(opt.Value);
                        }
                        catch
                        {
                            throw new Exception(string.Format("No boolean value provided for option: '{0}'", opt.Name));
                        }
                    }
                    else
                    {
                        throw new Exception(string.Format("No value provided for option: '{0}'", opt.Name));
                    }
                    continue;
                }

                if (OptionDescriptorDefinitions.VerboseOptionDescriptor == opt.Descriptor)
                {
                    config.Verbose = true;
                    continue;
                }

                if (OptionDescriptorDefinitions.ShortOptionDescriptor == opt.Descriptor)
                {
                    config.Short = true;
                    continue;
                }

                if (OptionDescriptorDefinitions.CleanOptionDescriptor == opt.Descriptor)
                {
                    config.CleanUp = true;
                    continue;
                }

                if (OptionDescriptorDefinitions.DryRunOptionDescriptor == opt.Descriptor)
                {
                    config.DryRun = true;
                    continue;
                }

                if (OptionDescriptorDefinitions.ExcludeOptionDescriptor == opt.Descriptor)
                {
                    var dirs    = null != opt.Value ? opt.Value.Split(Path.PathSeparator) : new string[0];
                    var dirList = new List <string>(dirs.Length);
                    dirList.AddRange(dirs);
                    config.Exclude = dirList;
                    continue;
                }

                if (OptionDescriptorDefinitions.HelpOptionDescriptor == opt.Descriptor)
                {
                    config.Help = true;
                    continue;
                }

                if (OptionDescriptorDefinitions.CreateHookOptionDescriptor == opt.Descriptor)
                {
                    if (!string.IsNullOrEmpty(opt.Value))
                    {
                        config.CreateHookTemplate = CreateTemplateEngine(opt.Value);
                    }
                    else
                    {
                        throw new Exception(string.Format("No value provided for option: '{0}'", opt.Name));
                    }
                    continue;
                }

                if (OptionDescriptorDefinitions.DeleteHookOptionDescriptor == opt.Descriptor)
                {
                    if (!string.IsNullOrEmpty(opt.Value))
                    {
                        config.DeleteHookTemplate = CreateTemplateEngine(opt.Value);
                    }
                    else
                    {
                        throw new Exception(string.Format("No value provided for option: '{0}'", opt.Name));
                    }
                    continue;
                }

                if (OptionDescriptorDefinitions.ListOptionDescriptor == opt.Descriptor)
                {
                    config.Short = config.DryRun = config.CleanUp = true;
                    continue;
                }
                if (OptionDescriptorDefinitions.PurgeOptionDescriptor == opt.Descriptor)
                {
                    config.Purge = true;
                    continue;
                }

//                if (OptionDescriptorDefinitions.SyncOptionDescriptor == opt.Descriptor)
//                {
//                    CleanUp = false;
//                    continue;
//                }

                // If we have a descriptor-less option assume it is the directory parameter.
                if (null == directory && OptionType.Short != opt.OptionType && null == opt.Descriptor)
                {
                    directory = opt.Value;
                    continue;
                }

                if (OptionType.NoOption == opt.OptionType)
                {
                    throw new Exception(string.Format("Unknown parameter: '{0}'", opt.Value));
                }

                throw new Exception(string.Format("Unknown option: '{0}' (value: '{1}')", opt.Name, opt.Value));
            }

            config.Directory = null != directory ? new DirectoryInfo(directory) : null;

            return(config);
        }