|
From: <fab...@us...> - 2009-06-01 19:21:27
|
Revision: 4400
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4400&view=rev
Author: fabiomaulo
Date: 2009-06-01 19:21:19 +0000 (Mon, 01 Jun 2009)
Log Message:
-----------
Tests only as Examples to understand what happening with PostUpdate
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/Events/PostEvents/
trunk/nhibernate/src/NHibernate.Test/Events/PostEvents/AssertOldStatePostListener.cs
trunk/nhibernate/src/NHibernate.Test/Events/PostEvents/PostUpdateFixture.cs
trunk/nhibernate/src/NHibernate.Test/Events/PostEvents/SimpleEntity.cs
trunk/nhibernate/src/NHibernate.Test/Events/PostEvents/SimpleEntity.hbm.xml
Added: trunk/nhibernate/src/NHibernate.Test/Events/PostEvents/AssertOldStatePostListener.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Events/PostEvents/AssertOldStatePostListener.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/Events/PostEvents/AssertOldStatePostListener.cs 2009-06-01 19:21:19 UTC (rev 4400)
@@ -0,0 +1,27 @@
+using log4net;
+using NHibernate.Event;
+
+namespace NHibernate.Test.Events.PostEvents
+{
+ public delegate void AssertionAction(PostUpdateEvent @event);
+
+ public class AssertOldStatePostListener : IPostUpdateEventListener
+ {
+ private readonly AssertionAction assertionDelegate;
+
+ public AssertOldStatePostListener(AssertionAction assertionDelegate)
+ {
+ this.assertionDelegate = assertionDelegate;
+ }
+
+ public const string LogMessage = "PostUpdateEvent called.";
+
+ private static readonly ILog log = LogManager.GetLogger(typeof(AssertOldStatePostListener));
+
+ public void OnPostUpdate(PostUpdateEvent @event)
+ {
+ log.Debug(LogMessage);
+ assertionDelegate(@event);
+ }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/Events/PostEvents/PostUpdateFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Events/PostEvents/PostUpdateFixture.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/Events/PostEvents/PostUpdateFixture.cs 2009-06-01 19:21:19 UTC (rev 4400)
@@ -0,0 +1,219 @@
+using System.Collections;
+using System.Collections.Generic;
+using NHibernate.Event;
+using NHibernate.Impl;
+using NUnit.Framework;
+
+namespace NHibernate.Test.Events.PostEvents
+{
+ [TestFixture]
+ public class PostUpdateFixture : TestCase
+ {
+ protected override string MappingsAssembly
+ {
+ get { return "NHibernate.Test"; }
+ }
+
+ protected override IList Mappings
+ {
+ get { return new[] {"Events.PostEvents.SimpleEntity.hbm.xml"}; }
+ }
+
+ [Test]
+ public void ImplicitFlush()
+ {
+ ((SessionFactoryImpl) sessions).EventListeners.PostUpdateEventListeners = new IPostUpdateEventListener[]
+ {
+ new AssertOldStatePostListener(
+ eArgs =>
+ Assert.That(eArgs.OldState, Is.Not.Null))
+ };
+ FillDb();
+ using (var ls = new LogSpy(typeof (AssertOldStatePostListener)))
+ {
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ IList<SimpleEntity> l = s.CreateCriteria<SimpleEntity>().List<SimpleEntity>();
+ l[0].Description = "Modified";
+ tx.Commit();
+ }
+ }
+ Assert.That(ls.GetWholeLog(), Text.Contains(AssertOldStatePostListener.LogMessage));
+ }
+
+ DbCleanup();
+ ((SessionFactoryImpl) sessions).EventListeners.PostUpdateEventListeners = new IPostUpdateEventListener[0];
+ }
+
+ [Test]
+ public void ExplicitUpdate()
+ {
+ ((SessionFactoryImpl) sessions).EventListeners.PostUpdateEventListeners = new IPostUpdateEventListener[]
+ {
+ new AssertOldStatePostListener(
+ eArgs =>
+ Assert.That(eArgs.OldState, Is.Not.Null))
+ };
+ FillDb();
+ using (var ls = new LogSpy(typeof (AssertOldStatePostListener)))
+ {
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ IList<SimpleEntity> l = s.CreateCriteria<SimpleEntity>().List<SimpleEntity>();
+ l[0].Description = "Modified";
+ s.Update(l[0]);
+ tx.Commit();
+ }
+ }
+ Assert.That(ls.GetWholeLog(), Text.Contains(AssertOldStatePostListener.LogMessage));
+ }
+
+ DbCleanup();
+ ((SessionFactoryImpl) sessions).EventListeners.PostUpdateEventListeners = new IPostUpdateEventListener[0];
+ }
+
+ [Test]
+ public void WithDetachedObject()
+ {
+ ((SessionFactoryImpl) sessions).EventListeners.PostUpdateEventListeners = new IPostUpdateEventListener[]
+ {
+ new AssertOldStatePostListener(
+ eArgs =>
+ Assert.That(eArgs.OldState, Is.Not.Null))
+ };
+ FillDb();
+ SimpleEntity toModify;
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ IList<SimpleEntity> l = s.CreateCriteria<SimpleEntity>().List<SimpleEntity>();
+ toModify = l[0];
+ tx.Commit();
+ }
+ }
+ toModify.Description = "Modified";
+ using (var ls = new LogSpy(typeof (AssertOldStatePostListener)))
+ {
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ s.Merge(toModify);
+ tx.Commit();
+ }
+ }
+ Assert.That(ls.GetWholeLog(), Text.Contains(AssertOldStatePostListener.LogMessage));
+ }
+
+ DbCleanup();
+ ((SessionFactoryImpl) sessions).EventListeners.PostUpdateEventListeners = new IPostUpdateEventListener[0];
+ }
+
+ [Test]
+ public void UpdateDetachedObject()
+ {
+ // When the update is used directly as method to reattach a entity the OldState is null
+ // that mean that NH should not retrieve info from DB
+ ((SessionFactoryImpl) sessions).EventListeners.PostUpdateEventListeners = new IPostUpdateEventListener[]
+ {
+ new AssertOldStatePostListener(
+ eArgs =>
+ Assert.That(eArgs.OldState, Is.Null))
+ };
+ FillDb();
+ SimpleEntity toModify;
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ IList<SimpleEntity> l = s.CreateCriteria<SimpleEntity>().List<SimpleEntity>();
+ toModify = l[0];
+ tx.Commit();
+ }
+ }
+ toModify.Description = "Modified";
+ using (var ls = new LogSpy(typeof (AssertOldStatePostListener)))
+ {
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ s.Update(toModify);
+ tx.Commit();
+ }
+ }
+ Assert.That(ls.GetWholeLog(), Text.Contains(AssertOldStatePostListener.LogMessage));
+ }
+
+ DbCleanup();
+ ((SessionFactoryImpl) sessions).EventListeners.PostUpdateEventListeners = new IPostUpdateEventListener[0];
+ }
+
+ [Test]
+ public void UpdateDetachedObjectWithLock()
+ {
+ ((SessionFactoryImpl)sessions).EventListeners.PostUpdateEventListeners = new IPostUpdateEventListener[]
+ {
+ new AssertOldStatePostListener(
+ eArgs =>
+ Assert.That(eArgs.OldState, Is.Not.Null))
+ };
+ FillDb();
+ SimpleEntity toModify;
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ IList<SimpleEntity> l = s.CreateCriteria<SimpleEntity>().List<SimpleEntity>();
+ toModify = l[0];
+ tx.Commit();
+ }
+ }
+ using (var ls = new LogSpy(typeof(AssertOldStatePostListener)))
+ {
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ s.Lock(toModify, LockMode.None);
+ toModify.Description = "Modified";
+ s.Update(toModify);
+ tx.Commit();
+ }
+ }
+ Assert.That(ls.GetWholeLog(), Text.Contains(AssertOldStatePostListener.LogMessage));
+ }
+
+ DbCleanup();
+ ((SessionFactoryImpl)sessions).EventListeners.PostUpdateEventListeners = new IPostUpdateEventListener[0];
+ }
+ private void DbCleanup()
+ {
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ s.CreateQuery("delete from SimpleEntity").ExecuteUpdate();
+ tx.Commit();
+ }
+ }
+ }
+
+ private void FillDb()
+ {
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ s.Save(new SimpleEntity {Description = "Something"});
+ tx.Commit();
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/Events/PostEvents/SimpleEntity.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Events/PostEvents/SimpleEntity.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/Events/PostEvents/SimpleEntity.cs 2009-06-01 19:21:19 UTC (rev 4400)
@@ -0,0 +1,8 @@
+namespace NHibernate.Test.Events.PostEvents
+{
+ public class SimpleEntity
+ {
+ public virtual int Id { get; set; }
+ public virtual string Description { get; set; }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/Events/PostEvents/SimpleEntity.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Events/PostEvents/SimpleEntity.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/Events/PostEvents/SimpleEntity.hbm.xml 2009-06-01 19:21:19 UTC (rev 4400)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
+ assembly="NHibernate.Test"
+ namespace="NHibernate.Test.Events.PostEvents">
+
+ <class name="SimpleEntity">
+ <id name="Id" type="int">
+ <generator class="hilo" />
+ </id>
+ <property name="Description"/>
+ </class>
+</hibernate-mapping>
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-06-01 18:18:23 UTC (rev 4399)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-06-01 19:21:19 UTC (rev 4400)
@@ -211,6 +211,9 @@
<Compile Include="Events\Collections\IParentWithCollection.cs" />
<Compile Include="Events\Collections\Values\ParentWithCollectionOfValues.cs" />
<Compile Include="Events\Collections\Values\ValuesBagCollectionEventFixture.cs" />
+ <Compile Include="Events\PostEvents\AssertOldStatePostListener.cs" />
+ <Compile Include="Events\PostEvents\PostUpdateFixture.cs" />
+ <Compile Include="Events\PostEvents\SimpleEntity.cs" />
<Compile Include="ExceptionsTest\PostgresExceptionConverterExample.cs" />
<Compile Include="ExceptionsTest\Group.cs" />
<Compile Include="ExceptionsTest\MSSQLExceptionConverterExample.cs" />
@@ -1847,6 +1850,7 @@
<EmbeddedResource Include="Ado\AlmostSimple.hbm.xml" />
<EmbeddedResource Include="CacheTest\EntityWithFilters.xml" />
<Content Include="DynamicEntity\package.html" />
+ <EmbeddedResource Include="Events\PostEvents\SimpleEntity.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH1789\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH1801\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH1796\Mappings.hbm.xml" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|