Exemple #1
0
        public void TestJsonDeserializeFiles(string root, string[] files, bool success)
        {
            var options = new JsonSerializerOptions();

            options.Converters.Add(new JsonElementInferredTypeConverter());
            options.Converters.Add(new SettingHandlerDescription.JsonConverter());

            var json = JsonSerializer.Serialize(new Dictionary <string, object>()
            {
                { "type", "com.microsoft.windows.files" },
                { "root", root },
                { "files", files }
            });
            var handler = JsonSerializer.Deserialize <SettingHandlerDescription>(json, options);

            Assert.NotNull(handler);
            if (success)
            {
                Assert.Equal(SettingHandlerDescription.HandlerKind.Files, handler.Kind);
                Assert.IsType <FilesSettingHandlerDescription>(handler);
                FilesSettingHandlerDescription filesHandler = (FilesSettingHandlerDescription)handler;
                Assert.Equal(root, filesHandler.Root);
                Assert.Equal(files.Length, filesHandler.Files.Length);
                for (var i = 0; i < files.Length; ++i)
                {
                    Assert.Equal(files[i], filesHandler.Files[i]);
                }
            }
            else
            {
                Assert.Equal(SettingHandlerDescription.HandlerKind.Unknown, handler.Kind);
            }
        }
Exemple #2
0
        public void TestEqualityOperatorFiles()
        {
            var handler  = new FilesSettingHandlerDescription(@"$(APPDATA)\App\Config", new string[] { @"test.*", @"settings\*.ini" });
            var handler2 = new FilesSettingHandlerDescription(@"$(APPDATA)\App\Config", new string[] { @"test.*", @"settings\*.ini" });

            Assert.Equal(handler, handler2);
            handler2 = new FilesSettingHandlerDescription(@"$(APPDATA)\App", new string[] { @"test.*", @"settings\*.ini" });
            Assert.NotEqual(handler, handler2);
            handler2 = new FilesSettingHandlerDescription(@"$(APPDATA)\App\Config", new string[] { @"settings\*.ini" });
            Assert.NotEqual(handler, handler2);
            handler2 = new FilesSettingHandlerDescription(@"$(APPDATA)\App\Config", new string[] { @"settings\*.ini", @"test.*" });
            Assert.Equal(handler, handler2);
        }
Exemple #3
0
            public override SettingHandlerDescription Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
            {
                try
                {
                    var document = JsonDocument.ParseValue(ref reader);
                    var element  = document.RootElement;
                    var type     = element.GetProperty("type").GetString();
                    switch (type)
                    {
                    case "org.raisingthefloor.morphic.client":
                    {
                        var solution   = element.GetProperty("solution").GetString();
                        var preference = element.GetProperty("preference").GetString();
                        var key        = new Preferences.Key(solution, preference);
                        return(new ClientSettingHandlerDescription(key));
                    }

                    case "com.microsoft.windows.registry":
                    {
                        var keyName   = element.GetProperty("key_name").GetString();
                        var valueName = element.GetProperty("value_name").GetString();
                        var valueType = element.GetProperty("value_type").GetString();
                        var valueKind = Enum.Parse <RegistryValueKind>(valueType, ignoreCase: true);
                        return(new RegistrySettingHandlerDescription(keyName, valueName, valueKind));
                    }

                    case "com.microsoft.windows.ini":
                    {
                        var filename = element.GetProperty("filename").GetString();
                        var section  = element.GetProperty("section").GetString();
                        var key      = element.GetProperty("key").GetString();
                        return(new IniSettingHandlerDescription(filename, section, key));
                    }

                    case "com.microsoft.windows.system":
                    {
                        var settingId = element.GetProperty("setting_id").GetString();
                        var valueType = element.GetProperty("value_type").GetString();
                        var valueKind = Enum.Parse <SystemValueKind>(valueType, ignoreCase: true);
                        var handler   = new SystemSettingHandlerDescription(settingId, valueKind);
                        try
                        {
                            var  enumerator = element.GetProperty("integer_map").EnumerateArray();
                            var  list       = new List <string>();
                            var  reverse    = new Dictionary <string, long>();
                            long i          = 0;
                            foreach (var child in enumerator)
                            {
                                var str = child.GetString();
                                list.Add(str);
                                reverse.Add(str, i);
                                ++i;
                            }
                            handler.IntegerMap        = list.ToArray();
                            handler.ReverseIntegerMap = reverse;
                        }
                        catch
                        {
                        }
                        return(handler);
                    }

                    case "com.microsoft.windows.files":
                    {
                        var root    = element.GetProperty("root").GetString();
                        var files   = element.GetProperty("files").EnumerateArray().Select(element => element.GetString()).ToArray();
                        var handler = new FilesSettingHandlerDescription(root, files);
                        return(handler);
                    }
                    }
                }
                catch
                {
                }
                return(new SettingHandlerDescription(HandlerKind.Unknown));
            }