public static void ValidateSetting(SettingValidation validation, IEnumerable <LobbySetting> lobbySettings, JToken jobjectSettingContainer, params string[] additional)
        {
            // Iterate through all input lobby settings.
            foreach (JProperty lobbySetting in jobjectSettingContainer.Children <JProperty>())
            {
                if (additional != null && additional.Contains(lobbySetting.Name))
                {
                    continue;
                }

                // Get the related setting.
                LobbySetting relatedSetting = lobbySettings.FirstOrDefault(ls => ls.Name == lobbySetting.Name);

                // relatedSetting will be null if there are no settings with the name.
                if (relatedSetting == null)
                {
                    validation.InvalidSetting(lobbySetting.Name);
                }
                // Validate the input value.
                else
                {
                    relatedSetting.CheckValue(validation, lobbySetting.Value);
                }
            }
        }
 public override void CheckValue(SettingValidation validation, JToken value)
 {
     if (value.ToObject <object>() is bool == false)
     {
         validation.IncorrectType(Name, "boolean");
     }
 }
        public static bool Validate(JObject jobject, FileDiagnostics diagnostics, DocRange range)
        {
            SettingValidation validation = new SettingValidation();

            // Check for invalid properties.
            foreach (JProperty setting in jobject.Properties())
            {
                if (!new string[] { "Lobby", "Modes", "Heroes" }.Contains(setting.Name))
                {
                    validation.InvalidSetting(setting.Name);
                }
            }

            // Check lobby settings.
            if (jobject.TryGetValue("Lobby", out JToken lobbySettings))
            {
                ValidateSetting(validation, LobbySettings, lobbySettings);
            }

            // Check modes.
            if (jobject.TryGetValue("Modes", out JToken modes))
            {
                ModeSettingCollection.Validate(validation, (JObject)modes);
            }

            // Check heroes.
            if (jobject.TryGetValue("Heroes", out JToken heroes))
            {
                HeroesRoot.Validate(validation, (JObject)heroes);
            }

            validation.Dump(diagnostics, range);
            return(!validation.HasErrors());
        }
示例#4
0
 public static void Validate(SettingValidation validation, JObject modes)
 {
     foreach (var modeCollection in AllModeSettings)
     {
         if (modes.TryGetValue(modeCollection.ModeName, out JToken modeSettingsToken))
         {
             Ruleset.ValidateSetting(validation, modeCollection, modeSettingsToken, "Enabled Maps", "Disabled Maps");
         }
     }
 }
 public static void Validate(SettingValidation validation, JObject heroRoot)
 {
     if (heroRoot.TryGetValue("General", out JToken generalToken))
     {
         HeroSettingCollection.Validate(validation, (JObject)generalToken);
     }
     if (heroRoot.TryGetValue("Team 1", out JToken team1Token))
     {
         HeroSettingCollection.Validate(validation, (JObject)team1Token);
     }
     if (heroRoot.TryGetValue("Team 2", out JToken team2Token))
     {
         HeroSettingCollection.Validate(validation, (JObject)team2Token);
     }
 }
 public override void CheckValue(SettingValidation validation, JToken value)
 {
     try
     {
         string str = value.ToObject <string>();
         if (!Values.Contains(str))
         {
             validation.Error($"Expected one of the following values for property '{Name}': {string.Join(", ", Values.Select(v => "'" + v + "'"))}", false);
         }
     }
     catch
     {
         validation.IncorrectType(Name, "string");
     }
 }
 public override void CheckValue(SettingValidation validation, JToken value)
 {
     try
     {
         double number = value.ToObject <double>();
         if (number < Min)
         {
             validation.Error($"The property '{Name}' requires a number above {Min}, got {number}.", false);
         }
         if (number > Max)
         {
             validation.Error($"The property '{Name}' requires a number below {Max}, got {number}.", false);
         }
     }
     catch
     {
         validation.IncorrectType(Name, "number");
     }
 }
示例#8
0
        public static void Validate(SettingValidation validation, JObject heroes)
        {
            foreach (JProperty property in heroes.Properties())
            {
                if (property.Name == "Enabled Heroes" || property.Name == "Disabled Heroes")
                {
                    continue;
                }
                HeroSettingCollection relatedHeroCollection = AllHeroSettings.FirstOrDefault(hs => hs.HeroName == property.Name);

                if (relatedHeroCollection == null)
                {
                    validation.InvalidSetting(property.Name);
                }
                else
                {
                    Ruleset.ValidateSetting(validation, relatedHeroCollection, property.Value);
                }
            }
        }
        public static bool Validate(JObject jobject, FileDiagnostics diagnostics, DocRange range)
        {
            SettingValidation validation = new SettingValidation();

            // Check for invalid properties.
            foreach (JProperty setting in jobject.Properties())
            {
                if (!new string[] { "Lobby", "Modes", "Heroes", "Description", "Workshop", "Extensions", "Mode Name" }.Contains(setting.Name))
                {
                    validation.InvalidSetting(setting.Name);
                }
            }

            // Check lobby settings.
            if (jobject.TryGetValue("Lobby", out JToken lobbySettings))
            {
                ValidateSetting(validation, LobbySettings, lobbySettings);
            }

            // Check modes.
            if (jobject.TryGetValue("Modes", out JToken modes))
            {
                ModeSettingCollection.Validate(validation, (JObject)modes);
            }

            // Check heroes.
            if (jobject.TryGetValue("Heroes", out JToken heroes))
            {
                HeroesRoot.Validate(validation, (JObject)heroes);
            }

            // Check description.
            if (jobject.TryGetValue("Description", out JToken description) && description.Type != JTokenType.String)
            {
                validation.IncorrectType("Description", "string");
            }

            // Check mode name.
            if (jobject.TryGetValue("Mode Name", out JToken modeName) && modeName.Type != JTokenType.String)
            {
                validation.IncorrectType("Mode Name", "string");
            }

            // Check extensions.
            if (jobject.TryGetValue("Extensions", out JToken extensionsToken)
                // Make sure the extension group's value is an object.
                && validation.TryGetObject("Extensions", extensionsToken, out var extensions))
            {
                // Check each extension.
                foreach (var prop in extensions)
                {
                    // The extension name does not exist.
                    if (!ExtensionInfo.Extensions.Any(e => e.Name == prop.Key))
                    {
                        validation.Error($"The extension '{prop.Key}' does not exist.");
                    }
                    // The extension value is not a boolean.
                    else if (prop.Value.Type != JTokenType.Boolean)
                    {
                        validation.Error($"The value of the extension '{prop.Key}' must be a boolean.");
                    }
                }
            }

            validation.Dump(diagnostics, range);
            return(!validation.HasErrors());
        }
 /// <summary>Validates the json value.</summary>
 public abstract void CheckValue(SettingValidation validation, JToken value);