PageRenderTime 50ms CodeModel.GetById 23ms RepoModel.GetById 1ms app.codeStats 0ms

/src/FluentNHibernate.Testing/Testing/PersistenceSpecificationTester.cs

https://github.com/signoredems/fluent-nhibernate
C# | 237 lines | 202 code | 35 blank | 0 comment | 12 complexity | c781a9f608f6221e92fdfcc13b37a484 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using NUnit.Framework;
  4. using Rhino.Mocks;
  5. using NHibernate;
  6. using System.Collections;
  7. using System.Drawing;
  8. namespace FluentNHibernate.Testing.Testing
  9. {
  10. [TestFixture]
  11. public class PersistenceSpecificationTester
  12. {
  13. public class Cat
  14. {
  15. public long Id { get; set; }
  16. public string Name { get; set; }
  17. public Kitten FirstKitten { get; set; }
  18. public IList<Kitten> AllKittens { get; set; }
  19. public Bitmap Picture { get; set; }
  20. public Cat()
  21. {
  22. AllKittens = new List<Kitten>();
  23. }
  24. public IEnumerable<Kitten> EnumerableOfKittens { get { return AllKittens; } }
  25. public void AddKitten(Kitten kitten)
  26. {
  27. AllKittens.Add(kitten);
  28. }
  29. }
  30. public class Kitten
  31. {
  32. public long Id { get; set; }
  33. public string Name { get; set; }
  34. }
  35. public class TestComparer : IEqualityComparer
  36. {
  37. public new bool Equals(object x, object y)
  38. {
  39. if (x is Cat && y is Cat)
  40. return ((Cat)x).Id == ((Cat)y).Id;
  41. else if (x is Kitten && y is Kitten)
  42. return ((Kitten)x).Id == ((Kitten)y).Id;
  43. throw new System.NotImplementedException();
  44. }
  45. public int GetHashCode(object obj)
  46. {
  47. if (obj is Cat)
  48. return (int)((Cat)obj).Id;
  49. else if (obj is Kitten)
  50. return (int)((Kitten)obj).Id;
  51. throw new NotImplementedException();
  52. }
  53. }
  54. public class DummyBitmapComparer : IEqualityComparer
  55. {
  56. public new bool Equals(object x, object y)
  57. {
  58. if (x is Bitmap && y is Bitmap)
  59. return true;
  60. throw new NotImplementedException();
  61. }
  62. public int GetHashCode(object obj)
  63. {
  64. return ((Bitmap)obj).GetHashCode();
  65. }
  66. }
  67. private PersistenceSpecification<Cat> _spec;
  68. private ISession _session;
  69. private ITransaction _transaction;
  70. private Cat _cat;
  71. private Cat _identicalCat;
  72. private ISessionSource _sessionSource;
  73. [SetUp]
  74. public void Setup()
  75. {
  76. var firstKitten = new Kitten { Id = 1, Name = "Kitten" };
  77. _cat = new Cat
  78. {
  79. Id = 100,
  80. Name = "Cat",
  81. FirstKitten = firstKitten,
  82. Picture = new Bitmap(5, 5),
  83. AllKittens = new List<Kitten>
  84. {
  85. firstKitten,
  86. new Kitten {Id = 2, Name = "Kitten2"},
  87. }
  88. };
  89. firstKitten = new Kitten { Id = 1, Name = "IdenticalKitten" };
  90. _identicalCat = new Cat
  91. {
  92. Id = 100,
  93. Name = "IdenticalCat",
  94. FirstKitten = firstKitten,
  95. Picture = new Bitmap(5, 5),
  96. AllKittens = new List<Kitten>
  97. {
  98. firstKitten,
  99. new Kitten {Id = 2, Name = "IdenticalKitten2"},
  100. }
  101. };
  102. _transaction = MockRepository.GenerateStub<ITransaction>();
  103. _session = MockRepository.GenerateStub<ISession>();
  104. _session.Stub(s => s.BeginTransaction()).Return(_transaction);
  105. _session.Stub(s => s.Get<Cat>(null)).IgnoreArguments().Return(_identicalCat);
  106. _session.Stub(s => s.GetIdentifier(_cat)).Return(_cat.Id);
  107. _sessionSource = MockRepository.GenerateStub<ISessionSource>();
  108. _sessionSource.Stub(ss => ss.CreateSession()).Return(_session);
  109. _spec = new PersistenceSpecification<Cat>(_sessionSource, new TestComparer());
  110. }
  111. [Test]
  112. public void Comparing_two_properties_should_use_the_specified_IEqualityComparer()
  113. {
  114. _spec.CheckProperty(x => x.FirstKitten, _cat.FirstKitten).VerifyTheMappings();
  115. }
  116. [Test]
  117. public void Comparing_objects_in_two_lists_should_use_the_specified_IEqualityComparer()
  118. {
  119. _spec.CheckList(x => x.AllKittens, _cat.AllKittens).VerifyTheMappings();
  120. }
  121. [Test]
  122. public void should_not_be_equal_without_the_equality_comparer()
  123. {
  124. _spec = new PersistenceSpecification<Cat>(_sessionSource);
  125. typeof(ApplicationException).ShouldBeThrownBy(() =>
  126. _spec.CheckList(x => x.AllKittens, _cat.AllKittens).VerifyTheMappings());
  127. }
  128. [Test]
  129. public void Can_test_enumerable()
  130. {
  131. var kittens = new[] {new Kitten {Id = 3, Name = "kitten3"}, new Kitten {Id = 4, Name = "kitten4"}};
  132. _spec.CheckEnumerable(x => x.EnumerableOfKittens, (cat, kitten) => cat.AddKitten(kitten), kittens);
  133. typeof(ApplicationException).ShouldBeThrownBy(_spec.VerifyTheMappings);
  134. }
  135. [Test]
  136. public void Comparing_two_properties_should_use_the_specified_property_IEqualityComparer()
  137. {
  138. _spec.CheckProperty(cat => cat.Picture, _cat.Picture, new DummyBitmapComparer()).VerifyTheMappings ();
  139. }
  140. }
  141. [TestFixture]
  142. public class PersistenceSpecificationConstructorTests
  143. {
  144. private ISessionSource sessionSource;
  145. [SetUp]
  146. public void Setup()
  147. {
  148. var transaction = MockRepository.GenerateStub<ITransaction>();
  149. var session = MockRepository.GenerateStub<ISession>();
  150. session.Stub(s => s.BeginTransaction()).Return(transaction);
  151. sessionSource = MockRepository.GenerateStub<ISessionSource>();
  152. sessionSource.Stub(ss => ss.CreateSession()).Return(session);
  153. }
  154. [Test]
  155. public void Should_accept_classes_with_public_parameterless_constructor()
  156. {
  157. var _spec = new PersistenceSpecification<PublicConstructorClass>(sessionSource);
  158. _spec.VerifyTheMappings();
  159. }
  160. [Test]
  161. public void Should_accept_classes_with_private_parameterless_constructor()
  162. {
  163. var _spec = new PersistenceSpecification<PrivateConstructorClass>(sessionSource);
  164. _spec.VerifyTheMappings();
  165. }
  166. [Test]
  167. public void Should_accept_classes_with_protected_parameterless_constructor()
  168. {
  169. var _spec = new PersistenceSpecification<ProtectedConstructorClass>(sessionSource);
  170. _spec.VerifyTheMappings();
  171. }
  172. [Test]
  173. public void Should_reject_classes_without_a_parameterless_constructor()
  174. {
  175. var _spec = new PersistenceSpecification<NoParameterlessConstructorClass>(sessionSource);
  176. typeof(MissingConstructorException).ShouldBeThrownBy(() =>
  177. _spec.VerifyTheMappings());
  178. }
  179. [Test]
  180. public void Should_accept_instances_regardless_of_constructor()
  181. {
  182. var _spec = new PersistenceSpecification<NoParameterlessConstructorClass>(sessionSource);
  183. _spec.VerifyTheMappings(new NoParameterlessConstructorClass(123));
  184. }
  185. public class PublicConstructorClass
  186. {
  187. public PublicConstructorClass() { }
  188. }
  189. public class ProtectedConstructorClass
  190. {
  191. protected ProtectedConstructorClass() { }
  192. }
  193. public class PrivateConstructorClass
  194. {
  195. private PrivateConstructorClass() { }
  196. }
  197. public class NoParameterlessConstructorClass
  198. {
  199. public NoParameterlessConstructorClass(int someParameter) { }
  200. }
  201. }
  202. }