-
Notifications
You must be signed in to change notification settings - Fork 4.6k
/
RegistryKey_OpenSubKey_str_b.cs
77 lines (66 loc) · 3.54 KB
/
RegistryKey_OpenSubKey_str_b.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
// 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 Xunit;
namespace Microsoft.Win32.RegistryTests
{
public class RegistryKey_OpenSubKey_str_b : RegistryKeyOpenSubKeyTestsBase
{
[Fact]
public void NegativeTests()
{
// Should throw if passed subkey name is null
Assert.Throws<ArgumentNullException>(() => TestRegistryKey.OpenSubKey(name: null, writable: false));
// Should throw if subkey name greater than 255 chars
AssertExtensions.Throws<ArgumentException>("name", null, () => TestRegistryKey.OpenSubKey(new string('a', 256), true));
// 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, writable: false))
{
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, true);
});
}
[Fact]
public void OpenSubKeyTest()
{
// [] Should have write rights when true is passed
const int testValue = 32;
using (var rk = TestRegistryKey.OpenSubKey("", true))
{
rk.CreateSubKey(TestRegistryKeyName).Dispose();
rk.SetValue(TestRegistryKeyName, testValue);
using RegistryKey subkey = rk.OpenSubKey(TestRegistryKeyName);
Assert.NotNull(subkey);
Assert.Equal(testValue, (int)rk.GetValue(TestRegistryKeyName));
}
}
[Theory]
[MemberData(nameof(TestRegistrySubKeyNames))]
public void OpenSubKey_Writable_KeyExists_OpensWithFixedUpName(string expected, string subKeyName) =>
Verify_OpenSubKey_KeyExists_OpensWithFixedUpName(expected, () => TestRegistryKey.OpenSubKey(subKeyName, writable: true));
[Theory]
[MemberData(nameof(TestRegistrySubKeyNames))]
public void OpenSubKey_NonWritable_KeyExists_OpensWithFixedUpName(string expected, string subKeyName) =>
Verify_OpenSubKey_KeyExists_OpensWithFixedUpName(expected, () => TestRegistryKey.OpenSubKey(subKeyName, writable: false));
[Theory]
[MemberData(nameof(TestRegistrySubKeyNames))]
public void OpenSubKey_Writable_KeyDoesNotExist_ReturnsNull(string expected, string subKeyName) =>
Verify_OpenSubKey_KeyDoesNotExist_ReturnsNull(expected, () => TestRegistryKey.OpenSubKey(subKeyName, writable: true));
[Theory]
[MemberData(nameof(TestRegistrySubKeyNames))]
public void OpenSubKey_NonWritable_KeyDoesNotExist_ReturnsNull(string expected, string subKeyName) =>
Verify_OpenSubKey_KeyDoesNotExist_ReturnsNull(expected, () => TestRegistryKey.OpenSubKey(subKeyName, writable: false));
}
}