[DSC] Implement Microsoft.PowerToys.Configure DSCResource & winget support (#30918)

* [DSC] Microsoft.PowerToys.Configure module + winget configuration file support

* f: fix for an incorrect directory id reference

* f: update comment

* f: address review comments

* f: file locksmith bug fix

* f: add explorer preview switches in samples

* f: remove debug

* Sign DSC files

* f: implement docs/samples generator

* [ci]Sign FancyZonesEditorCommon.dll

* Sign DSC files in the Generated folder

* f: address review comments

* f: update usable options

* f: add autogenerated sample

* [Installer] Don't use same GUID for different components

* [Installer]Don't remove folders shared by other modules

* Allow configuring PTRun MaximumNumberOfResults

* Remove all settings DSC sample. Just random data

* Allow configuring Hosts Run as Administrator

* Revert "[Installer]Don't remove folders shared by other modules"

This reverts commit 6da3d6cfd5.

* Add all PTRun plugins and Global and keyboard to DSC sample

* Fix issues with context menu modules not disabling

* Fix default enabled values when setting with DSC

* Fix tests regarding default modules in Settings

* Fix merge error

* Restart PowerToys process if we stopped it

---------

Co-authored-by: Andrey Nekrasov <1828123+yuyoyuppe@users.noreply.github.com>
Co-authored-by: Jaime Bernardo <jaime@janeasystems.com>
This commit is contained in:
Andrey Nekrasov
2024-04-02 01:09:47 +02:00
committed by GitHub
parent 818d3e3035
commit f23fa3f592
81 changed files with 2608 additions and 265 deletions

View File

@@ -0,0 +1,75 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using Microsoft.PowerToys.Settings.UI.Library;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Settings.UI.UnitTests.Settings;
[TestClass]
public class ICmdReprParsableTests
{
[TestMethod]
public void KeyboardKeysPropertyParsing()
{
{
Assert.IsTrue(KeyboardKeysProperty.TryParseFromCmd("win+ctrl+Alt+sHifT+Q", out var hotkey));
Assert.AreEqual(new KeyboardKeysProperty { Value = new HotkeySettings(true, true, true, true, 0x51) }, hotkey);
}
{
Assert.IsTrue(KeyboardKeysProperty.TryParseFromCmd("CTRL+z", out var hotkey));
Assert.AreEqual(new KeyboardKeysProperty { Value = new HotkeySettings(false, true, false, false, 0x5A) }, hotkey);
}
{
Assert.IsTrue(KeyboardKeysProperty.TryParseFromCmd("shift+ALT+0x59", out var hotkey));
Assert.AreEqual(new KeyboardKeysProperty { Value = new HotkeySettings(false, false, true, true, 0x59) }, hotkey);
}
{
Assert.IsTrue(KeyboardKeysProperty.TryParseFromCmd("alt+Space", out var hotkey));
Assert.AreEqual(new KeyboardKeysProperty { Value = new HotkeySettings(false, false, true, false, 0x20) }, hotkey);
}
}
[TestMethod]
public void BoolPropertyParsing()
{
{
Assert.IsTrue(BoolProperty.TryParseFromCmd("True", out var result));
Assert.AreEqual(new BoolProperty(true), result);
}
{
Assert.IsTrue(BoolProperty.TryParseFromCmd("false", out var result));
Assert.AreEqual(new BoolProperty(false), result);
}
}
[TestMethod]
public void IntPropertyParsing()
{
{
Assert.IsTrue(IntProperty.TryParseFromCmd("123", out var result));
Assert.AreEqual(new IntProperty(123), result);
}
{
Assert.IsTrue(IntProperty.TryParseFromCmd("1500", out var result));
Assert.AreEqual(new IntProperty(1500), result);
Assert.AreNotEqual(new IntProperty(15), result);
}
}
[TestMethod]
public void MouseJumpThumbnailSizeParsing()
{
{
Assert.IsTrue(MouseJumpThumbnailSize.TryParseFromCmd("1920x1080", out var result));
Assert.AreEqual(new MouseJumpThumbnailSize { Width = 1920, Height = 1080 }, result);
}
}
}

View File

@@ -0,0 +1,63 @@
// Copyright (c) Microsoft Corporation
// 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;
using System.IO.Abstractions.TestingHelpers;
using Microsoft.PowerToys.Settings.UI.Library;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using static Microsoft.PowerToys.Settings.UI.Library.SetSettingCommandLineCommand;
namespace Settings.UI.UnitTests.Cmd;
[TestClass]
public class SetSettingCommandTests
{
private SettingsUtils settingsUtils;
[TestInitialize]
public void Setup()
{
settingsUtils = new SettingsUtils(new MockFileSystem());
}
private void SetSetting(Type moduleSettingsType, string settingName, string newValueStr)
{
var settings = CommandLineUtils.GetSettingsConfigFor(moduleSettingsType, settingsUtils);
var defaultValue = CommandLineUtils.GetPropertyValue(settingName, settings);
var qualifiedName = moduleSettingsType.Name.Replace("Settings", string.Empty) + "." + settingName;
var type = CommandLineUtils.GetSettingPropertyInfo(settingName, settings).PropertyType;
var newValue = ICmdLineRepresentable.ParseFor(type, newValueStr);
Execute(qualifiedName, newValueStr, settingsUtils);
Assert.AreNotEqual(defaultValue, newValue);
Assert.AreEqual(newValue, CommandLineUtils.GetPropertyValue(settingName, settings));
}
// Each setting has a different type.
[TestMethod]
[DataRow(typeof(PowerRenameSettings), nameof(PowerRenameProperties.MaxMRUSize), "123")]
[DataRow(typeof(FancyZonesSettings), nameof(FZConfigProperties.FancyzonesBorderColor), "#00FF00")]
[DataRow(typeof(MeasureToolSettings), nameof(MeasureToolProperties.ActivationShortcut), "Ctrl+Alt+Delete")]
[DataRow(typeof(AlwaysOnTopSettings), nameof(AlwaysOnTopProperties.SoundEnabled), "False")]
[DataRow(typeof(PowerAccentSettings), nameof(PowerAccentProperties.ShowUnicodeDescription), "true")]
[DataRow(typeof(AwakeSettings), nameof(AwakeProperties.Mode), "EXPIRABLE")]
[DataRow(typeof(AwakeSettings), nameof(AwakeProperties.ExpirationDateTime), "March 31, 2020 15:00 +00:00")]
[DataRow(typeof(PowerLauncherSettings), nameof(PowerLauncherProperties.MaximumNumberOfResults), "322")]
[DataRow(typeof(ColorPickerSettings), nameof(ColorPickerProperties.CopiedColorRepresentation), "RGB")]
public void SetModuleSetting(Type moduleSettingsType, string settingName, string newValueStr)
{
SetSetting(moduleSettingsType, settingName, newValueStr);
}
[DataRow(typeof(GeneralSettings), "Enabled.MouseWithoutBorders", "true")]
[DataRow(typeof(GeneralSettings), nameof(GeneralSettings.AutoDownloadUpdates), "true")]
[TestMethod]
public void SetGeneralSetting(Type moduleSettingsType, string settingName, string newValueStr)
{
SetSetting(moduleSettingsType, settingName, newValueStr);
}
}