annotate UnitTests/CS/EditableObjects/EditableObjectTest.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
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.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Xml;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using BLToolkit.EditableObjects;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using BLToolkit.Mapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using BLToolkit.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 using BLToolkit.TypeBuilder;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 namespace EditableObjects
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 public class EditableObjectTest
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 public class Source
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 public int ID = 10;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 public string Name = "20";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 public XmlDocument Xml;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 public Source()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 Xml = new XmlDocument();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 Xml.LoadXml("<test/>");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 public abstract class Dest: EditableObject
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 public string ChangedPropertyName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 public abstract int ID { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 public abstract string Name { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 public abstract XmlDocument Xml { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 protected override void OnPropertyChanged(string propertyName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 ChangedPropertyName = propertyName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 if (propertyName == "ID")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 Assert.That(ID, Is.Not.EqualTo(0));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 else if (propertyName == "Xml")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 Assert.That(Xml.InnerXml, Is.Not.EqualTo("<test />"));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 public void Notification()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 Dest o = Map.ObjectToObject<Dest>(new Source());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 Assert.AreEqual("", o.ChangedPropertyName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 o.ID = 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 Assert.AreEqual("ID", o.ChangedPropertyName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 o.Xml.DocumentElement.AppendChild(o.Xml.CreateElement("el"));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 Assert.AreEqual("Xml", o.ChangedPropertyName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 public abstract class Object1: EditableObject<Object1>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 [MapField("ObjectId")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 public abstract int ID { get; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 public abstract short Field1 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 [MapValue(true, "Y")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 [MapValue(false, "N")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 public abstract bool Field2 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 [Parameter(2, 2, 2)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 public abstract DateTime? Field3 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 [Parameter(2L)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 public abstract long Field4 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 public abstract byte Field5 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 public abstract char Field6 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 public abstract ushort Field7 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 public abstract uint Field8 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 public abstract ulong Field9 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 public abstract sbyte Field10 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 public abstract float Field11 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 public abstract double Field12 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 [Parameter(3.08)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 public abstract decimal? Field13 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 public abstract string Field14 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 public abstract Guid Field15 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 public abstract DayOfWeek Field16 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 public abstract ulong? Field17 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 public abstract XmlDocument XmlField { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 public void TestCreate()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 Object1 o = Object1.CreateInstance();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 Assert.That(o.Field4, Is.EqualTo(2L));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 Assert.That(o.Field3, Is.EqualTo(new DateTime(2,2,2)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 Assert.That(o.Field13, Is.EqualTo(3.08m));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 Assert.IsFalse(o.IsDirty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 TypeAccessor<Object1>.Instance["ID"].SetValue(o, 1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 Assert.AreEqual(1, o.ID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 Assert.IsTrue (o.IsDirty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 Assert.IsTrue (o.IsDirtyMember("ID"));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 o.AcceptChanges();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 Assert.IsFalse (o.IsDirty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 o.Field16 = DayOfWeek.Saturday;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 Assert.AreEqual(DayOfWeek.Saturday, o.Field16);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 Assert.IsTrue (o.IsDirty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 Assert.IsTrue (o.IsDirtyMember("Field16"));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 o.AcceptChanges();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 Assert.IsFalse (o.IsDirty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 o.Field17 = 5;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 Assert.AreEqual(5, o.Field17);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 Assert.IsTrue (o.IsDirty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 Assert.IsTrue (o.IsDirtyMember("Field17"));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 o.AcceptChanges();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 Assert.IsFalse (o.IsDirty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 o.XmlField.LoadXml(@"<root><element attribute=""value""/></root>");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 Assert.IsTrue (o.IsDirty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 o.AcceptChanges();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 o.XmlField.SelectSingleNode("/root/element/@attribute").Value = "changed";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 Assert.IsTrue (o.IsDirty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 Assert.IsTrue (o.IsDirtyMember("XmlField"));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 o.AcceptChanges();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 Assert.IsFalse (o.IsDirty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 o.XmlField.SelectSingleNode("/root/element/@attribute").Value = "once again";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 o.XmlField = new XmlDocument();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 Assert.IsTrue (o.IsDirty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 public void TestRejectChangesNotification()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 Object1 o = Object1.CreateInstance();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 Console.WriteLine("o is dirty: " + o.IsDirty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 o.PropertyChanged += object_PropertyChanged;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 Console.WriteLine("Changing 3 fields");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 o.Field1 = 10;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 o.Field2 = !o.Field2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 o.Field3 = DateTime.Now;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 o.XmlField.LoadXml("<root foo=\"bar\"/>");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 o.XmlField.DocumentElement.Attributes.RemoveAll();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 o.XmlField.DocumentElement.Attributes.Append(o.XmlField.CreateAttribute("attr"));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 Console.WriteLine("Dirty Members");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 PropertyInfo[] dirtyMembers = o.GetDirtyMembers();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 Assert.AreEqual(4, dirtyMembers.Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 foreach (PropertyInfo dirtyMember in dirtyMembers)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 Console.WriteLine(dirtyMember.Name);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 Console.WriteLine("Rejecting field 1");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 o.RejectMemberChanges("Field1");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 o.RejectMemberChanges("XmlField");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 Console.WriteLine("Dirty Members");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 dirtyMembers = o.GetDirtyMembers();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 Assert.AreEqual(2, dirtyMembers.Length);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 foreach (PropertyInfo dirtyMember in dirtyMembers)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 Console.WriteLine(dirtyMember.Name);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 Console.WriteLine("Rejecting all changes");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 o.RejectChanges();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 Console.WriteLine("Dirty Members");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 dirtyMembers = o.GetDirtyMembers();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 Assert.AreEqual(dirtyMembers.Length, 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 foreach (PropertyInfo dirtyMember in dirtyMembers)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 Console.WriteLine(dirtyMember.Name);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 private static void object_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 Console.WriteLine("Property Changed: " + e.PropertyName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 public void IsDirtyTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 Object1 o = Object1.CreateInstance();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 o.Field1 = 10;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 o.Field2 = !o.Field2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 o.Field3 = DateTime.Now;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 o.AcceptChanges();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 Object1 c = (Object1)((ICloneable)o).Clone();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 Assert.IsFalse(o.IsDirty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 Assert.IsFalse(c.IsDirty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 o.Field1 = 100;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 c = (Object1)((ICloneable)o).Clone();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 Assert.IsTrue(o.IsDirty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 Assert.IsTrue(c.IsDirty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 Assert.IsTrue(o.IsDirtyMember("Field1"));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 Assert.IsTrue(c.IsDirtyMember("Field1"));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 Assert.IsFalse(o.IsDirtyMember("Field2"));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 Assert.IsFalse(c.IsDirtyMember("Field2"));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 public class TestClass
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 public int ID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 public string Str;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 public struct TestStruct
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 public int ID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 public string Str;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 public abstract class TestEditableObject : EditableObject
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 public abstract int ID { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 public static TestEditableObject CreateInstance()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 return (TestEditableObject)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 TypeAccessor.CreateInstanceEx(typeof(TestEditableObject), null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 public void EqualsTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 TestClass classInst1 = new TestClass();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 TestClass classInst2 = new TestClass();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 TestStruct structInst1 = new TestStruct();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 TestStruct structInst2 = new TestStruct();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 TestEditableObject editableInst1 = TestEditableObject.CreateInstance();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263 TestEditableObject editableInst2 = TestEditableObject.CreateInstance();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 TestEditableObject editableInst3 = editableInst1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 classInst1 .ID = classInst2 .ID = 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 structInst1 .ID = structInst2 .ID = 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 editableInst1.ID = editableInst2.ID = 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 TestStruct structInst3 = structInst1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 TestClass classInst3 = classInst1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273 Assert.IsTrue(Equals(structInst1, structInst2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274 Assert.IsTrue(Equals(structInst1, structInst3));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275 Assert.IsTrue(Equals(structInst2, structInst3));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277 Assert.IsFalse(Equals(classInst1, classInst2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278 Assert.IsFalse(Equals(editableInst1, editableInst2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280 Assert.IsTrue (Equals(classInst1, classInst3));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 Assert.IsTrue (Equals(editableInst1, editableInst3));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283 Assert.IsFalse(Equals(classInst2, classInst3));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284 Assert.IsFalse(Equals(editableInst2, editableInst3));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288 public void EqualsSpeedTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
289 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
290 TestClass eo1Inst1 = new TestClass();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
291 TestClass eo1Inst3 = eo1Inst1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
292
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
293 TestEditableObject eo2Inst1 = TestEditableObject.CreateInstance();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
294 TestEditableObject eo2Inst3 = eo2Inst1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
295
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
296 eo1Inst1.ID = 1; eo1Inst1.Equals(eo1Inst3);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
297 eo2Inst1.ID = 1; eo2Inst1.Equals(eo2Inst3);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
298
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
299 long startTicks = DateTime.Now.Ticks;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
300 for (int i = 0; i < 100000; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
301 eo1Inst1.Equals(eo1Inst3);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
302 Console.WriteLine(".NET: {0}", DateTime.Now.Ticks - startTicks);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
303
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
304 startTicks = DateTime.Now.Ticks;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
305 for (int i = 0; i < 100000; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
306 eo2Inst1.Equals(eo2Inst3);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
307 Console.WriteLine("BLT: {0}", DateTime.Now.Ticks - startTicks);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
308 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
309
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
310 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
311 public void GetHashCodeSpeedTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
312 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
313 TestClass eo1Inst1 = new TestClass();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
314 TestEditableObject eo2Inst1 = TestEditableObject.CreateInstance();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
315
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
316 eo1Inst1.ID = 1; eo1Inst1.GetHashCode();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
317 eo2Inst1.ID = 1; eo2Inst1.GetHashCode();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
318
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
319 long startTicks = DateTime.Now.Ticks;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
320 for (int i = 0; i < 100000; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
321 eo1Inst1.GetHashCode();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
322 Console.WriteLine(".NET: {0}", DateTime.Now.Ticks - startTicks);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
323
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
324 startTicks = DateTime.Now.Ticks;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
325 for (int i = 0; i < 100000; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
326 eo2Inst1.GetHashCode();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
327 Console.WriteLine("BLT: {0}", DateTime.Now.Ticks - startTicks);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
328 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
329
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
330 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
331 }