/// <summary> /// Initializes a new instance of the <see cref="SettingList"/> class. /// Provides access to the available settings that are stored in the available_settings.yaml file /// and to their alternative names stored in the setting_alternative_names.yaml file. /// </summary> /// <param name="resourceAssembly">The resource assembly.</param> /// <param name="availableSettingsFileName">Path to available settings file, relative to the resource assembly.</param> /// <param name="alternativeSettingsFileName">Path to alternative names file, relative to the resource assembly.</param> public SettingList(Assembly resourceAssembly, string availableSettingsFileName, string alternativeSettingsFileName) { if (string.IsNullOrEmpty(availableSettingsFileName)) { throw new ArgumentNullException(nameof(availableSettingsFileName)); } if (string.IsNullOrEmpty(alternativeSettingsFileName)) { throw new ArgumentNullException(nameof(alternativeSettingsFileName)); } using (StreamReader reader = new StreamReader(resourceAssembly.GetManifestResourceStream(availableSettingsFileName))) { var availableSettings = YamlParseUtil.ParseDocument <List <AvailableSetting> >(reader); BuildSettingSearchIndexes(availableSettings, availableSettingsFileName); } using (StreamReader reader = new StreamReader(resourceAssembly.GetManifestResourceStream(alternativeSettingsFileName))) { this.alternativeNameMap = YamlParseUtil.ParseDocument <Dictionary <string, SettingAlternativeNames> >(reader); if (this.alternativeNameMap.TryGetValue(DefaultAlternativeValueNamesKey, out SettingAlternativeNames settingAlternativeNames)) { this.defaultAlternativeValueNames = settingAlternativeNames.AlternativeValueNames; this.alternativeNameMap.Remove(DefaultAlternativeValueNamesKey); } } }
public static SettingAlternativeNames FromYaml(IParser parser) { YamlParseUtil.ConsumeMappingStart(parser); SettingAlternativeNames result = new SettingAlternativeNames(); while (!(parser.Current is MappingEnd)) { var key = YamlParseUtil.StringFromYaml(parser); switch (key) { case "alternativeNames": result.AlternativeNames = YamlParseUtil.ListFromYaml <string>(parser); break; case "alternativeValueNames": result.AlternativeValueNames = YamlParseUtil.DictionaryFromYaml <string, IList <string> >(parser); break; default: throw YamlParseUtil.UnknownKeyWhileParsing <SettingAlternativeNames>(parser, key); } } YamlParseUtil.ConsumeMappingEnd(parser); return(result); }
public void Test_ParseDocumentAsDictionaryWithNestedGenerics() { var defaultAlternativeNames = new SettingAlternativeNames { AlternativeValueNames = new Dictionary <string, IList <string> > { { "On", new List <string> { "enabled" } }, { "Off", new List <string> { "disabled" } }, }, }; var fooAlternativeNames = new SettingAlternativeNames { AlternativeNames = new List <string> { "fooing" }, }; var expectedAlternativeNameMap = new Dictionary <string, SettingAlternativeNames> { { "*DEFAULT*", defaultAlternativeNames }, { "Foo", fooAlternativeNames }, }; using (TextReader reader = GetTestResourceStream("test_setting_alternative_names.yaml")) { var alternativeNameMap = YamlParseUtil.ParseDocument <Dictionary <string, SettingAlternativeNames> >(reader); Assert.AreEqual(expectedAlternativeNameMap.Count, alternativeNameMap.Count); Assert.IsTrue(expectedAlternativeNameMap.All(pair => alternativeNameMap.Contains(pair))); } }
public static AvailableSettingAmount FromYaml(IParser parser) { YamlParseUtil.ConsumeMappingStart(parser); AvailableSettingAmount result = new AvailableSettingAmount(); while (!(parser.Current is MappingEnd)) { var key = YamlParseUtil.StringFromYaml(parser); switch (key) { case "unit": result.Unit = YamlParseUtil.StringFromYaml(parser); break; case "min": result.Min = YamlParseUtil.DoubleFromYaml(parser); break; case "max": result.Max = YamlParseUtil.DoubleFromYaml(parser); break; default: throw YamlParseUtil.UnknownKeyWhileParsing <AvailableSettingAmount>(parser, key); } } YamlParseUtil.ConsumeMappingEnd(parser); return(result); }
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); } }
public static AvailableSetting FromYaml(IParser parser) { YamlParseUtil.ConsumeMappingStart(parser); var result = new AvailableSetting(); while (!(parser.Current is MappingEnd)) { var key = YamlParseUtil.StringFromYaml(parser); switch (key) { case "canonicalName": result.CanonicalName = YamlParseUtil.StringFromYaml(parser); break; case "imageFileName": result.ImageFileName = YamlParseUtil.StringFromYaml(parser); break; case "values": result.Values = YamlParseUtil.ListFromYaml <AvailableSettingValue>(parser); break; case "allowsAmount": result.AllowsAmount = YamlParseUtil.BoolFromYaml(parser); break; case "amounts": result.Amounts = YamlParseUtil.ListFromYaml <AvailableSettingAmount>(parser); break; case "includedSettings": result.IncludedSettings = YamlParseUtil.ListFromYaml <string>(parser); break; default: throw YamlParseUtil.UnknownKeyWhileParsing <AvailableSetting>(parser, key); } } YamlParseUtil.ConsumeMappingEnd(parser); return(result); }
public static AvailableSettingValue FromYaml(IParser parser) { YamlParseUtil.ConsumeMappingStart(parser); var result = new AvailableSettingValue(); while (!(parser.Current is MappingEnd)) { var key = YamlParseUtil.StringFromYaml(parser); switch (key) { case "canonicalName": result.CanonicalName = YamlParseUtil.StringFromYaml(parser); break; case "requiresAmount": result.RequiresAmount = YamlParseUtil.BoolFromYaml(parser); break; case "requiresConfirmation": result.RequiresConfirmation = YamlParseUtil.BoolFromYaml(parser); break; case "antonym": result.Antonym = YamlParseUtil.StringFromYaml(parser); break; case "changesSignOfAmount": result.ChangesSignOfAmount = YamlParseUtil.BoolFromYaml(parser); break; default: throw YamlParseUtil.UnknownKeyWhileParsing <AvailableSettingValue>(parser, key); } } YamlParseUtil.ConsumeMappingEnd(parser); return(result); }
public void Test_ParseDocumentAsList() { var foo = new AvailableSetting { CanonicalName = "Foo", Values = new List <AvailableSettingValue> { new AvailableSettingValue { CanonicalName = "Set", RequiresAmount = true, }, new AvailableSettingValue { CanonicalName = "Decrease", ChangesSignOfAmount = true, }, new AvailableSettingValue { CanonicalName = "Increase", Antonym = "Decrease", }, }, AllowsAmount = true, Amounts = new List <AvailableSettingAmount> { new AvailableSettingAmount { Unit = "bar", Min = 14, Max = 32, }, new AvailableSettingAmount { Unit = string.Empty, Min = -5, }, }, IncludedSettings = new List <string> { "Front Foo", "Rear Foo", }, }; var qux = new AvailableSetting { CanonicalName = "Qux", Values = new List <AvailableSettingValue> { new AvailableSettingValue { CanonicalName = "Off", RequiresConfirmation = true, }, new AvailableSettingValue { CanonicalName = "On", }, }, }; var expectedAvailableSettings = new List <AvailableSetting> { foo, qux, }; using (TextReader reader = GetTestResourceStream("test_available_settings.yaml")) { var availableSettings = YamlParseUtil.ParseDocument <List <AvailableSetting> >(reader); CollectionAssert.AreEqual(expectedAvailableSettings, availableSettings); } }