public void ParseOptions_NoArgs_ReturnsNull() { // Arrange var sut = new OptionParser(); // Act var result = sut.ParseOptions(new string[] { }); // Assert Assert.IsNull(result); }
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]); }
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]); }
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]); }
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]); }
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); }