Example #1
0
        /// <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);
                }
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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)));
            }
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #7
0
        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);
        }
Example #8
0
        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);
            }
        }