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