annotate UnitTests/CS/Mapping/MemberMapperTest.cs @ 4:f757da6161a1

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