Пример #1
0
        public CommandResponse StoreValidOptions()
        {
            if (_args.Length == 0)
            {
                return CommandResponse.Set(false, "Please enter valid arguments.");
            }

            for (var a = 0; a < _args.Length; a++)
            {
                //Only interested in option names.
                //If not a valid option name then the command is probably incorrect
                if (!IsEven(a))
                {
                    continue;
                }

                var arg = _args[a];
                if (!string.IsNullOrWhiteSpace(arg))
                {
                    var option = _args.ElementAt(a).Replace("-", "").ToLowerInvariant();
                    var optionValueKey = a + 1;

                    //Check if is valid option
                    var validOption = ValidOptions.FirstOrDefault(k => k.Key.Equals(option) || k.Key.First().ToString() == option);
                    
                    if (validOption.Key == null)
                    {
                        return CommandResponse.Set(false, $"The OPTION {option} is unknown.");
                    }

                    //Checks to see if last OPTION has a value
                    //Apart from -v & -h all other options should have a value
                    if (optionValueKey > _args.Length - 1)
                    {
                        return CommandResponse.Set(false, $"The OPTION {option} has not been supplied with a value.");
                    }

                    var optionValue = _args.ElementAt(optionValueKey);

                    if (!string.IsNullOrEmpty(optionValue) && !SensitiveOptions.Contains(validOption.Key))
                    {
                        optionValue = optionValue.ToLowerInvariant();
                    }

                    //If the OPTION has set values, check the incoming against this list
                    if (validOption.Key != "parameters" && validOption.Key != "setheaders" && validOption.Value.Any() && optionValue != null && !validOption.Value.Contains(optionValue))
                    {
                        return CommandResponse.Set(false, $"The OPTION {option} value is invalid.");
                    }

                    //Store the Option values
                    //Doing this here because we already have the key/values parsed
                    StoreOptionValue(validOption.Key, optionValue);
                }
            }

            return CommandResponse.Set(true, "Command Validated.");
        }
        override public bool IsValid(string data)
        {
            var rVal       = false;
            var comparison = (this.CaseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase);
            var enumer     = ValidOptions.GetEnumerator();

            while (rVal == false && enumer.MoveNext())
            {
                if (enumer.Current.Equals(data, comparison))
                {
                    rVal = true;
                }
            }

            return(rVal);
        }
Пример #3
0
        private ValidOption GetLongOption(string longOpt)
        {
            switch (ValidOptions.Count(v => v.LongOption.StartsWith(longOpt)))
            {
            case 0:
                throw new InvalidOptionException(string.Format("{0} is not a valid option", longOpt));

            case 1:
                return(ValidOptions.FirstOrDefault(v => v.LongOption.StartsWith(longOpt)));

            default:
                string message = string.Format("{0} could be interpreted as {1}", longOpt,
                                               string.Join(" or ", (from v in ValidOptions
                                                                    where v.LongOption.StartsWith(longOpt)
                                                                    select v.LongOption).ToList()));
                throw new AmbiguousOptionException(message);
            }
        }
Пример #4
0
        private IDictionary<string, string> GetOptionDictionay(string key, string value)
        {
            var paramsList = value?.Split(",") ?? new string[0];

            var parameters = new Dictionary<string, string>();

            for (var p = 0; p < paramsList.Length; p++)
            {
                var keyValParam = paramsList.ElementAt(p).Split("|");

                var validOptions = ValidOptions.FirstOrDefault(k => k.Key.Equals(key));

                if (keyValParam.Length == 2 && validOptions.Value.Contains(keyValParam.ElementAt(0)))
                {
                    parameters.Add(keyValParam.ElementAt(0), keyValParam.ElementAt(1));
                }
            }

            return parameters;
        }
Пример #5
0
        public void ValidTests(ValidTypes type, ValidUsers user, ValidDepts dept, ValidDates start, ValidDates end, ValidOptions option)
        {
            var request = CreateGetRequest(TypeMapper[type], null, null);

            GenerateParamValues(TypeToResource[type], user, dept, start, end, option, request);
            TestPerform(request);
        }
