/src/NHibernate.Test/Async/EntityModeTest/Map/Basic/DynamicClassFixture.cs

https://github.com/RogerKratz/nhibernate-core · C# · 254 lines · 208 code · 38 blank · 8 comment · 0 complexity · e0050d46538d1c5ab866a03ecff9278e MD5 · raw file

  1. //------------------------------------------------------------------------------
  2. // <auto-generated>
  3. // This code was generated by AsyncGenerator.
  4. //
  5. // Changes to this file may cause incorrect behavior and will be lost if
  6. // the code is regenerated.
  7. // </auto-generated>
  8. //------------------------------------------------------------------------------
  9. using System.Collections;
  10. using System.Collections.Generic;
  11. using System.Dynamic;
  12. using System.Linq.Dynamic.Core;
  13. using System.Linq;
  14. using Antlr.Runtime.Misc;
  15. using NUnit.Framework;
  16. using NHibernate.Criterion;
  17. using NHibernate.Linq;
  18. namespace NHibernate.Test.EntityModeTest.Map.Basic
  19. {
  20. using System.Threading.Tasks;
  21. using System.Threading;
  22. [TestFixture]
  23. public class DynamicClassFixtureAsync : TestCase
  24. {
  25. protected override string MappingsAssembly
  26. {
  27. get { return "NHibernate.Test"; }
  28. }
  29. protected override string[] Mappings
  30. {
  31. get { return new[] {"EntityModeTest.Map.Basic.ProductLine.hbm.xml"}; }
  32. }
  33. public delegate IDictionary SingleCarQueryDelegate(ISession session);
  34. public delegate IList AllModelQueryDelegate(ISession session);
  35. [Test]
  36. public async Task ShouldWorkWithHQLAsync()
  37. {
  38. await (TestLazyDynamicClassAsync(
  39. s => (IDictionary) s.CreateQuery("from ProductLine pl order by pl.Description").UniqueResult(),
  40. s => s.CreateQuery("from Model m").List()));
  41. }
  42. [Test]
  43. public async Task ShouldWorkWithCriteriaAsync()
  44. {
  45. await (TestLazyDynamicClassAsync(
  46. s => (IDictionary) s.CreateCriteria("ProductLine").AddOrder(Order.Asc("Description")).UniqueResult(),
  47. s => s.CreateCriteria("Model").List()));
  48. }
  49. public async Task TestLazyDynamicClassAsync(SingleCarQueryDelegate singleCarQueryHandler, AllModelQueryDelegate allModelQueryHandler, CancellationToken cancellationToken = default(CancellationToken))
  50. {
  51. ITransaction t;
  52. IDictionary cars;
  53. IList models;
  54. using (ISession s = OpenSession())
  55. {
  56. t = s.BeginTransaction();
  57. cars = new Hashtable();
  58. cars["Description"] = "Cars";
  59. IDictionary monaro = new Hashtable();
  60. monaro["ProductLine"] = cars;
  61. monaro["Name"] = "Monaro";
  62. monaro["Description"] = "Holden Monaro";
  63. IDictionary hsv = new Hashtable();
  64. hsv["ProductLine"] = cars;
  65. hsv["Name"] = "hsv";
  66. hsv["Description"] = "Holden hsv";
  67. models = new List<IDictionary> {monaro, hsv};
  68. cars["Models"] = models;
  69. await (s.SaveAsync("ProductLine", cars, cancellationToken));
  70. await (t.CommitAsync(cancellationToken));
  71. }
  72. using (ISession s = OpenSession())
  73. {
  74. t = s.BeginTransaction();
  75. cars = singleCarQueryHandler(s);
  76. models = (IList)cars["Models"];
  77. Assert.IsFalse(NHibernateUtil.IsInitialized(models));
  78. Assert.AreEqual(2, models.Count);
  79. Assert.IsTrue(NHibernateUtil.IsInitialized(models));
  80. s.Clear();
  81. IList list = allModelQueryHandler(s);
  82. foreach (IDictionary ht in list)
  83. {
  84. Assert.IsFalse(NHibernateUtil.IsInitialized(ht["ProductLine"]));
  85. }
  86. var model = (IDictionary)list[0];
  87. Assert.IsTrue(((IList)((IDictionary)model["ProductLine"])["Models"]).Contains(model));
  88. s.Clear();
  89. await (t.CommitAsync(cancellationToken));
  90. }
  91. using (ISession s = OpenSession())
  92. {
  93. t = s.BeginTransaction();
  94. cars = singleCarQueryHandler(s);
  95. await (s.DeleteAsync(cars, cancellationToken));
  96. await (t.CommitAsync(cancellationToken));
  97. }
  98. }
  99. [Test]
  100. public async Task ShouldWorkWithHQLAndGenericsAsync()
  101. {
  102. await (TestLazyDynamicClassAsync(
  103. s => s.CreateQuery("from ProductLine pl order by pl.Description").UniqueResult<IDictionary<string, object>>(),
  104. s => s.CreateQuery("from Model m").List<IDictionary<string, object>>()));
  105. }
  106. [Test]
  107. public async Task ShouldWorkWithCriteriaAndGenericsAsync()
  108. {
  109. await (TestLazyDynamicClassAsync(
  110. s => s.CreateCriteria("ProductLine").AddOrder(Order.Asc("Description")).UniqueResult<IDictionary<string, object>>(),
  111. s => s.CreateCriteria("Model").List<IDictionary<string, object>>()));
  112. }
  113. [Test]
  114. public async Task ShouldWorkWithLinqAndGenericsAsync()
  115. {
  116. await (TestLazyDynamicClassAsync(
  117. s => (IDictionary<string, object>) s.Query<dynamic>("ProductLine").OrderBy("Description").Single(),
  118. s => s.Query<dynamic>("Model").ToList().Cast<IDictionary<string, object>>().ToList()));
  119. }
  120. public async Task TestLazyDynamicClassAsync(
  121. Func<ISession, IDictionary<string, object>> singleCarQueryHandler,
  122. Func<ISession, IList<IDictionary<string, object>>> allModelQueryHandler, CancellationToken cancellationToken = default(CancellationToken))
  123. {
  124. using (var s = OpenSession())
  125. using (var t = s.BeginTransaction())
  126. {
  127. var cars = new Dictionary<string, object> { ["Description"] = "Cars" };
  128. var monaro = new Dictionary<string, object>
  129. {
  130. ["ProductLine"] = cars,
  131. ["Name"] = "Monaro",
  132. ["Description"] = "Holden Monaro"
  133. };
  134. var hsv = new Dictionary<string, object>
  135. {
  136. ["ProductLine"] = cars,
  137. ["Name"] = "hsv",
  138. ["Description"] = "Holden hsv"
  139. };
  140. var models = new List<IDictionary<string, object>> {monaro, hsv};
  141. cars["Models"] = models;
  142. await (s.SaveAsync("ProductLine", cars, cancellationToken));
  143. await (t.CommitAsync(cancellationToken));
  144. }
  145. using (var s = OpenSession())
  146. using (var t = s.BeginTransaction())
  147. {
  148. var cars = singleCarQueryHandler(s);
  149. var models = (IList<object>) cars["Models"];
  150. Assert.That(NHibernateUtil.IsInitialized(models), Is.False);
  151. Assert.That(models.Count, Is.EqualTo(2));
  152. Assert.That(NHibernateUtil.IsInitialized(models), Is.True);
  153. s.Clear();
  154. var list = allModelQueryHandler(s);
  155. foreach (var dic in list)
  156. {
  157. Assert.That(NHibernateUtil.IsInitialized(dic["ProductLine"]), Is.False);
  158. }
  159. var model = list[0];
  160. Assert.That(((IList<object>) ((IDictionary<string, object>) model["ProductLine"])["Models"]).Contains(model), Is.True);
  161. s.Clear();
  162. await (t.CommitAsync(cancellationToken));
  163. }
  164. }
  165. [Test]
  166. public async Task ShouldWorkWithLinqAndDynamicsAsync()
  167. {
  168. using (var s = OpenSession())
  169. using (var t = s.BeginTransaction())
  170. {
  171. dynamic cars = new ExpandoObject();
  172. cars.Description = "Cars";
  173. dynamic monaro = new ExpandoObject();
  174. monaro.ProductLine = cars;
  175. monaro.Name = "Monaro";
  176. monaro.Description = "Holden Monaro";
  177. dynamic hsv = new ExpandoObject();
  178. hsv.ProductLine = cars;
  179. hsv.Name = "hsv";
  180. hsv.Description = "Holden hsv";
  181. var models = new List<dynamic> {monaro, hsv};
  182. cars.Models = models;
  183. await (s.SaveAsync("ProductLine", cars));
  184. await (t.CommitAsync());
  185. }
  186. using (var s = OpenSession())
  187. using (var t = s.BeginTransaction())
  188. {
  189. var cars = await (s.Query<dynamic>("ProductLine").OrderBy("Description").SingleAsync());
  190. var models = cars.Models;
  191. Assert.That(NHibernateUtil.IsInitialized(models), Is.False);
  192. Assert.That(models.Count, Is.EqualTo(2));
  193. Assert.That(NHibernateUtil.IsInitialized(models), Is.True);
  194. s.Clear();
  195. var list = await (s.Query<dynamic>("Model").Where("ProductLine.Description = @0", "Cars").ToListAsync());
  196. foreach (var model in list)
  197. {
  198. Assert.That(NHibernateUtil.IsInitialized(model.ProductLine), Is.False);
  199. }
  200. var model1 = list[0];
  201. Assert.That(model1.ProductLine.Models.Contains(model1), Is.True);
  202. s.Clear();
  203. await (t.CommitAsync());
  204. }
  205. }
  206. protected override void OnTearDown()
  207. {
  208. using (var s = OpenSession())
  209. using (var t = s.BeginTransaction())
  210. {
  211. s.Delete("from ProductLine");
  212. t.Commit();
  213. }
  214. }
  215. }
  216. }