CompareItem.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. /*-------------------------------------------------------------------------
  2. * 功能描述:CompareItem
  3. * 作者:xulisong
  4. * 创建时间: 2019/6/28 15:44:52
  5. * 版本号:v1.0
  6. * -------------------------------------------------------------------------*/
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Diagnostics;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using FWindSoft.Data;
  14. using FWindSoft.Data.Compare;
  15. using FWindSoft.SystemExtensions;
  16. namespace Test.CompareTest
  17. {
  18. public class TestConverter : FlatObjectConverter
  19. {
  20. public override bool CanConvert(object obj, PickSetting setting)
  21. {
  22. return false;
  23. }
  24. protected override void WriteFlatObject(object obj, FlatObject flatObject, string prefix, PickSetting setting)
  25. {
  26. flatObject.AddValue(prefix, "ccc的converter测试纸");
  27. }
  28. }
  29. public class TestConverter2 : FlatObjectConverter
  30. {
  31. public override bool CanConvert(object obj, PickSetting setting)
  32. {
  33. return obj.GetType() == typeof(ConvertTestItem2);
  34. }
  35. protected override void WriteFlatObject(object obj, FlatObject flatObject, string prefix, PickSetting setting)
  36. {
  37. flatObject.AddValue(prefix, "ccc的TestConverter2测试纸");
  38. }
  39. }
  40. public class CompareItem
  41. {
  42. public string Name { get; set; }
  43. public int Age { get; set; }
  44. public ChildItem Child { get; set; }
  45. }
  46. public class ChildItem
  47. {
  48. public string Name { get; set; }
  49. public int Age { get; set; }
  50. }
  51. public class ListItem
  52. {
  53. public string Name { get; set; }
  54. public int Age { get; set; }
  55. }
  56. public class ItemList
  57. {
  58. public List<string> Names { get; set; }
  59. }
  60. public class InterItem : IFlatObject
  61. {
  62. public string Name { get; set; }
  63. public int Age { get; set; }
  64. public void AttachFlatObject(FlatObject flatObject, string prefix, PickSetting setting)
  65. {
  66. prefix = prefix ?? typeof(InterItem).FullName ;
  67. flatObject.AddValue(prefix + ".Name", Name);
  68. }
  69. }
  70. public class ConvertTestItem
  71. {
  72. [IgnoreFlatProperty]
  73. public string FirstName { get; set; }
  74. public string LastName { get; set; }
  75. [FlatProperty(ConverterType =typeof(TestConverter))]
  76. public string Age { get; set; }
  77. }
  78. public class ConvertTestItem2
  79. {
  80. public string FirstName { get; set; }
  81. public string LastName { get; set; }
  82. public string Age { get; set; }
  83. }
  84. public static class CompareItemTest
  85. {
  86. public static void Test()
  87. {
  88. PickSetting setting = new PickSetting() {Level = 2};
  89. CompareItem item1 = new CompareItem() {Name = "213", Age = 5};
  90. item1.Child = new ChildItem(){Name="Child",Age=29};
  91. var flag = FlatObject.Create(item1, setting);
  92. item1.Child.Age = 30;
  93. var flag2= FlatObject.Create(item1, setting);
  94. var test1=(bool)flag.Compare(flag2);
  95. Trace.WriteLineIf(test1, "test1测试错误");//level是1的时候相等
  96. var flagInt1 = FlatObject.Create(1);
  97. var flagInt2 = FlatObject.Create(1);
  98. var test2= (bool)flagInt1.Compare(flagInt2);
  99. Trace.WriteLineIf(test2 == false, "test2测试错误");
  100. PickSetting listSetting = new PickSetting() { Level = 1,ParseEnumerableObject=true };
  101. List<string> list1 = new List<string>() {"a", "b"};
  102. List<string> list2 = new List<string>() { "a", "b" };
  103. var flagList1 = FlatObject.Create(list1, listSetting);
  104. var flagList2 = FlatObject.Create(list2, listSetting);
  105. var test3 = (bool)flagList1.Compare(flagList2);
  106. Trace.WriteLineIf(test3 == false, "test3测试错误");
  107. List<ListItem> listItems1 = new List<ListItem>() {new ListItem() {Name = "cc", Age = 23}};
  108. List<ListItem> listItems2 = new List<ListItem>() { new ListItem() { Name = "cc", Age = 23 } };
  109. var flaglistItems1 = FlatObject.Create(listItems1, listSetting);
  110. var flaglistItems2 = FlatObject.Create(listItems2, listSetting);
  111. var test4 = (bool)flaglistItems2.Compare(flaglistItems1);
  112. Trace.WriteLineIf(test4, "test4测试错误");//解析1层不等,解析两层相等
  113. PickSetting listSetting2 = new PickSetting() { Level =2, ParseEnumerableObject = true };
  114. ItemList itemList1 = new ItemList() {Names = new List<string>() {"CC","BB"}};
  115. ItemList itemList2 = new ItemList() {Names = new List<string>() {"CC","BB1"}};
  116. var flagitemList1 = FlatObject.Create(itemList1, listSetting2);
  117. var flagitemList2 = FlatObject.Create(itemList2, listSetting2);
  118. var test5 = (bool)flagitemList2.Compare(flagitemList1);
  119. Trace.WriteLineIf(test5, "test5测试错误");
  120. InterItem interItem1 = new InterItem() { Name = "23123" };
  121. InterItem interItem2 = new InterItem() { Name = "13313" };
  122. var flaginterItem1 = FlatObject.Create(interItem1, listSetting2);
  123. var flaginterItem2 = FlatObject.Create(interItem2, listSetting2);
  124. var test6 = (bool)flaginterItem1.Compare(flaginterItem2);
  125. Trace.WriteLineIf(test6, "test6测试错误");
  126. var converter = typeof(TestConverter).CreateByDefault<FlatObjectConverter>();
  127. ConvertTestItem convertItem = new ConvertTestItem() { FirstName = "First", LastName = "Last", Age = "cc" };
  128. var flagconvertItem1 = FlatObject.Create(convertItem);
  129. var converterSettings= new PickSetting();
  130. converterSettings.Converters.Add(new TestConverter2());
  131. ConvertTestItem2 convertItem2 = new ConvertTestItem2() { FirstName = "First", LastName = "Last", Age = "cc" };
  132. var flagconvertItem2 = FlatObject.Create(convertItem2, converterSettings);
  133. }
  134. }
  135. }