Mercurial > pub > bltoolkit
comparison UnitTests/CS/Mapping/MemberMapperTest.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 using System.Data; | |
3 using System.Data.SqlTypes; | |
4 using System.Globalization; | |
5 | |
6 using NUnit.Framework; | |
7 | |
8 using BLToolkit.Data; | |
9 using BLToolkit.Mapping; | |
10 | |
11 namespace Mapping | |
12 { | |
13 [TestFixture] | |
14 public class MemberMapperTest | |
15 { | |
16 public class Object1 | |
17 { | |
18 public int Int32; | |
19 public float Float; | |
20 public DayOfWeek Dow1; | |
21 public DayOfWeek Dow2; | |
22 } | |
23 | |
24 [Test] | |
25 public void PrimitiveMemberTest() | |
26 { | |
27 ObjectMapper om = Map.GetObjectMapper(typeof(Object1)); | |
28 | |
29 Object1 o = new Object1(); | |
30 | |
31 DayOfWeek de = DayOfWeek.Thursday; | |
32 short di = (short)de; | |
33 | |
34 om.SetValue(o, "Int32", 123.56); | |
35 om.SetValue(o, "Float", 123.57.ToString()); | |
36 om.SetValue(o, "Dow1", de); | |
37 om.SetValue(o, "Dow2", di); | |
38 | |
39 Assert.AreEqual(123, om.GetValue(o, "Int32")); | |
40 Assert.AreEqual(de, om.GetValue(o, "Dow1")); | |
41 Assert.AreEqual(de, om.GetValue(o, "Dow2")); | |
42 Assert.IsTrue (Math.Abs(123.57 - (float)om.GetValue(o, "Float")) < 0.0001); | |
43 | |
44 Assert.IsNull(om.GetValue(o, "blah-blah-blah")); | |
45 } | |
46 | |
47 public class AnsiStringObject | |
48 { | |
49 [MemberMapper(typeof(AnsiStringNumberMapper))] | |
50 public string ansi; | |
51 public string unicode; | |
52 } | |
53 | |
54 internal class AnsiStringNumberMapper : MemberMapper | |
55 { | |
56 public override void Init(MapMemberInfo mapMemberInfo) | |
57 { | |
58 mapMemberInfo.DbType = DbType.AnsiString; | |
59 base.Init(mapMemberInfo); | |
60 } | |
61 } | |
62 | |
63 #if !SQLCE | |
64 [Test] | |
65 #endif | |
66 public void ProvideCustomDBTypeTest() | |
67 { | |
68 AnsiStringObject obj = new AnsiStringObject(); | |
69 obj.ansi = "ansi"; | |
70 obj.unicode = "unicode"; | |
71 | |
72 IDbDataParameter[] parametrs = new DbManager().CreateParameters( obj ); | |
73 | |
74 Assert.AreEqual(2, parametrs.Length); | |
75 Assert.AreEqual(DbType.String, parametrs[1].DbType); | |
76 | |
77 #if !FIREBIRD | |
78 // AnsiString is not supported by FB. | |
79 // | |
80 Assert.AreEqual(DbType.AnsiString, parametrs[0].DbType); | |
81 #endif | |
82 } | |
83 | |
84 public class Object2 | |
85 { | |
86 public short? Int16; | |
87 public int? Int32; | |
88 public long? Int64; | |
89 public float? Float; | |
90 public Guid? Guid; | |
91 public DayOfWeek? Dow1; | |
92 public DayOfWeek? Dow2; | |
93 } | |
94 | |
95 [Test] | |
96 public void NullableMemberTest() | |
97 { | |
98 Object2 o = new Object2(); | |
99 | |
100 short? s = 125; | |
101 Guid g = Guid.NewGuid(); | |
102 DayOfWeek de = DayOfWeek.Thursday; | |
103 int di = (int)de; | |
104 | |
105 ObjectMapper<Object2>.SetValue(o, "Int16", s); | |
106 ObjectMapper<Object2>.SetValue(o, "Int32", 123.56); | |
107 ObjectMapper<Object2>.SetValue(o, "Int64", null); | |
108 ObjectMapper<Object2>.SetValue(o, "Float", 123.57.ToString()); | |
109 ObjectMapper<Object2>.SetValue(o, "Guid", (Guid?)g); | |
110 ObjectMapper<Object2>.SetValue(o, "Guid", g); | |
111 ObjectMapper<Object2>.SetValue(o, "Dow1", de); | |
112 ObjectMapper<Object2>.SetValue(o, "Dow1", (DayOfWeek?)de); | |
113 ObjectMapper<Object2>.SetValue(o, "Dow2", di); | |
114 | |
115 Assert.AreEqual(125, o.Int16); | |
116 Assert.AreEqual(123, o.Int32); | |
117 Assert.IsNull ( o.Int64); | |
118 Assert.AreEqual(g, o.Guid); | |
119 Assert.AreEqual(de, o.Dow1); | |
120 Assert.AreEqual(de, o.Dow2); | |
121 Assert.IsTrue (Math.Abs(123.57 - o.Float.Value) < 0.0001); | |
122 | |
123 Assert.AreEqual(125, ObjectMapper<Object2>.GetValue(o, "Int16")); | |
124 Assert.AreEqual(123, ObjectMapper<Object2>.GetValue(o, "Int32")); | |
125 Assert.IsNull ( ObjectMapper<Object2>.GetValue(o, "Int64")); | |
126 Assert.AreEqual(g, ObjectMapper<Object2>.GetValue(o, "Guid")); | |
127 Assert.AreEqual(de, ObjectMapper<Object2>.GetValue(o, "Dow1")); | |
128 Assert.AreEqual(de, ObjectMapper<Object2>.GetValue(o, "Dow2")); | |
129 Assert.IsTrue (Math.Abs(123.57 - (float)ObjectMapper<Object2>.GetValue(o, "Float")) < 0.0001); | |
130 } | |
131 | |
132 public class Object3 | |
133 { | |
134 public SqlInt32 Int32; | |
135 public SqlSingle Single; | |
136 } | |
137 | |
138 | |
139 [Test] | |
140 // fixes test fail due to use of "," vs "." in numbers parsing for some cultures | |
141 [SetCulture("")] | |
142 public void SqlTypeMemberTest() | |
143 { | |
144 ObjectMapper om = Map.GetObjectMapper(typeof(Object3)); | |
145 | |
146 Object3 o = new Object3(); | |
147 | |
148 om.SetValue(o, "Int32", 123.56); | |
149 om.SetValue(o, "Single", 123.57.ToString(CultureInfo.InvariantCulture)); | |
150 | |
151 Assert.AreEqual(123, o.Int32. Value); | |
152 Assert.AreEqual(123.57f, o.Single.Value); | |
153 | |
154 Assert.AreEqual(123, om.GetValue(o, "Int32")); | |
155 Assert.AreEqual(123.57f, om.GetValue(o, "Single")); | |
156 } | |
157 | |
158 public interface IClassInterface | |
159 { | |
160 IClassInterface classInterface { get; set;} | |
161 } | |
162 | |
163 public class ClassInterface : IClassInterface | |
164 { | |
165 private IClassInterface _ici; | |
166 | |
167 [MapIgnore(false)] | |
168 public IClassInterface classInterface | |
169 { | |
170 get { return _ici; } | |
171 set { _ici = value; } | |
172 } | |
173 } | |
174 | |
175 [Test] | |
176 public void DerivedTypeTest() | |
177 { | |
178 IClassInterface ici = new ClassInterface(); | |
179 ObjectMapper om = Map.GetObjectMapper(ici.GetType()); | |
180 MemberMapper mm = om["classInterface"]; | |
181 mm.SetValue(ici, new ClassInterface()); | |
182 } | |
183 | |
184 public class Class1 | |
185 { | |
186 int _int32 = 0; | |
187 [MapField(Storage = "_int32")] | |
188 public int Int32 | |
189 { | |
190 get { return _int32; } | |
191 } | |
192 } | |
193 | |
194 [Test] | |
195 public void MapToStorageTest() | |
196 { | |
197 Class1 o = new Class1(); | |
198 ObjectMapper om = Map.GetObjectMapper(o.GetType()); | |
199 MemberMapper mm = om["Int32"]; | |
200 mm.SetValue(o, 5); | |
201 | |
202 Assert.AreEqual(5, o.Int32); | |
203 } | |
204 } | |
205 } |