Skip to content

Commit 6787fda

Browse files
authored
Extending visualizers to handle Type, Func, Action, MethodInfo and ConstructorInfo (#44)
* Extending visualizers to handle Type and MethodInfo, re: #42 * Continued * Support for visualizing MethodInfos Support for open generic Type translation in Type.GetFriendlyName() Updating constant Func translation to use Type.GetFriendlyName() * Adding handled type declarations to visualizer assembly infos * Support for ConstructorInfo visualisation * Support for translating property getters and setters Including method and constructor accessibility and modifier keywords Recognising abstract property getter and setter MethodInfos * Handling Func visualization * Adding Type visualization
1 parent f89a5b6 commit 6787fda

File tree

24 files changed

+1485
-248
lines changed

24 files changed

+1485
-248
lines changed

ReadableExpressions.UnitTests/ReadableExpressions.UnitTests.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,10 @@
117117
<Compile Include="Extensions\WhenGettingAParentExpressionNode.cs" />
118118
<Compile Include="Extensions\WhenGettingFriendlyNames.cs" />
119119
<Compile Include="ShouldExtensions.cs" />
120+
<Compile Include="StaticTranslators\WhenTranslatingTypes.cs" />
121+
<Compile Include="StaticTranslators\WhenTranslatingConstructorInfos.cs" />
120122
<Compile Include="TestClassBase.cs" />
123+
<Compile Include="StaticTranslators\WhenTranslatingMethodInfos.cs" />
121124
<Compile Include="WhenTranslatingVariableNames.cs" />
122125
<Compile Include="WhenUsingPartialTrust.cs" />
123126
<Compile Include="WhenTranslatingStringConcatenation.cs" />
Lines changed: 248 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,248 @@
1+
namespace AgileObjects.ReadableExpressions.UnitTests.StaticTranslators
2+
{
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Reflection;
6+
using NetStandardPolyfills;
7+
using Translations.StaticTranslators;
8+
#if !NET35
9+
using Xunit;
10+
#else
11+
using Fact = NUnit.Framework.TestAttribute;
12+
13+
[NUnit.Framework.TestFixture]
14+
#endif
15+
public class WhenTranslatingConstructorInfos
16+
{
17+
[Fact]
18+
public void ShouldTranslateANullCtorInfo()
19+
{
20+
var translated = DefinitionsTranslator.Translate(default(ConstructorInfo));
21+
22+
translated.ShouldBe("[Constructor not found]");
23+
}
24+
25+
[Fact]
26+
public void ShouldTranslateAParameterlessCtorInfo()
27+
{
28+
var ctor = typeof(Helper)
29+
.GetPublicInstanceConstructor();
30+
31+
var translated = DefinitionsTranslator.Translate(ctor);
32+
33+
translated.ShouldBe("public WhenTranslatingConstructorInfos.Helper()");
34+
}
35+
36+
[Fact]
37+
public void ShouldTranslateAnAbstractParameterlessCtorInfo()
38+
{
39+
var ctor = typeof(AbstractHelper)
40+
.GetNonPublicInstanceConstructor();
41+
42+
var translated = DefinitionsTranslator.Translate(ctor);
43+
44+
translated.ShouldBe("protected WhenTranslatingConstructorInfos.AbstractHelper()");
45+
}
46+
47+
[Fact]
48+
public void ShouldTranslateASealedParameterlessCtorInfo()
49+
{
50+
var ctor = typeof(SealedInternalHelper)
51+
.GetNonPublicInstanceConstructor();
52+
53+
var translated = DefinitionsTranslator.Translate(ctor);
54+
55+
translated.ShouldBe("internal WhenTranslatingConstructorInfos.SealedInternalHelper()");
56+
}
57+
58+
[Fact]
59+
public void ShouldTranslateASingleParameterCtorInfo()
60+
{
61+
var ctor = typeof(Helper)
62+
.GetPublicInstanceConstructor(typeof(int));
63+
64+
var translated = DefinitionsTranslator.Translate(ctor);
65+
66+
const string EXPECTED =
67+
@"public WhenTranslatingConstructorInfos.Helper
68+
(
69+
int value
70+
)";
71+
translated.ShouldBe(EXPECTED);
72+
}
73+
74+
[Fact]
75+
public void ShouldTranslateATwoParameterCtorInfo()
76+
{
77+
var ctor = typeof(Helper)
78+
.GetPublicInstanceConstructor(typeof(DateTime), typeof(int));
79+
80+
var translated = DefinitionsTranslator.Translate(ctor);
81+
82+
const string EXPECTED =
83+
@"public WhenTranslatingConstructorInfos.Helper
84+
(
85+
DateTime date,
86+
int days
87+
)";
88+
translated.ShouldBe(EXPECTED);
89+
}
90+
91+
[Fact]
92+
public void ShouldTranslateAnOpenGenericCtorInfo()
93+
{
94+
var ctor = typeof(Helper<>)
95+
.GetPublicInstanceConstructor();
96+
97+
var translated = DefinitionsTranslator.Translate(ctor);
98+
99+
translated.ShouldBe("public WhenTranslatingConstructorInfos.Helper<T>()");
100+
}
101+
102+
[Fact]
103+
public void ShouldTranslateAClosedGenericCtorInfo()
104+
{
105+
var ctor = typeof(Helper<Dictionary<int, string>>)
106+
.GetPublicInstanceConstructor();
107+
108+
var translated = DefinitionsTranslator.Translate(ctor);
109+
110+
translated.ShouldBe("public WhenTranslatingConstructorInfos.Helper<Dictionary<int, string>>()");
111+
}
112+
113+
[Fact]
114+
public void ShouldTranslateAParameterlessTwoOpenGenericsCtorInfo()
115+
{
116+
var method = typeof(Helper<,>)
117+
.GetPublicInstanceConstructor();
118+
119+
var translated = DefinitionsTranslator.Translate(method);
120+
121+
translated.ShouldBe("public WhenTranslatingConstructorInfos.Helper<T1, T2>()");
122+
}
123+
124+
[Fact]
125+
public void ShouldTranslateAThreeParametersTwoGenericsCtorInfo()
126+
{
127+
var method = typeof(Helper<DateTime, TimeSpan>)
128+
.GetPublicInstanceConstructor(typeof(int), typeof(Func<int, DateTime>), typeof(TimeSpan));
129+
130+
var translated = DefinitionsTranslator.Translate(method);
131+
132+
const string EXPECTED =
133+
@"public WhenTranslatingConstructorInfos.Helper<DateTime, TimeSpan>
134+
(
135+
int value,
136+
Func<int, DateTime> func,
137+
TimeSpan value2
138+
)";
139+
translated.ShouldBe(EXPECTED);
140+
}
141+
142+
[Fact]
143+
public void ShouldTranslateAnOutParameter()
144+
{
145+
var ctor = typeof(Helper)
146+
.GetPublicInstanceConstructor(typeof(DateTime).MakeByRefType());
147+
148+
var translated = DefinitionsTranslator.Translate(ctor);
149+
150+
const string EXPECTED =
151+
@"public WhenTranslatingConstructorInfos.Helper
152+
(
153+
out DateTime value
154+
)";
155+
translated.ShouldBe(EXPECTED);
156+
}
157+
158+
[Fact]
159+
public void ShouldTranslateARefParameter()
160+
{
161+
var ctor = typeof(Helper)
162+
.GetPublicInstanceConstructor(typeof(object).MakeByRefType());
163+
164+
var translated = DefinitionsTranslator.Translate(ctor);
165+
166+
const string EXPECTED =
167+
@"public WhenTranslatingConstructorInfos.Helper
168+
(
169+
ref object value
170+
)";
171+
translated.ShouldBe(EXPECTED);
172+
}
173+
174+
#region Helper Classes
175+
176+
// ReSharper disable UnusedMember.Local
177+
private class Helper
178+
{
179+
public Helper()
180+
{
181+
Console.WriteLine("Constructed!");
182+
}
183+
184+
public Helper(out DateTime value)
185+
{
186+
value = DateTime.Now;
187+
}
188+
189+
public Helper(ref object value)
190+
{
191+
Console.WriteLine(value);
192+
}
193+
194+
public Helper(int value)
195+
{
196+
Console.WriteLine(value);
197+
}
198+
199+
public Helper(DateTime date, int days)
200+
{
201+
Console.WriteLine(date);
202+
Console.WriteLine(days);
203+
}
204+
}
205+
206+
private class Helper<T>
207+
{
208+
public Helper()
209+
{
210+
Console.WriteLine(typeof(T));
211+
}
212+
}
213+
214+
private class Helper<T1, T2>
215+
{
216+
public Helper()
217+
{
218+
Console.WriteLine("Constructed!");
219+
}
220+
221+
public Helper(int value, Func<int, T1> func, T2 value2)
222+
{
223+
Console.WriteLine(value);
224+
Console.WriteLine(func(value));
225+
Console.WriteLine(value2);
226+
}
227+
}
228+
229+
private abstract class AbstractHelper
230+
{
231+
protected AbstractHelper()
232+
{
233+
Console.WriteLine("Constructed!");
234+
}
235+
}
236+
237+
private sealed class SealedInternalHelper
238+
{
239+
internal SealedInternalHelper()
240+
{
241+
Console.WriteLine("Constructed!");
242+
}
243+
}
244+
// ReSharper restore UnusedMember.Local
245+
246+
#endregion
247+
}
248+
}

0 commit comments

Comments
 (0)