Mercurial > pub > bltoolkit
comparison UnitTests/CS/EditableObjects/EditableArrayListTest.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.ComponentModel; | |
3 using System.IO; | |
4 using System.Runtime.Serialization.Formatters.Binary; | |
5 using System.Windows.Forms; | |
6 | |
7 using NUnit.Framework; | |
8 | |
9 using BLToolkit.EditableObjects; | |
10 using BLToolkit.Reflection; | |
11 | |
12 namespace EditableObjects | |
13 { | |
14 [Serializable] | |
15 public abstract class SerializableObject : EditableObject | |
16 { | |
17 public abstract int ID { get; set; } | |
18 public abstract Guid UUID { get; set; } | |
19 public abstract string Name { get; set; } | |
20 | |
21 public abstract EditableList<string> Array { get; set; } | |
22 } | |
23 | |
24 [TestFixture] | |
25 public class EditableArrayListTest | |
26 { | |
27 public abstract class EditableTestObject : EditableObject | |
28 { | |
29 public abstract int ID { get; set; } | |
30 public abstract string Name { get; set; } | |
31 public abstract int Seconds { get; set; } | |
32 | |
33 public static EditableTestObject CreateInstance() | |
34 { | |
35 return (EditableTestObject)TypeAccessor.CreateInstance(typeof(EditableTestObject)); | |
36 } | |
37 | |
38 public static EditableTestObject CreateInstance(int id, string name, int seconds) | |
39 { | |
40 var instance = CreateInstance(); | |
41 | |
42 instance.ID = id; | |
43 instance.Name = name; | |
44 instance.Seconds = seconds; | |
45 | |
46 return instance; | |
47 } | |
48 | |
49 public override string ToString() | |
50 { | |
51 return string.Format("EditableTestObject - ID:({0}) Name: ({1}) Seconds({2})", ID, Name, Seconds); | |
52 } | |
53 } | |
54 | |
55 private static readonly EditableTestObject[] _testObjects = new EditableTestObject[] | |
56 { | |
57 EditableTestObject.CreateInstance(0, "Smith", 24), | |
58 EditableTestObject.CreateInstance(1, "John", 22), | |
59 EditableTestObject.CreateInstance(2, "Anna", 48), | |
60 EditableTestObject.CreateInstance(3, "Tim", 56), | |
61 EditableTestObject.CreateInstance(4, "Xiniu", 39), | |
62 EditableTestObject.CreateInstance(5, "Kirill", 30) | |
63 }; | |
64 | |
65 public EditableArrayListTest() | |
66 { | |
67 _testList = new EditableArrayList(typeof(EditableTestObject)); | |
68 _testList.ListChanged += TestList_ListChanged; | |
69 } | |
70 | |
71 private readonly EditableArrayList _testList; | |
72 | |
73 private void TestList_ListChanged(object sender, ListChangedEventArgs e) | |
74 { | |
75 var array = sender as EditableArrayList; | |
76 | |
77 Assert.IsNotNull(array); | |
78 if (e.ListChangedType != ListChangedType.Reset) | |
79 Assert.That(array.IsDirty); | |
80 | |
81 if(e.ListChangedType == ListChangedType.ItemAdded) | |
82 { | |
83 var o = array[e.NewIndex]; | |
84 | |
85 Assert.IsNotNull(o); | |
86 Assert.That(array.NewItems.Contains(o)); | |
87 } | |
88 | |
89 if (e.ListChangedType != ListChangedType.ItemDeleted && e.ListChangedType != ListChangedType.Reset) | |
90 Console.WriteLine("ListChanged (ID:{3}). Type: {0}, OldIndex: {1}, NewIndex: {2}", e.ListChangedType, e.OldIndex, e.NewIndex, (e.NewIndex >= 0 && e.NewIndex < _testList.Count) ? ((EditableTestObject)_testList[e.NewIndex]).ID : -1); | |
91 else | |
92 Console.WriteLine("ListChanged (ID:???). Type: {0}, OldIndex: {1}, NewIndex: {2}", e.ListChangedType, e.OldIndex, e.NewIndex); | |
93 } | |
94 | |
95 [Test] | |
96 public void TestAdd() | |
97 { | |
98 Console.WriteLine("--- TestAdd ---"); | |
99 _testList.Clear(); | |
100 _testList.RemoveSort(); | |
101 | |
102 for (var i = 0; i < 3; i++) | |
103 _testList.Add(_testObjects[i]); | |
104 | |
105 Assert.AreEqual(_testList.Count, 3); | |
106 Assert.AreEqual(_testList[0], _testObjects[0]); | |
107 Assert.AreEqual(_testList[1], _testObjects[1]); | |
108 Assert.AreEqual(_testList[2], _testObjects[2]); | |
109 | |
110 var _subArray = new EditableTestObject[3]; | |
111 | |
112 for (var i = 3; i < _testObjects.Length; i++) | |
113 _subArray[i-3] = _testObjects[i]; | |
114 | |
115 _testList.AddRange(_subArray); | |
116 Assert.AreEqual(_testList.Count, 6); | |
117 | |
118 for (var i = 3; i < _testObjects.Length; i++) | |
119 Assert.AreEqual(_subArray[i - 3], _testObjects[i]); | |
120 | |
121 PrintList(); | |
122 | |
123 _testList.Clear(); | |
124 } | |
125 | |
126 [Test] | |
127 public void TestAddNew() | |
128 { | |
129 var list = new EditableList<EditableTestObject>(); | |
130 var listChangedFired = false; | |
131 | |
132 list.ListChanged += (sender, args) => listChangedFired = true; | |
133 | |
134 list.AddNew(); | |
135 Assert.That(listChangedFired); | |
136 Assert.AreEqual(1, list.Count); | |
137 Assert.AreEqual(1, list.NewItems.Count); | |
138 | |
139 listChangedFired = false; | |
140 list.CancelNew(0); | |
141 Assert.That(listChangedFired); | |
142 Assert.IsEmpty(list); | |
143 Assert.IsEmpty(list.NewItems); | |
144 } | |
145 | |
146 [Test] | |
147 public void TestInsert() | |
148 { | |
149 Console.WriteLine("--- TestInsert ---"); | |
150 _testList.Clear(); | |
151 _testList.RemoveSort(); | |
152 | |
153 for (var i = 0; i < 3; i++) | |
154 _testList.Insert(0, _testObjects[i]); | |
155 | |
156 Assert.AreEqual(_testList.Count, 3); | |
157 Assert.AreEqual(_testList[0], _testObjects[2]); | |
158 Assert.AreEqual(_testList[1], _testObjects[1]); | |
159 Assert.AreEqual(_testList[2], _testObjects[0]); | |
160 | |
161 var _subArray = new EditableTestObject[3]; | |
162 | |
163 for (var i = 3; i < _testObjects.Length; i++) | |
164 _subArray[i-3] = _testObjects[i]; | |
165 | |
166 _testList.InsertRange(0, _subArray); | |
167 Assert.AreEqual(_testList.Count, 6); | |
168 | |
169 Assert.AreEqual(_testList[0], _testObjects[3]); | |
170 Assert.AreEqual(_testList[1], _testObjects[4]); | |
171 Assert.AreEqual(_testList[2], _testObjects[5]); | |
172 | |
173 PrintList(); | |
174 | |
175 _testList.Clear(); | |
176 } | |
177 | |
178 [Test] | |
179 public void TestRemove() | |
180 { | |
181 Console.WriteLine("--- TestRemove ---"); | |
182 | |
183 _testList.Clear(); | |
184 _testList.RemoveSort(); | |
185 _testList.AddRange(_testObjects); | |
186 | |
187 _testList.RemoveAt(2); | |
188 Assert.AreEqual(_testList.Count, 5); | |
189 Assert.IsEmpty(_testList.DelItems); | |
190 | |
191 _testList.AcceptChanges(); | |
192 Assert.IsEmpty(_testList.NewItems); | |
193 | |
194 _testList.Remove(_testList[0]); | |
195 Assert.AreEqual(_testList.Count, 4); | |
196 Assert.IsNotEmpty(_testList.DelItems); | |
197 | |
198 _testList.Clear(); | |
199 Assert.AreEqual(_testList.Count, 0); | |
200 } | |
201 | |
202 [Test] | |
203 public void TestRemoveRange() | |
204 { | |
205 Console.WriteLine("--- TestRemoveRange ---"); | |
206 | |
207 _testList.Clear(); | |
208 _testList.RemoveSort(); | |
209 _testList.AcceptChanges(); | |
210 _testList.AddRange(_testObjects); | |
211 | |
212 Assert.AreEqual(6, _testList.Count); | |
213 Assert.AreEqual(6, _testList.NewItems.Count); | |
214 Assert.AreEqual(0, _testList.DelItems.Count); | |
215 | |
216 _testList.RemoveRange(1, 3); | |
217 | |
218 Assert.AreEqual(3, _testList.Count); | |
219 Assert.AreEqual(3, _testList.NewItems.Count); | |
220 Assert.AreEqual(0, _testList.DelItems.Count); | |
221 Assert.AreEqual(0, ((EditableTestObject)_testList[0]).ID); | |
222 Assert.AreEqual(4, ((EditableTestObject)_testList[1]).ID); | |
223 | |
224 _testList.AcceptChanges(); | |
225 | |
226 Assert.AreEqual(3, _testList.Count); | |
227 Assert.AreEqual(0, _testList.NewItems.Count); | |
228 Assert.AreEqual(0, _testList.DelItems.Count); | |
229 | |
230 _testList.RemoveRange(0, 1); | |
231 | |
232 Assert.AreEqual(2, _testList.Count); | |
233 Assert.AreEqual(0, _testList.NewItems.Count); | |
234 Assert.AreEqual(1, _testList.DelItems.Count); | |
235 | |
236 _testList.Clear(); | |
237 | |
238 Assert.AreEqual(0, _testList.Count); | |
239 Assert.AreEqual(0, _testList.NewItems.Count); | |
240 Assert.AreEqual(3, _testList.DelItems.Count); | |
241 | |
242 _testList.AcceptChanges(); | |
243 | |
244 Assert.AreEqual(0, _testList.Count); | |
245 Assert.AreEqual(0, _testList.NewItems.Count); | |
246 Assert.AreEqual(0, _testList.DelItems.Count); | |
247 } | |
248 | |
249 [Test] | |
250 public void TestSortedAdd() | |
251 { | |
252 Console.WriteLine("--- TestSortedAdd ---"); | |
253 _testList.Clear(); | |
254 _testList.RemoveSort(); | |
255 _testList.ApplySort(_testList.GetItemProperties(null)["Seconds"], ListSortDirection.Descending); | |
256 | |
257 for (var i = 0; i < 3; i++) | |
258 _testList.Add(_testObjects[i]); | |
259 | |
260 Assert.AreEqual(_testList.Count, 3); | |
261 Assert.AreEqual(_testList[1], _testObjects[0]); | |
262 Assert.AreEqual(_testList[2], _testObjects[1]); | |
263 Assert.AreEqual(_testList[0], _testObjects[2]); | |
264 | |
265 var _subArray = new EditableTestObject[3]; | |
266 | |
267 for (var i = 3; i < _testObjects.Length; i++) | |
268 _subArray[i-3] = _testObjects[i]; | |
269 | |
270 _testList.AddRange(_subArray); | |
271 Assert.AreEqual(_testList.Count, 6); | |
272 | |
273 Assert.AreEqual(_testList[0], _testObjects[3]); | |
274 Assert.AreEqual(_testList[2], _testObjects[4]); | |
275 Assert.AreEqual(_testList[3], _testObjects[5]); | |
276 | |
277 PrintList(); | |
278 | |
279 _testList.Clear(); | |
280 Assert.AreEqual(_testList.Count, 0); | |
281 | |
282 _testList.ApplySort(_testList.GetItemProperties(null)["Seconds"], ListSortDirection.Ascending); | |
283 | |
284 for (var i = 0; i < 3; i++) | |
285 _testList.Add(_testObjects[i]); | |
286 | |
287 Assert.AreEqual(_testList.Count, 3); | |
288 Assert.AreEqual(_testList[1], _testObjects[0]); | |
289 Assert.AreEqual(_testList[0], _testObjects[1]); | |
290 Assert.AreEqual(_testList[2], _testObjects[2]); | |
291 | |
292 _testList.AddRange(_subArray); | |
293 Assert.AreEqual(_testList.Count, 6); | |
294 | |
295 Assert.AreEqual(_testList[5], _testObjects[3]); | |
296 Assert.AreEqual(_testList[3], _testObjects[4]); | |
297 Assert.AreEqual(_testList[2], _testObjects[5]); | |
298 | |
299 PrintList(); | |
300 | |
301 _testList.Clear(); | |
302 } | |
303 | |
304 [Test] | |
305 public void TestSortedInsert() | |
306 { | |
307 Console.WriteLine("--- TestSortedInsert ---"); | |
308 _testList.Clear(); | |
309 _testList.RemoveSort(); | |
310 _testList.ApplySort(_testList.GetItemProperties(null)["Seconds"], ListSortDirection.Descending); | |
311 | |
312 for (var i = 0; i < 3; i++) | |
313 _testList.Insert(0, _testObjects[i]); | |
314 | |
315 Assert.AreEqual(_testList.Count, 3); | |
316 Assert.AreEqual(_testList[0], _testObjects[2]); | |
317 Assert.AreEqual(_testList[1], _testObjects[0]); | |
318 Assert.AreEqual(_testList[2], _testObjects[1]); | |
319 | |
320 var _subArray = new EditableTestObject[3]; | |
321 | |
322 for (var i = 3; i < _testObjects.Length; i++) | |
323 _subArray[i-3] = _testObjects[i]; | |
324 | |
325 _testList.InsertRange(0, _subArray); | |
326 Assert.AreEqual(_testList.Count, 6); | |
327 | |
328 Assert.AreEqual(_testList[0], _testObjects[3]); | |
329 Assert.AreEqual(_testList[2], _testObjects[4]); | |
330 Assert.AreEqual(_testList[3], _testObjects[5]); | |
331 | |
332 PrintList(); | |
333 | |
334 _testList.Clear(); | |
335 Assert.AreEqual(_testList.Count, 0); | |
336 | |
337 _testList.ApplySort(_testList.GetItemProperties(null)["Seconds"], ListSortDirection.Ascending); | |
338 | |
339 for (var i = 0; i < 3; i++) | |
340 _testList.Insert(0, _testObjects[i]); | |
341 | |
342 Assert.AreEqual(_testList.Count, 3); | |
343 Assert.AreEqual(_testList[0], _testObjects[1]); | |
344 Assert.AreEqual(_testList[1], _testObjects[0]); | |
345 Assert.AreEqual(_testList[2], _testObjects[2]); | |
346 | |
347 _testList.InsertRange(0, _subArray); | |
348 Assert.AreEqual(_testList.Count, 6); | |
349 | |
350 Assert.AreEqual(_testList[2], _testObjects[5]); | |
351 Assert.AreEqual(_testList[3], _testObjects[4]); | |
352 Assert.AreEqual(_testList[5], _testObjects[3]); | |
353 | |
354 PrintList(); | |
355 | |
356 _testList.Clear(); | |
357 } | |
358 | |
359 [Test] | |
360 public void TestSortedPropertyChange() | |
361 { | |
362 Console.WriteLine("--- TestSortedPropertyChange ---"); | |
363 _testList.Clear(); | |
364 _testList.RemoveSort(); | |
365 _testList.ApplySort(_testList.GetItemProperties(null)["Seconds"], ListSortDirection.Descending); | |
366 _testList.AddRange(_testObjects); | |
367 | |
368 var eto = EditableTestObject.CreateInstance(6, "Dummy", 10); | |
369 | |
370 _testList.Add(eto); | |
371 Assert.AreEqual(_testList.Count, 7); | |
372 Assert.AreEqual(_testList[6], eto); | |
373 | |
374 eto.Seconds = 20; | |
375 Assert.AreEqual(_testList[6], eto); | |
376 | |
377 eto.Seconds = 23; | |
378 Assert.AreEqual(_testList[5], eto); | |
379 | |
380 eto.Seconds = 30; | |
381 Assert.AreEqual(_testList[4], eto); | |
382 | |
383 eto.Seconds = 40; | |
384 Assert.AreEqual(_testList[2], eto); | |
385 | |
386 eto.Seconds = 50; | |
387 Assert.AreEqual(_testList[1], eto); | |
388 | |
389 eto.Seconds = 60; | |
390 Assert.AreEqual(_testList[0], eto); | |
391 } | |
392 | |
393 private void PrintList() | |
394 { | |
395 Console.WriteLine("--- Print List ---"); | |
396 foreach (EditableTestObject o in _testList) | |
397 Console.WriteLine(o); | |
398 } | |
399 | |
400 [Test] | |
401 public void SerializationTest() | |
402 { | |
403 //Configuration.NotifyOnEqualSet = true; | |
404 | |
405 var test = TypeAccessor<SerializableObject>.CreateInstance(); | |
406 var stream = new MemoryStream(); | |
407 var bf = new BinaryFormatter(); | |
408 | |
409 bf.Serialize(stream, test); | |
410 | |
411 //Configuration.NotifyOnChangesOnly = false; | |
412 } | |
413 | |
414 //////[Test] Resharpe 8 issue | |
415 public void SerializationTest2() | |
416 { | |
417 //Configuration.NotifyOnChangesOnly = true; | |
418 | |
419 var list = new EditableList<SerializableObject> { TypeAccessor<SerializableObject>.CreateInstance() }; | |
420 | |
421 var formatter = new BinaryFormatter(); | |
422 | |
423 using (var stream = new MemoryStream()) | |
424 { | |
425 formatter.Serialize(stream, list); | |
426 stream.Position = 0; | |
427 | |
428 var result = formatter.Deserialize(stream); | |
429 | |
430 Assert.IsNotNull(result); | |
431 | |
432 var eal = (EditableList<SerializableObject>)result; | |
433 | |
434 Console.WriteLine(eal.Count); | |
435 | |
436 eal.ListChanged += eal_ListChanged; | |
437 | |
438 eal[0].ID = 0; | |
439 _notificationCount = 0; | |
440 eal[0].ID = -100; | |
441 eal[0].ID = -100; | |
442 eal[0].ID = -100; | |
443 eal[0].ID = -100; | |
444 eal[0].ID = -100; | |
445 eal[0].ID = -100; | |
446 | |
447 Console.WriteLine(eal.Count); | |
448 | |
449 //Assert.AreEqual(_notificationCount, 1); | |
450 } | |
451 | |
452 //Configuration.NotifyOnChangesOnly = false; | |
453 } | |
454 | |
455 private static int _notificationCount; | |
456 | |
457 static void eal_ListChanged(object sender, ListChangedEventArgs e) | |
458 { | |
459 Console.WriteLine(e.ListChangedType); | |
460 _notificationCount++; | |
461 } | |
462 | |
463 [Test] | |
464 public void SortTest() | |
465 { | |
466 var dataList = new EditableList<EditableTestObject> | |
467 { | |
468 EditableTestObject.CreateInstance(1, "John", 60), | |
469 EditableTestObject.CreateInstance(1, "John", 60), | |
470 EditableTestObject.CreateInstance(1, "John", 60), | |
471 EditableTestObject.CreateInstance(2, "Tester", 70), | |
472 EditableTestObject.CreateInstance(2, "Tester", 70), | |
473 EditableTestObject.CreateInstance(2, "Tester", 70), | |
474 EditableTestObject.CreateInstance(3, "Tester", 70), | |
475 EditableTestObject.CreateInstance(3, "Tester", 70), | |
476 EditableTestObject.CreateInstance(3, "Tester", 70) | |
477 }; | |
478 | |
479 var bindingSource = new BindingSource(dataList, null) { Sort = "ID" }; | |
480 var prev = 0; | |
481 | |
482 foreach (var o in dataList) | |
483 { | |
484 Assert.IsTrue(o.ID >= prev); | |
485 prev = o.ID; | |
486 } | |
487 | |
488 bindingSource[0] = EditableTestObject.CreateInstance(2, "John", 60); | |
489 | |
490 prev = 0; | |
491 | |
492 foreach (var o in dataList) | |
493 { | |
494 Assert.IsTrue(o.ID >= prev); | |
495 prev = o.ID; | |
496 } | |
497 } | |
498 | |
499 public class DerivedEditableList<T> : EditableList<T> | |
500 { | |
501 public event EventHandler OnListChangedCalled; | |
502 | |
503 protected void OnOnListChangedCalled() | |
504 { | |
505 if (OnListChangedCalled != null) | |
506 OnListChangedCalled(this, EventArgs.Empty); | |
507 } | |
508 | |
509 protected override void OnListChanged(ListChangedEventArgs e) | |
510 { | |
511 OnOnListChangedCalled(); | |
512 base.OnListChanged(e); | |
513 } | |
514 } | |
515 | |
516 | |
517 [Test] | |
518 public void DerivedOnListChanged() | |
519 { | |
520 var called = false; | |
521 var list = new DerivedEditableList<int>(); | |
522 | |
523 list.OnListChangedCalled += (sender, args) => called = true; | |
524 | |
525 list.Add(1); | |
526 | |
527 Assert.IsTrue(called); | |
528 Assert.AreEqual(1, list.NewItems.Count); | |
529 Assert.AreEqual(1, list.Count); | |
530 Assert.AreEqual(0, list.DelItems.Count); | |
531 | |
532 called = false; | |
533 list.RemoveAt(0); | |
534 | |
535 Assert.IsTrue(called); | |
536 Assert.AreEqual(0, list.NewItems.Count); | |
537 Assert.AreEqual(0, list.Count); | |
538 Assert.AreEqual(0, list.DelItems.Count); | |
539 } | |
540 | |
541 [Test] | |
542 public void CloneTest() | |
543 { | |
544 var src = new EditableList<int> { 1, 2, 3 }; | |
545 var clone = (EditableList<int>)src.Clone(); | |
546 | |
547 Assert.AreEqual(src.Count, clone.Count); | |
548 Assert.AreEqual(src.NewItems.Count, clone.NewItems.Count); | |
549 Assert.AreEqual(src.DelItems.Count, clone.DelItems.Count); | |
550 | |
551 src.AcceptChanges(); | |
552 | |
553 clone = (EditableList<int>)src.Clone(); | |
554 | |
555 Assert.AreEqual(src.Count, clone.Count); | |
556 Assert.AreEqual(src.NewItems.Count, clone.NewItems.Count); | |
557 Assert.AreEqual(src.DelItems.Count, clone.DelItems.Count); | |
558 | |
559 src.RemoveAt(1); | |
560 | |
561 clone = (EditableList<int>)src.Clone(); | |
562 | |
563 Assert.AreEqual(src.Count, clone.Count); | |
564 Assert.AreEqual(src.NewItems.Count, clone.NewItems.Count); | |
565 Assert.AreEqual(src.DelItems.Count, clone.DelItems.Count); | |
566 } | |
567 | |
568 [Test] | |
569 public void CreateCleanTest() | |
570 { | |
571 var list = new EditableList<int>(new[] { 1, 2, 3 }); | |
572 | |
573 Assert.IsFalse(list.IsDirty); | |
574 | |
575 Assert.AreEqual(3, list.Count); | |
576 Assert.AreEqual(0, list.NewItems.Count); | |
577 Assert.AreEqual(0, list.DelItems.Count); | |
578 | |
579 list = new EditableList<int>(new int[] { }); | |
580 | |
581 Assert.IsFalse(list.IsDirty); | |
582 | |
583 Assert.AreEqual(0, list.Count); | |
584 Assert.AreEqual(0, list.NewItems.Count); | |
585 Assert.AreEqual(0, list.DelItems.Count); | |
586 } | |
587 | |
588 [Test] | |
589 public void IsDirtyTest() | |
590 { | |
591 var list = new EditableList<EditableTestObject>(); | |
592 | |
593 list.AddNew(); | |
594 list.AddNew(); | |
595 | |
596 Assert.IsTrue(list.IsDirty); | |
597 | |
598 list.AcceptChanges(); | |
599 | |
600 Assert.IsFalse(list.IsDirty); | |
601 | |
602 list[1].ID = 101; | |
603 | |
604 Assert.IsTrue(list[1].IsDirty); | |
605 Assert.IsTrue(list.IsDirty); | |
606 } | |
607 | |
608 [Test] | |
609 public void CreateWithDirtyTest() | |
610 { | |
611 var to = EditableTestObject.CreateInstance(); | |
612 | |
613 to.ID = 10; | |
614 | |
615 Assert.IsTrue(to.IsDirty); | |
616 | |
617 var list = new EditableList<EditableTestObject>(new[] { to }); | |
618 | |
619 Assert.IsTrue(to.IsDirty); | |
620 Assert.IsTrue(list.IsDirty); | |
621 } | |
622 } | |
623 } |