mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-06-07 09:28:03 +08:00
PowerLauncherSettings unit tests (#2276)
This commit is contained in:
parent
ca7b6f139f
commit
7ec8d02c1f
@ -2,10 +2,14 @@
|
||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System.Text.Json;
|
||||
|
||||
namespace Microsoft.PowerToys.Settings.UI.Lib
|
||||
{
|
||||
public class PowerLauncherSettings : BasePTModuleSettings
|
||||
{
|
||||
public const string POWERTOYNAME = "PowerLauncher";
|
||||
|
||||
public PowerLauncherProperties properties { get; set; }
|
||||
|
||||
public PowerLauncherSettings()
|
||||
@ -14,5 +18,16 @@ namespace Microsoft.PowerToys.Settings.UI.Lib
|
||||
version = "1";
|
||||
name = "_unset_";
|
||||
}
|
||||
|
||||
public virtual void Save()
|
||||
{
|
||||
// Save settings to file
|
||||
var options = new JsonSerializerOptions
|
||||
{
|
||||
WriteIndented = true,
|
||||
};
|
||||
|
||||
SettingsUtils.SaveSettings(JsonSerializer.Serialize(this, options), POWERTOYNAME);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -12,19 +12,36 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
|
||||
{
|
||||
public class PowerLauncherViewModel : Observable
|
||||
{
|
||||
private const string POWERTOYNAME = "PowerLauncher";
|
||||
private PowerLauncherSettings settings;
|
||||
|
||||
public delegate void SendCallback(PowerLauncherSettings settings);
|
||||
|
||||
private readonly SendCallback callback;
|
||||
|
||||
public PowerLauncherViewModel()
|
||||
{
|
||||
if (SettingsUtils.SettingsExists(POWERTOYNAME))
|
||||
if (SettingsUtils.SettingsExists(PowerLauncherSettings.POWERTOYNAME))
|
||||
{
|
||||
settings = SettingsUtils.GetSettings<PowerLauncherSettings>(POWERTOYNAME);
|
||||
settings = SettingsUtils.GetSettings<PowerLauncherSettings>(PowerLauncherSettings.POWERTOYNAME);
|
||||
}
|
||||
else
|
||||
{
|
||||
settings = new PowerLauncherSettings();
|
||||
}
|
||||
|
||||
callback = (PowerLauncherSettings settings) =>
|
||||
{
|
||||
// Propagate changes to Power Launcher through IPC
|
||||
var propertiesJson = JsonSerializer.Serialize(settings.properties);
|
||||
ShellPage.DefaultSndMSGCallback(
|
||||
string.Format("{{ \"{0}\": {1} }}", PowerLauncherSettings.POWERTOYNAME, JsonSerializer.Serialize(settings.properties)));
|
||||
};
|
||||
}
|
||||
|
||||
public PowerLauncherViewModel(PowerLauncherSettings settings, SendCallback callback)
|
||||
{
|
||||
this.settings = settings;
|
||||
this.callback = callback;
|
||||
}
|
||||
|
||||
private void UpdateSettings([CallerMemberName] string propertyName = null)
|
||||
@ -32,17 +49,8 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
|
||||
// Notify UI of property change
|
||||
OnPropertyChanged(propertyName);
|
||||
|
||||
// Save settings to file
|
||||
var options = new JsonSerializerOptions
|
||||
{
|
||||
WriteIndented = true,
|
||||
};
|
||||
SettingsUtils.SaveSettings(JsonSerializer.Serialize(settings, options), POWERTOYNAME);
|
||||
|
||||
// Propagate changes to Power Launcher through IPC
|
||||
var propertiesJson = JsonSerializer.Serialize(settings.properties);
|
||||
ShellPage.DefaultSndMSGCallback(
|
||||
string.Format("{{ \"{0}\": {1} }}", POWERTOYNAME, JsonSerializer.Serialize(settings.properties)));
|
||||
settings.Save();
|
||||
callback(settings);
|
||||
}
|
||||
|
||||
public bool EnablePowerLauncher
|
||||
|
@ -126,6 +126,7 @@
|
||||
<Compile Include="UnitTestApp.xaml.cs">
|
||||
<DependentUpon>UnitTestApp.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="ViewModelTests\PowerLauncherViewModelTest.cs" />
|
||||
<Compile Include="ViewModelTests\ShortcutGuideViewModelTest.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
@ -0,0 +1,159 @@
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using Microsoft.PowerToys.Settings.UI.ViewModels;
|
||||
using Microsoft.PowerToys.Settings.UI.Lib;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace Microsoft.PowerToys.Settings.UnitTest.ViewModelTests
|
||||
{
|
||||
[TestClass]
|
||||
public class PowerLauncherViewModelTest
|
||||
{
|
||||
class PowerLauncherSettingsMock : PowerLauncherSettings
|
||||
{
|
||||
public int TimesSaved { get; set; }
|
||||
public override void Save()
|
||||
{
|
||||
TimesSaved++;
|
||||
}
|
||||
}
|
||||
|
||||
class SendCallbackMock
|
||||
{
|
||||
public int TimesSent { get; set; }
|
||||
public void OnSend(PowerLauncherSettings settings)
|
||||
{
|
||||
TimesSent++;
|
||||
}
|
||||
}
|
||||
private PowerLauncherViewModel viewModel;
|
||||
private PowerLauncherSettingsMock mockSettings;
|
||||
private SendCallbackMock sendCallbackMock;
|
||||
|
||||
|
||||
[TestInitialize]
|
||||
public void Initialize()
|
||||
{
|
||||
mockSettings = new PowerLauncherSettingsMock();
|
||||
sendCallbackMock = new SendCallbackMock();
|
||||
|
||||
viewModel = new PowerLauncherViewModel(
|
||||
mockSettings,
|
||||
new PowerLauncherViewModel.SendCallback(sendCallbackMock.OnSend)
|
||||
);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void IsEnabled_ShouldEnableModule()
|
||||
{
|
||||
viewModel.EnablePowerLauncher = true;
|
||||
|
||||
Assert.AreEqual(sendCallbackMock.TimesSent, 1);
|
||||
Assert.AreEqual(mockSettings.TimesSaved, 1);
|
||||
|
||||
Assert.IsTrue(mockSettings.properties.enable_powerlauncher == true);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void SearchPreference_ShouldUpdatePreferences()
|
||||
{
|
||||
viewModel.SearchResultPreference = "SearchOptionsAreNotValidated";
|
||||
viewModel.SearchTypePreference = "SearchOptionsAreNotValidated";
|
||||
|
||||
Assert.AreEqual(sendCallbackMock.TimesSent, 2);
|
||||
Assert.AreEqual(mockSettings.TimesSaved, 2);
|
||||
|
||||
Assert.IsTrue(mockSettings.properties.search_result_preference == "SearchOptionsAreNotValidated");
|
||||
Assert.IsTrue(mockSettings.properties.search_type_preference == "SearchOptionsAreNotValidated");
|
||||
}
|
||||
|
||||
public void AssertHotkeySettings(HotkeySettings setting, bool win, bool ctrl, bool alt, bool shift, int code)
|
||||
{
|
||||
Assert.AreEqual(setting.Win, win);
|
||||
Assert.AreEqual(setting.Ctrl, ctrl);
|
||||
Assert.AreEqual(setting.Alt, alt);
|
||||
Assert.AreEqual(setting.Shift, shift);
|
||||
Assert.AreEqual(setting.Code, code);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void Hotkeys_ShouldUpdateHotkeys()
|
||||
{
|
||||
var openPowerLauncher = new HotkeySettings();
|
||||
openPowerLauncher.Win = true;
|
||||
openPowerLauncher.Code = (int)Windows.System.VirtualKey.S;
|
||||
|
||||
|
||||
var openFileLocation = new HotkeySettings();
|
||||
openFileLocation.Ctrl = true;
|
||||
openFileLocation.Code = (int)Windows.System.VirtualKey.A;
|
||||
|
||||
var openConsole = new HotkeySettings();
|
||||
openConsole.Alt = true;
|
||||
openConsole.Code = (int)Windows.System.VirtualKey.D;
|
||||
|
||||
var copyFileLocation = new HotkeySettings();
|
||||
copyFileLocation.Shift = true;
|
||||
copyFileLocation.Code = (int)Windows.System.VirtualKey.F;
|
||||
|
||||
viewModel.OpenPowerLauncher = openPowerLauncher;
|
||||
viewModel.OpenFileLocation = openFileLocation;
|
||||
viewModel.OpenConsole = openConsole;
|
||||
viewModel.CopyPathLocation = copyFileLocation;
|
||||
|
||||
Assert.AreEqual(mockSettings.TimesSaved, 4);
|
||||
Assert.AreEqual(sendCallbackMock.TimesSent, 4);
|
||||
|
||||
AssertHotkeySettings(
|
||||
mockSettings.properties.open_powerlauncher,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
(int)Windows.System.VirtualKey.S
|
||||
);
|
||||
AssertHotkeySettings(
|
||||
mockSettings.properties.open_file_location,
|
||||
false,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
(int)Windows.System.VirtualKey.A
|
||||
);
|
||||
AssertHotkeySettings(
|
||||
mockSettings.properties.open_console,
|
||||
false,
|
||||
false,
|
||||
true,
|
||||
false,
|
||||
(int)Windows.System.VirtualKey.D
|
||||
);
|
||||
AssertHotkeySettings(
|
||||
mockSettings.properties.copy_path_location,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
true,
|
||||
(int)Windows.System.VirtualKey.F
|
||||
);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void Override_ShouldUpdateOverrides()
|
||||
{
|
||||
viewModel.OverrideWinRKey = true;
|
||||
viewModel.OverrideWinSKey = false;
|
||||
|
||||
|
||||
Assert.AreEqual(sendCallbackMock.TimesSent, 1);
|
||||
Assert.AreEqual(mockSettings.TimesSaved, 1);
|
||||
|
||||
Assert.IsTrue(mockSettings.properties.override_win_r_key);
|
||||
Assert.IsFalse(mockSettings.properties.override_win_s_key);
|
||||
}
|
||||
}
|
||||
}
|
@ -52,6 +52,8 @@
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
<None Include="packages.config">
|
||||
<Filter>Source Files</Filter>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
Loading…
Reference in New Issue
Block a user