Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 71bde69

Browse files
committed
More tests around Typed Accessors
1 parent 390304e commit 71bde69

File tree

2 files changed

+187
-0
lines changed

2 files changed

+187
-0
lines changed

src/ServiceStack.Text/PlatformExtensions.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1081,6 +1081,12 @@ public static PropertyInfo GetProperty(this Type type, String propertyName)
10811081
{
10821082
return type.GetTypeInfo().GetDeclaredProperty(propertyName);
10831083
}
1084+
1085+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
1086+
public static FieldInfo GetField(this Type type, String fieldName)
1087+
{
1088+
return type.GetTypeInfo().GetDeclaredField(fieldName);
1089+
}
10841090
#endif
10851091

10861092
#if NETFX_CORE
Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
using NUnit.Framework;
2+
3+
namespace ServiceStack.Text.Tests.UseCases
4+
{
5+
public class MyType
6+
{
7+
public long LongProp { get; set; }
8+
public string StringProp { get; set; }
9+
10+
public long LongField;
11+
public string StringField;
12+
}
13+
14+
public class TypedAccessors_API_Examples
15+
{
16+
[Test]
17+
public void Can_access_IntProp()
18+
{
19+
var runtimeType = typeof(MyType);
20+
21+
var instance = runtimeType.CreateInstance();
22+
var pi = runtimeType.GetProperty("LongProp");
23+
var setter = pi.CreateSetter();
24+
var getter = pi.CreateGetter();
25+
26+
setter(instance, 1L);
27+
var value = getter(instance);
28+
29+
Assert.That(value, Is.EqualTo(1));
30+
}
31+
32+
[Test]
33+
public void Can_access_IntProp_Typed()
34+
{
35+
var runtimeType = typeof(MyType);
36+
37+
var instance = runtimeType.CreateInstance<MyType>();
38+
var pi = runtimeType.GetProperty("LongProp");
39+
var setter = pi.CreateSetter<MyType>();
40+
var getter = pi.CreateGetter<MyType>();
41+
42+
setter(instance, 1L);
43+
var value = getter(instance);
44+
45+
Assert.That(value, Is.EqualTo(1));
46+
}
47+
48+
[Test]
49+
public void Can_access_StringProp()
50+
{
51+
var runtimeType = typeof(MyType);
52+
53+
var instance = runtimeType.CreateInstance();
54+
var pi = runtimeType.GetProperty("StringProp");
55+
var setter = pi.CreateSetter();
56+
var getter = pi.CreateGetter();
57+
58+
setter(instance, "foo");
59+
var value = getter(instance);
60+
61+
Assert.That(value, Is.EqualTo("foo"));
62+
}
63+
64+
[Test]
65+
public void Can_access_StringProp_Typed()
66+
{
67+
var runtimeType = typeof(MyType);
68+
69+
var instance = runtimeType.CreateInstance<MyType>();
70+
var pi = runtimeType.GetProperty("StringProp");
71+
var setter = pi.CreateSetter<MyType>();
72+
var getter = pi.CreateGetter<MyType>();
73+
74+
setter(instance, "foo");
75+
var value = getter(instance);
76+
77+
Assert.That(value, Is.EqualTo("foo"));
78+
}
79+
80+
81+
[Test]
82+
public void Can_access_IntField()
83+
{
84+
var runtimeType = typeof(MyType);
85+
86+
var instance = runtimeType.CreateInstance();
87+
var pi = runtimeType.GetField("LongField");
88+
var setter = pi.CreateSetter();
89+
var getter = pi.CreateGetter();
90+
91+
setter(instance, 1L);
92+
var value = getter(instance);
93+
94+
Assert.That(value, Is.EqualTo(1));
95+
}
96+
97+
[Test]
98+
public void Can_access_IntField_Typed()
99+
{
100+
var runtimeType = typeof(MyType);
101+
102+
var instance = runtimeType.CreateInstance<MyType>();
103+
var pi = runtimeType.GetField("LongField");
104+
var setter = pi.CreateSetter<MyType>();
105+
var getter = pi.CreateGetter<MyType>();
106+
107+
setter(instance, 1L);
108+
var value = getter(instance);
109+
110+
Assert.That(value, Is.EqualTo(1));
111+
}
112+
113+
[Test]
114+
public void Can_access_StringField()
115+
{
116+
var runtimeType = typeof(MyType);
117+
118+
var instance = runtimeType.CreateInstance();
119+
var pi = runtimeType.GetField("StringField");
120+
var setter = pi.CreateSetter();
121+
var getter = pi.CreateGetter();
122+
123+
setter(instance, "foo");
124+
var value = getter(instance);
125+
126+
Assert.That(value, Is.EqualTo("foo"));
127+
}
128+
129+
[Test]
130+
public void Can_access_StringField_Typed()
131+
{
132+
var runtimeType = typeof(MyType);
133+
134+
var instance = runtimeType.CreateInstance<MyType>();
135+
var pi = runtimeType.GetField("StringField");
136+
var setter = pi.CreateSetter<MyType>();
137+
var getter = pi.CreateGetter<MyType>();
138+
139+
setter(instance, "foo");
140+
var value = getter(instance);
141+
142+
Assert.That(value, Is.EqualTo("foo"));
143+
}
144+
145+
[Test]
146+
public void Can_use_TypedProperties_accessor()
147+
{
148+
var runtimeType = typeof(MyType);
149+
var typeProps = TypeProperties.Get(runtimeType); //Equivalent to:
150+
// typeProps = TypeProperties<MyType>.Instance;
151+
152+
var instance = runtimeType.CreateInstance();
153+
154+
var propAccessor = typeProps.GetAccessor("LongProp");
155+
propAccessor.PublicSetter(instance, 1L);
156+
Assert.That(propAccessor.PublicGetter(instance), Is.EqualTo(1));
157+
158+
typeProps.GetPublicSetter("StringProp")(instance, "foo");
159+
var value = typeProps.GetPublicGetter("StringProp")(instance);
160+
Assert.That(value, Is.EqualTo("foo"));
161+
}
162+
163+
[Test]
164+
public void Can_use_TypedFields_accessor()
165+
{
166+
var runtimeType = typeof(MyType);
167+
var typeProps = TypeFields.Get(runtimeType); //Equivalent to:
168+
// typeProps = TypeFields<MyType>.Instance;
169+
170+
var instance = runtimeType.CreateInstance();
171+
172+
var propAccessor = typeProps.GetAccessor("LongField");
173+
propAccessor.PublicSetter(instance, 1L);
174+
Assert.That(propAccessor.PublicGetter(instance), Is.EqualTo(1));
175+
176+
typeProps.GetPublicSetter("StringField")(instance, "foo");
177+
var value = typeProps.GetPublicGetter("StringField")(instance);
178+
Assert.That(value, Is.EqualTo("foo"));
179+
}
180+
}
181+
}

0 commit comments

Comments
 (0)