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); } }
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); }
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)); }