/src/NHibernate.Test/NHSpecificTest/NH2583/MassTestingThreeOrTreesSideBySideFixture.cs

https://github.com/RogerKratz/nhibernate-core
C# | 166 lines | 139 code | 24 blank | 3 comment | 230 complexity | 23fda0a09ed9364f7c1328fbee4d21f9 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Linq.Expressions;
  5. using NHibernate.Linq;
  6. using NUnit.Framework;
  7. namespace NHibernate.Test.NHSpecificTest.NH2583
  8. {
  9. [TestFixture]
  10. public class MassTestingThreeOrTreesSideBySideFixture : AbstractMassTestingFixture
  11. {
  12. protected void RunTest<T1, T2, T3, T4, T5, T6, T7>(Expression<Func<MyBO, bool>> c1, Expression<Func<MyBO, bool>> c2, SetterTuple<T1, T2, T3, T4, T5, T6, T7> setters)
  13. {
  14. int r1 = RunTest(c1, setters);
  15. int r2 = RunTest(c2, setters);
  16. Assert.AreEqual(r1, r2);
  17. Assert.Greater(r1, 0);
  18. }
  19. protected override int TestAndAssert(Expression<Func<MyBO, bool>> condition, ISession session, IEnumerable<int> expectedIds)
  20. {
  21. var result = session.Query<MyBO>().Where(condition);
  22. AreEqual(expectedIds, result.Select(bo => bo.Id).ToArray());
  23. return expectedIds.Count();
  24. }
  25. // Condition pattern: (A || B) || (C || D), A || (B || (C || D))
  26. #region 5a. One path
  27. [Test]
  28. public void Test_xyP_in_A_C____xy_OJ()
  29. {
  30. RunTest(x => (x.BO1.I1 == 1 || x.K1 == 1) || (x.BO1.I2 == 1 || x.K2 == 1),
  31. x => x.BO1.I1 == 1 || (x.K1 == 1 || (x.BO1.I2 == 1 || x.K2 == 1)),
  32. Setters<TBO1_I, TK, TBO1_I, TK>(MyBO.SetBO1_I1, MyBO.SetK1, MyBO.SetBO1_I2, MyBO.SetK2));
  33. }
  34. [Test]
  35. public void Test_xyP_in_A_C_D____xy_IJ()
  36. {
  37. RunTest(x => (x.BO1.I1 == 1 || x.K1 == 1) || (x.BO1.I2 == 1 || x.BO1.I3 == 1),
  38. x => x.BO1.I1 == 1 || (x.K1 == 1 || (x.BO1.I2 == 1 || x.BO1.I3 == 1)),
  39. Setters<TBO1_I, TK, TBO1_I, TBO1_I>(MyBO.SetBO1_I1, MyBO.SetK1, MyBO.SetBO1_I2, MyBO.SetBO1_I3));
  40. }
  41. [Test]
  42. public void Test_xyP_in_C_D____xy_IJ()
  43. {
  44. RunTest(x => (x.K1 == 1 || x.K2 == 1) || (x.BO1.I1 == 1 || x.BO1.I2 == 1),
  45. x => x.K1 == 1 || (x.K2 == 1 || (x.BO1.I1 == 1 || x.BO1.I2 == 1)),
  46. Setters<TK, TK, TBO1_I, TBO1_I>(MyBO.SetK1, MyBO.SetK2, MyBO.SetBO1_I1, MyBO.SetBO1_I2));
  47. }
  48. [Test]
  49. public void Test_xyP_in_C____xy_OJ()
  50. {
  51. RunTest(x => (x.K1 == 1 || x.K2 == 1) || (x.BO1.I1 == 1 || x.K3 == 1),
  52. x => x.K1 == 1 || (x.K2 == 1 || (x.BO1.I1 == 1 || x.K3 == 1)),
  53. Setters<TK, TK, TBO1_I, TK>(MyBO.SetK1, MyBO.SetK2, MyBO.SetBO1_I1, MyBO.SetK3));
  54. }
  55. #endregion 5a. One path
  56. #region 5b. Two paths
  57. [Test]
  58. public void Test_xyP_in_A_C__rsQ_in_C____xy_OJ_rs_OJ()
  59. {
  60. RunTest(x => (x.BO1.I1 == 1 || x.K1 == 1) || ((x.BO1.I2 == 1 && x.BO2.J1 == 1) || x.K2 == 1),
  61. x => x.BO1.I1 == 1 || (x.K1 == 1 || ((x.BO1.I2 == 1 && x.BO2.J1 == 1) || x.K2 == 1)),
  62. Setters<TBO1_I, TK, TBO1_I, TBO2_J, TK>(MyBO.SetBO1_I1, MyBO.SetK1, MyBO.SetBO1_I2, MyBO.SetBO2_J1, MyBO.SetK2));
  63. }
  64. [Test]
  65. public void Test_xyP_in_A_C__rsQ_in_C_D____xy_OJ_rs_IJ()
  66. {
  67. RunTest(x => (x.BO1.I1 == 1 || x.K1 == 1) || ((x.BO1.I2 == 1 && x.BO2.J1 == 1) || x.BO2.J2 == 1),
  68. x => x.BO1.I1 == 1 || (x.K1 == 1 || ((x.BO1.I2 == 1 && x.BO2.J1 == 1) || x.BO2.J2 == 1)),
  69. Setters<TBO1_I, TK, TBO1_I, TBO2_J, TBO2_J>(MyBO.SetBO1_I1, MyBO.SetK1, MyBO.SetBO1_I2, MyBO.SetBO2_J1, MyBO.SetBO2_J2));
  70. }
  71. [Test]
  72. public void Test_xyP_in_A_B__rsQ_in_C_D____xy_IJ_rs_IJ()
  73. {
  74. RunTest(x => (x.BO1.I1 == 1 || x.BO1.I2 == 1) || (x.BO2.J1 == 1 || x.BO2.J2 == 1),
  75. x => x.BO1.I1 == 1 || (x.BO1.I2 == 1 || (x.BO2.J1 == 1 || x.BO2.J2 == 1)),
  76. Setters<TBO1_I, TBO1_I, TBO2_J, TBO2_J>(MyBO.SetBO1_I1, MyBO.SetBO1_I2, MyBO.SetBO2_J1, MyBO.SetBO2_J2));
  77. }
  78. [Test]
  79. public void Test_xyP_in_C__rsQ_in_C____xy_OJ_rs_OJ()
  80. {
  81. RunTest(x => (x.K1 == 1 || x.K2 == 1) || ((x.BO1.I1 == 1 && x.BO2.J1 == 1) || x.K3 == 1),
  82. x => x.K1 == 1 || (x.K2 == 1 || ((x.BO1.I1 == 1 && x.BO2.J1 == 1) || x.K3 == 1)),
  83. Setters<TK, TK, TBO1_I, TBO2_J, TK>(MyBO.SetK1, MyBO.SetK2, MyBO.SetBO1_I1, MyBO.SetBO2_J1, MyBO.SetK3));
  84. }
  85. [Test]
  86. public void Test_xyP_in_C__rsQ_in_D____xy_OJ_rs_OJ()
  87. {
  88. RunTest(x => (x.K1 == 1 || x.K2 == 1) || (x.BO1.I1 == 1 || x.BO2.J1 == 1),
  89. x => x.K1 == 1 || (x.K2 == 1 || (x.BO1.I1 == 1 || x.BO2.J1 == 1)),
  90. Setters<TK, TK, TBO1_I, TBO2_J>(MyBO.SetK1, MyBO.SetK2, MyBO.SetBO1_I1, MyBO.SetBO2_J1));
  91. }
  92. [Test]
  93. public void Test_xyP_in_A_C_D__rsQ_in_A_B_D____xy_IJ_rs_IJ()
  94. {
  95. RunTest(x => ((x.BO1.I1 == 1 && x.BO2.J1 == 1) || x.BO2.J2 == 1) || (x.BO1.I2 == 1 || (x.BO1.I3 == 1 && x.BO2.J3 == 1)),
  96. x => (x.BO1.I1 == 1 && x.BO2.J1 == 1) || (x.BO2.J2 == 1 || (x.BO1.I2 == 1 || (x.BO1.I3 == 1 && x.BO2.J3 == 1))),
  97. Setters<TBO1_I, TBO2_J, TBO2_J, TBO1_I, TBO1_I, TBO2_J>(MyBO.SetBO1_I1, MyBO.SetBO2_J1, MyBO.SetBO2_J2, MyBO.SetBO1_I2, MyBO.SetBO1_I3, MyBO.SetBO2_J3));
  98. }
  99. #endregion 5b. Two paths
  100. #region 5c. Path and subpath
  101. [Test]
  102. public void Test_wxyP_in_A_C____OJ_wx_OJ_wxy()
  103. {
  104. RunTest(x => (x.BO1.BO2.J1 == 1 || x.K1 == 1) || (x.BO1.BO2.J2 == 1 || x.K3 == 1),
  105. x => x.BO1.BO2.J1 == 1 || (x.K1 == 1 || (x.BO1.BO2.J2 == 1 || x.K3 == 1)),
  106. Setters<TBO1_BO2_J, TK, TBO1_BO2_J, TK>(MyBO.SetBO1_BO2_J1, MyBO.SetK1, MyBO.Set_BO1_BO2_J2, MyBO.SetK3));
  107. }
  108. [Test]
  109. public void Test_wxQ_in_C__wxyP_in_D____IJ_wx_OJ_wxy()
  110. {
  111. RunTest(x => (x.K1 == 1 || x.K2 == 1) || (x.BO1.I1 == 1 || x.BO1.BO2.J1 == 1),
  112. x => x.K1 == 1 || (x.K2 == 1 || (x.BO1.I1 == 1 || x.BO1.BO2.J1 == 1)),
  113. Setters<TK, TK, TBO1_I, TBO1_BO2_J>(MyBO.SetK1, MyBO.SetK2, MyBO.SetBO1_I1, MyBO.SetBO1_BO2_J1));
  114. }
  115. [Test]
  116. public void Test_wxQ_in_A_wxyP_D____IJ_wx_OJ_wxy()
  117. {
  118. RunTest(x => (x.BO1.I1 == 1 || x.K1 == 1) || (x.K2 == 1 || x.BO1.BO2.J1 == 1),
  119. x => x.BO1.I1 == 1 || (x.K1 == 1 || (x.K2 == 1 || x.BO1.BO2.J1 == 1)),
  120. Setters<TBO1_I, TK, TK, TBO1_BO2_J>(MyBO.SetBO1_I1, MyBO.SetK1, MyBO.SetK2, MyBO.SetBO1_BO2_J1));
  121. }
  122. #endregion 5c. Path and subpath
  123. #region 5d. Partially overlapping paths
  124. [Test]
  125. public void Test_wxvP_in_C__wxyP_in_D____IJ_wx_OJ_wxv_OJ_wxy()
  126. {
  127. RunTest(x => (x.K1 == 1 || x.K2 == 1) || (x.BO1.BO2.J1 == 1 || x.BO1.BO3.L1 == 1),
  128. x => x.K1 == 1 || (x.K2 == 1 || (x.BO1.BO2.J1 == 1 || x.BO1.BO3.L1 == 1)),
  129. Setters<TK, TK, TBO1_BO2_J, TBO1_BO3_L>(MyBO.SetK1, MyBO.SetK2, MyBO.SetBO1_BO2_J1, MyBO.SetBO1_BO3_L1));
  130. }
  131. [Test]
  132. public void Test_wxvP_in_A__wxyP_in_D____IJ_wx_IJ_wxv_OJ_wxy()
  133. {
  134. RunTest(x => (x.BO1.BO2.J1 == 1 || x.K1 == 1) || (x.K2 == 1 || x.BO1.BO3.L1 == 1),
  135. x => x.BO1.BO2.J1 == 1 || (x.K1 == 1 || (x.K2 == 1 || x.BO1.BO3.L1 == 1)),
  136. Setters<TBO1_BO2_J, TK, TK, TBO1_BO3_L>(MyBO.SetBO1_BO2_J1, MyBO.SetK1, MyBO.SetK2, MyBO.SetBO1_BO3_L1));
  137. }
  138. #endregion 5d. Partially overlapping paths
  139. // ...and many more...???...
  140. // ...also partial paths as IJ then rest as OJ...???...
  141. }
  142. }