public void TestJsonDeserializeSystem(string settingId, string valueType, SystemValueKind valueKind, 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.system" }, { "setting_id", settingId }, { "value_type", valueType } }); var handler = JsonSerializer.Deserialize <SettingHandlerDescription>(json, options); Assert.NotNull(handler); if (success) { Assert.Equal(SettingHandlerDescription.HandlerKind.System, handler.Kind); Assert.IsType <SystemSettingHandlerDescription>(handler); SystemSettingHandlerDescription system = (SystemSettingHandlerDescription)handler; Assert.Equal(settingId, system.SettingId); Assert.Equal(valueKind, system.ValueKind); } else { Assert.Equal(SettingHandlerDescription.HandlerKind.Unknown, handler.Kind); } }
public async Task TestApplyFail(SystemValueKind valueKind, object value) { var services = new ServiceCollection(); services.AddLogging(); services.AddSingleton <IServiceProvider>(provider => provider); services.AddSingleton <ISystemSettingFactory, MockSystemSettingFactory>(); var mockFactory = new MockSystemSettingFactory(); var serviceProvider = services.BuildServiceProvider(); var loggerFactory = new LoggerFactory(); var logger = loggerFactory.CreateLogger <SystemSettingHandler>(); createCount = 0; getCount = 0; setCount = 0; var setting = new Setting() { Name = "test", HandlerDescription = new SystemSettingHandlerDescription("thesetting", valueKind) }; var handler = new SystemSettingHandler(setting, mockFactory, serviceProvider, logger); MockSystemSetting.nextSetResponder = (object nvalue) => { Assert.Equal(value, nvalue); }; var pass = await handler.Apply(value); Assert.Equal(1, createCount); Assert.Equal(0, getCount); Assert.Equal(0, setCount); Assert.False(pass); }
public bool TryConvertToSystem(object?value, SystemValueKind systemValueKind, out object?systemValue) { if (value is string stringValue) { switch (systemValueKind) { case SystemValueKind.String: systemValue = stringValue; return(true); } systemValue = null; return(false); } if (value is bool boolValue) { switch (systemValueKind) { case SystemValueKind.Boolean: systemValue = boolValue; return(true); } systemValue = null; return(false); } if (value is long longValue) { switch (systemValueKind) { case SystemValueKind.Integer: systemValue = (UInt32)longValue; return(true); case SystemValueKind.IdPrefixedEnum: systemValue = String.Format("{0}{1}", Description.SettingId, longValue); return(true); case SystemValueKind.String: if (Description.IntegerMap is string[] map) { if (longValue >= 0 && longValue < map.Length) { systemValue = map[longValue]; return(true); } } systemValue = null; return(false); } systemValue = null; return(false); } systemValue = null; return(false); }
public async Task TestCapturePass(Setting.ValueKind kind, SystemValueKind valueKind, object systemValue, object value) { var services = new ServiceCollection(); services.AddLogging(); services.AddSingleton <IServiceProvider>(provider => provider); services.AddSingleton <ISystemSettingFactory, MockSystemSettingFactory>(); var mockFactory = new MockSystemSettingFactory(); var serviceProvider = services.BuildServiceProvider(); var loggerFactory = new LoggerFactory(); var logger = loggerFactory.CreateLogger <SystemSettingHandler>(); createCount = 0; getCount = 0; setCount = 0; var handlerDescription = new SystemSettingHandlerDescription("thesetting", valueKind); handlerDescription.IntegerMap = new string[3] { "zero", "one", "two" }; handlerDescription.ReverseIntegerMap = new Dictionary <string, long> { { "zero", 0L }, { "one", 1L }, { "two", 2L } }; var setting = new Setting() { Name = "test", Kind = kind, HandlerDescription = handlerDescription }; var handler = new SystemSettingHandler(setting, mockFactory, serviceProvider, logger); MockSystemSetting.nextGetResponder = () => { return(systemValue); }; var result = await handler.Capture(); Assert.Equal(1, createCount); Assert.Equal(1, getCount); Assert.Equal(0, setCount); Assert.True(result.Success); Assert.NotNull(result.Value); Assert.Equal(value, result.Value); }
public async Task TestCaptureFail(Setting.ValueKind kind, SystemValueKind valueKind, object value) { var services = new ServiceCollection(); services.AddLogging(); services.AddSingleton <IServiceProvider>(provider => provider); services.AddSingleton <ISystemSettingFactory, MockSystemSettingFactory>(); var mockFactory = new MockSystemSettingFactory(); var serviceProvider = services.BuildServiceProvider(); var loggerFactory = new LoggerFactory(); var logger = loggerFactory.CreateLogger <SystemSettingHandler>(); createCount = 0; getCount = 0; setCount = 0; var setting = new Setting() { Name = "test", Kind = kind, HandlerDescription = new SystemSettingHandlerDescription("thesetting", valueKind) }; var handler = new SystemSettingHandler(setting, mockFactory, serviceProvider, logger); MockSystemSetting.nextGetResponder = () => { return(value); }; var result = await handler.Capture(); Assert.Equal(1, createCount); Assert.Equal(1, getCount); Assert.Equal(0, setCount); Assert.False(result.Success); Assert.Null(result.Value); }
/// <summary> /// Create a new ini file handler /// </summary> /// <param name="settingId"></param> public SystemSettingHandlerDescription(string settingId, SystemValueKind valueKind) : base(HandlerKind.System) { SettingId = settingId; ValueKind = valueKind; }