Пример #6
0
        private void GenerateParamValues(ResourceType resourceType, ValidUsers user, ValidDepts dept, ValidDates start, ValidDates end, ValidOptions option, Dictionary <string, string> request)
        {
            var startDate = UnixDateMapper[start];
            var endDate   = UnixDateMapper[end];
            var opt       = user == ValidUsers.Admin ? AdminUserTestRecords.Data : NormalUserTestRecords.Data;
            var userType  = new Dictionary <ValidUsers, string>()
            {
                [ValidUsers.Admin]      = UserAdmin.ToString(),
                [ValidUsers.Normal]     = UserNormal.ToString(),
                [ValidUsers.ArrayUsers] = $"[{UserAdmin},{UserNormal}]"
            };
            var deptType = new Dictionary <ValidDepts, string>()
            {
                [ValidDepts.ExistedDept] = DefaultDeparment.ToString(),
                [ValidDepts.ArrayDepts]  = $"[{DefaultDeparment}, {NoneExistDepartment}]"
            };
            var optType = new Dictionary <ValidOptions, string>()
            {
                [ValidOptions.ExistedOption] = Options.Data[$"{resourceType}1"].Id.ToString(),
                [ValidOptions.ArrayOptions]  = $"[{Options.Data[$"{resourceType}1"].Id},{Options.Data[$"{resourceType}1"].Id}]"
            };

            request[ParamMapper[Params.Start]] = startDate.ToString();
            request[ParamMapper[Params.End]]   = endDate.ToString();
            if (user != ValidUsers.Missing)
            {
                request[ParamMapper[Params.User]] = userType[user];
            }
            if (dept != ValidDepts.Missing)
            {
                request[ParamMapper[Params.Dept]] = deptType[dept];
            }
            if (option != ValidOptions.Missing)
            {
                request[ParamMapper[Params.Option]] = optType[option];
            }
        }
Пример #7
0
 /// <summary>Validates the specified value.</summary>
 /// <param name="value">The value to validate.</param>
 /// <returns>
 /// <c>true</c> if <paramref name="value"/> is valid; otherwise <c>false</c> .
 /// </returns>
 protected internal override bool Validate(object value)
 {
     return(ValidOptions.Contains(value as string));
 }
Пример #8
0
        public void Parse(IEnumerable <string> argv)
        {
            Options   = new List <Option>();
            Arguments = new List <string>();
            bool needOptArg   = false;
            bool stopScanning = false;

            foreach (string argument in argv)
            {
                if (stopScanning)
                {
                    Arguments.Add(argument);
                    continue;
                }
                if (!argument.StartsWith("-"))
                {
                    if (!needOptArg)
                    {
                        Arguments.Add(argument);
                        continue;
                    }
                    Options[Options.Count - 1].Argument = argument;
                    needOptArg = false;
                    continue;
                }
                if (argument == "--")
                {
                    stopScanning = true;
                    continue;
                }
                if (argument.StartsWith("--"))
                {
                    string[]    parts       = argument.Split('=', ':');
                    string      longOpt     = parts[0].Substring(2);
                    ValidOption validOption = GetLongOption(longOpt);
                    Options.Add(new Option {
                        Flag = validOption.Flag
                    });
                    if (validOption.OptionType != OptionType.None)
                    {
                        if (parts.Length > 1)
                        {
                            Options[Options.Count - 1].Argument = parts[1];
                        }
                        else
                        {
                            needOptArg = true;
                        }
                    }
                    continue;
                }
                foreach (char flag in argument.Where(c => c != '-'))
                {
                    if (ValidOptions.Count(v => v.Flag == flag) == 0)
                    {
                        throw new InvalidOptionException(string.Format("{0} is not a valid option.", flag));
                    }
                    Options.Add(new Option {
                        Flag = flag
                    });
                }
                needOptArg = ValidOptions.Last(m => m.Flag == Options[Options.Count - 1].Flag).OptionType !=
                             OptionType.None;
            }
        }