Mercurial > pub > bltoolkit
comparison UnitTests/CS/Mapping/MapperMemberAttributeTest.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f990fcb411a9 |
---|---|
1 using System; | |
2 | |
3 using NUnit.Framework; | |
4 | |
5 using BLToolkit.Mapping; | |
6 using BLToolkit.Reflection; | |
7 using BLToolkit.Reflection.Extension; | |
8 using BLToolkit.Reflection.MetadataProvider; | |
9 | |
10 namespace Mapping | |
11 { | |
12 [TestFixture] | |
13 public class MapperMemberAttributeTest | |
14 { | |
15 class MemberMapper1 : MemberMapper | |
16 { | |
17 public override object GetValue(object o) | |
18 { | |
19 return 45; | |
20 } | |
21 } | |
22 | |
23 public class Object1 | |
24 { | |
25 // MapIgnore set to false | |
26 // | |
27 [MemberMapper(typeof(MemberMapper1))] | |
28 public int Int; | |
29 | |
30 // MapIgnore set to DebugSwitch value | |
31 // | |
32 [MapIgnore(DebugSwitch), MemberMapper(typeof(MemberMapper1))] | |
33 public int MapIgnore; | |
34 | |
35 // MapIgnore set to true | |
36 // | |
37 [MemberMapper(typeof(MemberMapper1)), MapIgnore] | |
38 public int MapIgnore2; | |
39 | |
40 [MapIgnore(false), MemberMapper(typeof(MemberMapper1))] | |
41 public int MapNotIgnore; | |
42 | |
43 private const bool DebugSwitch = true; | |
44 } | |
45 | |
46 [Test] | |
47 public void Test1() | |
48 { | |
49 ObjectMapper om = Map.GetObjectMapper(typeof(Object1)); | |
50 | |
51 Object1 o = new Object1(); | |
52 | |
53 om.SetValue(o, "Int", 456); | |
54 | |
55 Assert.AreEqual(456, o.Int); | |
56 Assert.AreEqual(45, om.GetValue(o, "Int")); | |
57 | |
58 Assert.IsNull(om["MapIgnore"]); | |
59 Assert.IsNull(om["MapIgnore2"]); | |
60 Assert.IsNotNull(om["MapNotIgnore"]); | |
61 } | |
62 | |
63 [MemberMapper(typeof(int), typeof(MemberMapper1))] | |
64 public class Object2 | |
65 { | |
66 public int Int; | |
67 } | |
68 | |
69 [Test] | |
70 public void Test2() | |
71 { | |
72 ObjectMapper om = Map.GetObjectMapper(typeof(Object2)); | |
73 | |
74 Object2 o = new Object2(); | |
75 | |
76 om.SetValue(o, "Int", 456); | |
77 | |
78 Assert.AreEqual(456, o.Int); | |
79 Assert.AreEqual(45, om.GetValue(o, "Int")); | |
80 } | |
81 | |
82 [MemberMapper(typeof(CustomNum.Mapper))] | |
83 public class CustomNum | |
84 { | |
85 public int Num; | |
86 | |
87 public CustomNum(int num) | |
88 { | |
89 Num = num; | |
90 } | |
91 | |
92 public CustomNum() | |
93 { | |
94 } | |
95 | |
96 public class Mapper : MemberMapper | |
97 { | |
98 public override object GetValue(object o) | |
99 { | |
100 object value = MemberAccessor.GetValue(o); | |
101 return value is CustomNum? ((CustomNum)value).Num: 0; | |
102 } | |
103 | |
104 public override void SetValue(object o, object value) | |
105 { | |
106 value = (value is int)? new CustomNum((int)value) : new CustomNum(); | |
107 MemberAccessor.SetValue(o, value); | |
108 } | |
109 } | |
110 } | |
111 | |
112 public class Object3 | |
113 { | |
114 public CustomNum Num; | |
115 } | |
116 | |
117 [Test] | |
118 public void TestNumberString() | |
119 { | |
120 ObjectMapper om = Map.GetObjectMapper(typeof(Object3)); | |
121 Object3 o = new Object3(); | |
122 | |
123 om.SetValue(o, "Num", 123); | |
124 | |
125 Assert.AreEqual(123, o.Num.Num); | |
126 } | |
127 | |
128 #region Custom mapping schema test | |
129 | |
130 public class CustomString | |
131 { | |
132 public string Str; | |
133 | |
134 public CustomString(string str) | |
135 { | |
136 Str = str; | |
137 } | |
138 | |
139 public CustomString() | |
140 { | |
141 Str = string.Empty; | |
142 } | |
143 | |
144 public class Mapper : MemberMapper | |
145 { | |
146 public override object GetValue(object o) | |
147 { | |
148 object value = MemberAccessor.GetValue(o); | |
149 return value is CustomString? ((CustomString)value).Str: null; | |
150 } | |
151 | |
152 public override void SetValue(object o, object value) | |
153 { | |
154 value = (value is string)? new CustomString((string)value) : new CustomString(); | |
155 MemberAccessor.SetValue(o, value); | |
156 } | |
157 } | |
158 } | |
159 | |
160 public class Object4 | |
161 { | |
162 public CustomString Str; | |
163 } | |
164 | |
165 public class TestMappingSchema : MappingSchema | |
166 { | |
167 private class TestMapMetadataProvider : MetadataProviderBase | |
168 { | |
169 public override bool GetMapIgnore(TypeExtension typeExtension, MemberAccessor member, out bool isSet) | |
170 { | |
171 if (member.Type == typeof(CustomString)) | |
172 { | |
173 isSet = true; | |
174 return false; | |
175 } | |
176 | |
177 return base.GetMapIgnore(typeExtension, member, out isSet); | |
178 } | |
179 } | |
180 | |
181 private class TestObjectMapper : ObjectMapper | |
182 { | |
183 protected override MemberMapper CreateMemberMapper(MapMemberInfo mapMemberInfo) | |
184 { | |
185 if (mapMemberInfo.Type == typeof(CustomString)) | |
186 { | |
187 MemberMapper mm = new CustomString.Mapper(); | |
188 mm.Init(mapMemberInfo); | |
189 return mm; | |
190 } | |
191 | |
192 return base.CreateMemberMapper(mapMemberInfo); | |
193 } | |
194 | |
195 protected override MetadataProviderBase CreateMetadataProvider() | |
196 { | |
197 MetadataProviderBase provider = base.CreateMetadataProvider(); | |
198 provider.AddProvider(new TestMapMetadataProvider()); | |
199 return provider; | |
200 } | |
201 | |
202 } | |
203 | |
204 protected override ObjectMapper CreateObjectMapperInstance(Type type) | |
205 { | |
206 return new TestObjectMapper(); | |
207 } | |
208 } | |
209 | |
210 [Test] | |
211 public void TestCustomString() | |
212 { | |
213 MappingSchema save = Map.DefaultSchema; | |
214 | |
215 Map.DefaultSchema = new TestMappingSchema(); | |
216 | |
217 ObjectMapper om = Map.GetObjectMapper(typeof(Object4)); | |
218 | |
219 Object4 o = new Object4(); | |
220 | |
221 om.SetValue(o, "Str", "Test"); | |
222 | |
223 Assert.AreEqual("Test", o.Str.Str); | |
224 | |
225 Map.DefaultSchema = save; | |
226 } | |
227 | |
228 #endregion | |
229 } | |
230 } |