diff --git a/PowerKit.Tests/RegistryExtensionsTests.cs b/PowerKit.Tests/RegistryExtensionsTests.cs new file mode 100644 index 0000000..3265f5a --- /dev/null +++ b/PowerKit.Tests/RegistryExtensionsTests.cs @@ -0,0 +1,47 @@ +using System; +using System.Runtime.Versioning; +using FluentAssertions; +using Microsoft.Win32; +using PowerKit.Extensions; +using Xunit; + +namespace PowerKit.Tests; + +public class RegistryExtensionsTests +{ + [SkippableFact] + [SupportedOSPlatform("windows")] + public void ContainsSubKey_Exists_Test() + { + Skip.IfNot(OperatingSystem.IsWindows()); + + // Arrange + using var key = Registry.CurrentUser.OpenSubKey("Software", true)!; + var subKeyName = $"PowerKit.Tests.{Guid.NewGuid():N}"; + + try + { + using var subKey = key.CreateSubKey(subKeyName); + + // Act & assert + key.ContainsSubKey(subKeyName).Should().BeTrue(); + } + finally + { + key.DeleteSubKeyTree(subKeyName, false); + } + } + + [SkippableFact] + [SupportedOSPlatform("windows")] + public void ContainsSubKey_NotExists_Test() + { + Skip.IfNot(OperatingSystem.IsWindows()); + + // Arrange + using var key = Registry.CurrentUser.OpenSubKey("Software", false)!; + + // Act & assert + key.ContainsSubKey("this-sub-key-definitely-does-not-exist").Should().BeFalse(); + } +} diff --git a/PowerKit/Extensions/RegistryExtensions.cs b/PowerKit/Extensions/RegistryExtensions.cs new file mode 100644 index 0000000..f9adc5a --- /dev/null +++ b/PowerKit/Extensions/RegistryExtensions.cs @@ -0,0 +1,22 @@ +#if NETFRAMEWORK || NET5_0_OR_GREATER +using System.Runtime.Versioning; +using Microsoft.Win32; + +namespace PowerKit.Extensions; + +internal static class RegistryExtensions +{ + extension(RegistryKey key) + { + /// + /// Checks whether a sub-key with the specified name exists under the registry key. + /// + [SupportedOSPlatform("windows")] + public bool ContainsSubKey(string name) + { + using var subKey = key.OpenSubKey(name, false); + return subKey is not null; + } + } +} +#endif