-
Notifications
You must be signed in to change notification settings - Fork 4.6k
/
RegistryKey_OpenSubKey_str_rr.cs
85 lines (73 loc) · 3.99 KB
/
RegistryKey_OpenSubKey_str_rr.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System;
using System.Security.AccessControl;
using Xunit;
namespace Microsoft.Win32.RegistryTests
{
public class RegistryKey_OpenSubKey_str_rr : RegistryKeyOpenSubKeyTestsBase
{
[Fact]
public void NegativeTests()
{
// Should throw if passed subkey name is null
Assert.Throws<ArgumentNullException>(() => TestRegistryKey.OpenSubKey(name: null, rights: RegistryRights.ReadKey));
// Should throw if subkey name greater than 255 chars
AssertExtensions.Throws<ArgumentException>("name", null, () => TestRegistryKey.OpenSubKey(new string('a', 256), RegistryRights.FullControl));
// OpenSubKey should be read only
const string name = "FooBar";
TestRegistryKey.SetValue(name, 42);
TestRegistryKey.CreateSubKey(name).Dispose();
using (var rk = Registry.CurrentUser.OpenSubKey(name: TestRegistryKeyName, rights: RegistryRights.ReadKey))
{
Assert.Throws<UnauthorizedAccessException>(() => rk.CreateSubKey(name));
Assert.Throws<UnauthorizedAccessException>(() => rk.SetValue(name, "String"));
Assert.Throws<UnauthorizedAccessException>(() => rk.DeleteValue(name));
Assert.Throws<UnauthorizedAccessException>(() => rk.DeleteSubKey(name));
Assert.Throws<UnauthorizedAccessException>(() => rk.DeleteSubKeyTree(name));
}
// Should throw if RegistryKey closed
Assert.Throws<ObjectDisposedException>(() =>
{
TestRegistryKey.Dispose();
TestRegistryKey.OpenSubKey(TestRegistryKeyName, RegistryRights.Delete);
});
}
[Fact]
public void OpenSubKeyTest()
{
// [] Vanilla; open a subkey in read/write mode and write to it
const string valueName = "FooBar";
const string expectedValue = "BLAH";
using (var rk = TestRegistryKey.OpenSubKey("", RegistryRights.SetValue | RegistryRights.QueryValues))
{
rk.SetValue(valueName, expectedValue);
Assert.Equal(expectedValue, rk.GetValue(valueName));
}
using (var rk = TestRegistryKey.OpenSubKey("", RegistryRights.CreateSubKey))
{
rk.CreateSubKey(valueName).Dispose();
using RegistryKey subkey = rk.OpenSubKey(valueName);
Assert.NotNull(subkey);
}
}
private const RegistryRights Writable = RegistryRights.ReadKey | RegistryRights.WriteKey;
private const RegistryRights NonWritable = RegistryRights.ReadKey;
[Theory]
[MemberData(nameof(TestRegistrySubKeyNames))]
public void OpenSubKey_Writable_KeyExists_OpensWithFixedUpName(string expected, string subKeyName) =>
Verify_OpenSubKey_KeyExists_OpensWithFixedUpName(expected, () => TestRegistryKey.OpenSubKey(subKeyName, Writable));
[Theory]
[MemberData(nameof(TestRegistrySubKeyNames))]
public void OpenSubKey_NonWritable_KeyExists_OpensWithFixedUpName(string expected, string subKeyName) =>
Verify_OpenSubKey_KeyExists_OpensWithFixedUpName(expected, () => TestRegistryKey.OpenSubKey(subKeyName, NonWritable));
[Theory]
[MemberData(nameof(TestRegistrySubKeyNames))]
public void OpenSubKey_Writable_KeyDoesNotExist_ReturnsNull(string expected, string subKeyName) =>
Verify_OpenSubKey_KeyDoesNotExist_ReturnsNull(expected, () => TestRegistryKey.OpenSubKey(subKeyName, Writable));
[Theory]
[MemberData(nameof(TestRegistrySubKeyNames))]
public void OpenSubKey_NonWritable_KeyDoesNotExist_ReturnsNull(string expected, string subKeyName) =>
Verify_OpenSubKey_KeyDoesNotExist_ReturnsNull(expected, () => TestRegistryKey.OpenSubKey(subKeyName, NonWritable));
}
}