DynaTests.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. using qdr.fnd.core.test.Object.Fake;
  2. using Quadarax.Foundation.Core.Object.Dynamic;
  3. namespace qdr.fnd.core.test.Object
  4. {
  5. class DynaTests
  6. {
  7. private const string PROP_A = "A";
  8. private const string PROP_B = "B";
  9. [Test(TestOf = typeof(Dyna))]
  10. public void DynaConstructorsCollectionOk()
  11. {
  12. var props = CreateProperties();
  13. var dyna = new Dyna(CreateProperties());
  14. Assert.That(dyna.Properties.Length, Is.EqualTo(props.Count()));
  15. }
  16. [Test(TestOf = typeof(Dyna))]
  17. public void DynaConstructorsTypeOk()
  18. {
  19. var dyna = new Dyna(typeof(IDinaFake));
  20. Assert.That(dyna.Properties.Length, Is.EqualTo(2));
  21. }
  22. [Test(TestOf = typeof(Dyna))]
  23. public void DynaSetGetPropertyStringOk()
  24. {
  25. var props = CreateProperties();
  26. var dyna = new Dyna(CreateProperties());
  27. dyna[PROP_A] = PROP_A;
  28. Assert.That(dyna.GetValue<string>(PROP_A), Is.EqualTo(PROP_A));
  29. Assert.That(dyna.GetValue<int?>(PROP_B), Is.EqualTo(null));
  30. }
  31. [Test(TestOf = typeof(Dyna))]
  32. public void DynaSetGetPropertyStringFail()
  33. {
  34. var props = CreateProperties();
  35. var dyna = new Dyna(CreateProperties());
  36. // ReSharper disable once ObjectCreationAsStatement
  37. Assert.Throws<ArgumentOutOfRangeException>(() => dyna[PROP_A + PROP_B] = PROP_A);
  38. }
  39. [Test(TestOf = typeof(Dyna))]
  40. public void DynaClearOk()
  41. {
  42. var props = CreateProperties();
  43. var dyna = new Dyna(CreateProperties());
  44. dyna[PROP_A] = PROP_A;
  45. Assert.That(dyna.GetValue<string>(PROP_A), Is.EqualTo(PROP_A));
  46. dyna.Clear();
  47. Assert.That(dyna.GetValue<int?>(PROP_A), Is.EqualTo(null));
  48. }
  49. [Test(TestOf = typeof(Dyna))]
  50. public void DynaTrackingOk()
  51. {
  52. var props = CreateProperties();
  53. var dyna = new Dyna(CreateProperties());
  54. dyna[PROP_A] = PROP_A;
  55. Assert.That(dyna.ChangedProperties.Length, Is.EqualTo(1));
  56. Assert.That(dyna.ChangedProperties.First(), Is.EqualTo(PROP_A));
  57. dyna[PROP_A] = null;
  58. Assert.That(dyna.ChangedProperties.Length, Is.EqualTo(0));
  59. dyna[PROP_A] = PROP_A;
  60. dyna[PROP_A] = PROP_B;
  61. Assert.That(dyna.ChangedProperties.Length, Is.EqualTo(1));
  62. Assert.That(dyna.ChangedProperties.First(), Is.EqualTo(PROP_A));
  63. dyna[PROP_A] = PROP_A;
  64. dyna.TrackChanges();
  65. Assert.That(dyna.ChangedProperties.Length, Is.EqualTo(0));
  66. dyna[PROP_A] = PROP_B;
  67. dyna[PROP_A] = PROP_A;
  68. Assert.That(dyna.ChangedProperties.Length, Is.EqualTo(0));
  69. dyna.Clear();
  70. Assert.That(dyna.ChangedProperties.Length, Is.EqualTo(0));
  71. }
  72. [Test(TestOf = typeof(Dyna))]
  73. public void DynaCloneOk()
  74. {
  75. var props = CreateProperties();
  76. var dynaSrc = new Dyna(CreateProperties());
  77. dynaSrc[PROP_A] = PROP_A;
  78. dynaSrc[PROP_B] = PROP_B;
  79. var dynaClone = dynaSrc.Clone() as Dyna;
  80. Assert.That(dynaClone.ChangedProperties.Length, Is.EqualTo(0));
  81. Assert.That(dynaClone[PROP_A], Is.EqualTo(PROP_A));
  82. Assert.That(dynaClone[PROP_B], Is.EqualTo(PROP_B));
  83. Assert.That(dynaClone.IsEquals(dynaSrc), Is.True);
  84. }
  85. [Test(TestOf = typeof(Dyna))]
  86. public void DynaCopyToOk()
  87. {
  88. var props = CreateProperties();
  89. var dynaSrc = new Dyna(CreateProperties());
  90. dynaSrc[PROP_A] = PROP_A;
  91. dynaSrc[PROP_B] = PROP_B;
  92. var dynaClone = new Dyna(CreateProperties());
  93. dynaClone[PROP_A] = PROP_B;
  94. dynaClone[PROP_B] = PROP_A;
  95. dynaClone.CopyTo(dynaSrc);
  96. Assert.That(dynaClone[PROP_A], Is.EqualTo(PROP_B));
  97. Assert.That(dynaClone[PROP_B], Is.EqualTo(PROP_A));
  98. Assert.That(dynaClone.IsSame(dynaSrc), Is.True);
  99. }
  100. private IEnumerable<Dyna.DynaProperty> CreateProperties()
  101. {
  102. var proCol = new List<Dyna.DynaProperty>();
  103. proCol.Add(new Dyna.DynaProperty(PROP_A, typeof(string), DynaPropertyAccessability.Public, DynaPropertyAccessability.Public));
  104. proCol.Add(new Dyna.DynaProperty(PROP_B, typeof(int), DynaPropertyAccessability.Public, DynaPropertyAccessability.Public));
  105. return proCol;
  106. }
  107. }
  108. }