-
Notifications
You must be signed in to change notification settings - Fork 0
/
TypeResolverTests.cs
115 lines (101 loc) · 4.88 KB
/
TypeResolverTests.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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
using System;
using System.Security.Permissions;
using System.Security.Policy;
using TypeResolver.SubWrapper;
using Xunit;
using Xunit.Abstractions;
namespace TypeResolver
{
public class ResolveableType<T> { }
public class DoubleResolveableType<T, TV> { }
public class HardType
{
public class NestedHardType { }
}
namespace SubWrapper
{
public class SubResolveableType<T> { }
public class SubDoubleResolveableType<T, TV> { }
public class SubHardType { }
}
public class TypeResolverTests
{
private readonly ITestOutputHelper _testOutputHelper;
private readonly TypeResolver _resolver;
public TypeResolverTests(ITestOutputHelper testOutputHelper)
{
_testOutputHelper = testOutputHelper;
_resolver = new TypeResolver
{
WellKnownTypes =
{
{"int", typeof(int)},
{"float", typeof(float)}
},
WellKnownAssemblies =
{
new TypeResolver.WellKnownAssembly(typeof(ResolveableType<>).Assembly, "TypeResolver.", "TypeResolver.HardType+"),
new TypeResolver.WellKnownAssembly(typeof(int).Assembly, "System.")
}
};
}
[Theory]
[InlineData("[System.Int32]", typeof(int))]
[InlineData("int?", typeof(int?))]
[InlineData(" int ? ", typeof(int?))]
[InlineData("System.TimeSpan", typeof(TimeSpan))]
[InlineData("TimeSpan", typeof(TimeSpan))]
[InlineData("Single", typeof(float))]
[InlineData("[TypeResolver.DoubleResolveableType`2[[System.Int32],[System.Int32]]]", typeof(DoubleResolveableType<int, int>))]
[InlineData("[System.Nullable`1[[System.Int32]]]", typeof(int?))]
[InlineData("[System.Nullable`1[[System.Security.Permissions.FileDialogPermissionAccess, System.Security.Permissions, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51]]]", typeof(FileDialogPermissionAccess?))]
[InlineData("[System.Security.Permissions.FileDialogPermissionAccess, System.Security.Permissions, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51]", typeof(FileDialogPermissionAccess))]
[InlineData("int", typeof(int))]
[InlineData("HardType", typeof(HardType))]
[InlineData("NestedHardType", typeof(HardType.NestedHardType))]
[InlineData("ResolveableType<int>", typeof(ResolveableType<int>))]
[InlineData(" ResolveableType<int>", typeof(ResolveableType<int>))]
[InlineData("ResolveableType <int>", typeof(ResolveableType<int>))]
[InlineData("ResolveableType< int>", typeof(ResolveableType<int>))]
[InlineData("ResolveableType<int >", typeof(ResolveableType<int>))]
[InlineData("DoubleResolveableType<HardType, System.Int32>", typeof(DoubleResolveableType<HardType, int>))]
[InlineData("DoubleResolveableType<int, [System.Security.Policy.Url, System.Security.Permissions, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51]>", typeof(DoubleResolveableType<int, Url>))]
[InlineData("SubWrapper.SubHardType", typeof(SubHardType))]
[InlineData("TypeResolver.SubWrapper.SubDoubleResolveableType<DoubleResolveableType<" +
"[System.Security.Policy.Url, System.Security.Permissions, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51]," +
"[System.Nullable`1[[System.Int32]]]>," +
"SubWrapper.SubResolveableType<ResolveableType<" +
"[System.Security.Permissions.FileDialogPermissionAccess, System.Security.Permissions, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51]?>>>",
typeof(SubDoubleResolveableType<DoubleResolveableType<Url, int?>, SubResolveableType<ResolveableType<FileDialogPermissionAccess?>>>))]
public void TestSuccessfulKnownResolves(string name, Type? type)
{
_testOutputHelper.WriteLine($"Resolving {name} to {type}");
var result = _resolver.ParseType(name);
Assert.Equal(type, result);
}
[Theory]
[InlineData("[System.Security.Policy.Url]")] // Ensure System.Security.Policy.Url isn't found through normal resolution.
[InlineData("DoubleResolveableType<int, [System.Security.Policy.Url]>")]
[InlineData("bad")]
[InlineData("[bad]")]
[InlineData("[System.Nullable`1[[bad]]]")]
[InlineData("DoubleResolveableType<int>")] // generic count mismatch
public void TestFailedResolution(string name)
{
var result = _resolver.ParseType(name);
Assert.Null(result);
}
[Theory]
[InlineData(typeof(int))]
[InlineData(typeof(ResolveableType<int>))]
[InlineData(typeof(DoubleResolveableType<int, int>))]
[InlineData(typeof(SubHardType))]
[InlineData(typeof(SubDoubleResolveableType<DoubleResolveableType<Url, int?>, SubResolveableType<ResolveableType<FileDialogPermissionAccess?>>>))]
public void TestFullyQualifiedResolution(Type expected)
{
var path = expected.AssemblyQualifiedName!;
var result = _resolver.ParseType($"[{path}]");
Assert.Equal(expected, result);
}
}
}