public void Test_ParseDocumentAsNonGeneric() { var yaml = "unit: bar"; var expectedAmount = new AvailableSettingAmount { Unit = "bar", }; using (TextReader reader = new StringReader(yaml)) { var amount = YamlParseUtil.ParseDocument <AvailableSettingAmount>(reader); Assert.AreEqual(expectedAmount, amount); } }
/// <summary> /// Validate a change. /// </summary> /// <param name="setting">A setting for validation.</param> /// <returns>Validation Status enumeration.</returns> private ValidationStatus ValidateChange(SettingChange setting) { if (setting == null) { throw new ArgumentNullException(nameof(setting)); } ValidationStatus validity = ValidationStatus.Valid; if (string.IsNullOrEmpty(setting.SettingName)) { return(ValidationStatus.InvalidMissingSetting); } if (string.IsNullOrEmpty(setting.Value) && setting.Amount == null) { return(ValidationStatus.InvalidMissingValue); } var settingInfo = settingList.FindSetting(setting.SettingName); if (settingInfo == null) { return(ValidationStatus.InvalidSettingName); } AvailableSettingValue settingValueInfo = null; foreach (var valueInfo in settingInfo.Values) { if (Util.NullSafeEquals(setting.Value, valueInfo.CanonicalName) || (string.IsNullOrEmpty(setting.Value) && "SET".Equals(valueInfo.CanonicalName.ToUpperInvariant()))) { settingValueInfo = valueInfo; setting.Value = valueInfo.CanonicalName; break; } } if (settingValueInfo == null) { return(ValidationStatus.InvalidSettingValueCombination); } if (setting.Amount == null) { if (settingValueInfo.RequiresAmount) { validity = ValidationStatus.InvalidMissingAmount; } return(validity); } if (!settingInfo.AllowsAmount || Util.IsNullOrEmpty(settingInfo.Amounts)) { return(ValidationStatus.InvalidExtraAmount); } AvailableSettingAmount settingAmountInfo = null; foreach (var amountInfo in settingInfo.Amounts) { if (Util.NullSafeEquals(setting.Amount.Unit, amountInfo.Unit)) { settingAmountInfo = amountInfo; break; } } if (settingAmountInfo == null) { if ("%".Equals(setting.Amount.Unit)) { settingAmountInfo = new AvailableSettingAmount() { Unit = "%", Min = 0, Max = 100, }; } else { return(ValidationStatus.InvalidAmountUnit); } } if (!setting.IsRelativeAmount) { if (setting.Amount.Amount < settingAmountInfo.Min || setting.Amount.Amount > settingAmountInfo.Max) { return(ValidationStatus.InvalidAmountOutOfRange); } } else if (settingAmountInfo.Min != null && settingAmountInfo.Max != null) { var maxRelative = settingAmountInfo.Max - settingAmountInfo.Min; var minRelative = -maxRelative; if (setting.Amount.Amount < minRelative || setting.Amount.Amount > maxRelative) { return(ValidationStatus.InvalidAmountOutOfRange); } } return(validity); }