fixed SPRNET-1160, SPRNET-1178

This commit is contained in:
eeichinger
2009-03-04 21:50:38 +00:00
parent be16181bdb
commit c1f76e12ee
6 changed files with 734 additions and 482 deletions

View File

@@ -1,6 +1,8 @@
using System;
using System.Collections;
using NUnit.Framework;
using Spring.Core;
using Spring.Util;
namespace Spring.Transaction.Support
{
@@ -30,6 +32,7 @@ namespace Spring.Transaction.Support
IList syncs = TransactionSynchronizationManager.Synchronizations;
Assert.IsNotNull(syncs); // to avoid mono mcs error 219
}
[Test]
[ExpectedException(typeof(InvalidOperationException))]
public void InitSynchronizationsInvalid()
@@ -43,12 +46,14 @@ namespace Spring.Transaction.Support
{
TransactionSynchronizationManager.ClearSynchronization();
}
[Test]
[ExpectedException(typeof(InvalidOperationException))]
public void RegisterSyncsInvalid()
{
TransactionSynchronizationManager.RegisterSynchronization(new MockTxnSync());
}
[Test]
public void SynchronizationsLifeCycle()
{
@@ -60,5 +65,57 @@ namespace Spring.Transaction.Support
Assert.AreEqual( 1, syncs.Count );
TransactionSynchronizationManager.ClearSynchronization();
}
[Test(Description = "http://jira.springframework.org/browse/SPRNET-1160")]
public void SynchronizationsExecuteInOrderOfRegistration()
{
TransactionSynchronizationManager.InitSynchronization();
try
{
// expect syncs to be run A, B, C, D, E since all have order '1'
TransactionSynchronizationManager.RegisterSynchronization(new Sync("A", 1));
TransactionSynchronizationManager.RegisterSynchronization(new Sync("B", 1));
TransactionSynchronizationManager.RegisterSynchronization(new Sync("C", 1));
TransactionSynchronizationManager.RegisterSynchronization(new Sync("D", 1));
TransactionSynchronizationManager.RegisterSynchronization(new Sync("E", 1));
// simulate what APTM does
Sync[] syncs = (Sync[]) CollectionUtils.ToArray(TransactionSynchronizationManager.Synchronizations, typeof(Sync));
Assert.AreEqual( "A", syncs[0].Name );
Assert.AreEqual( "B", syncs[1].Name );
Assert.AreEqual( "C", syncs[2].Name );
Assert.AreEqual( "D", syncs[3].Name );
Assert.AreEqual( "E", syncs[4].Name );
}
finally
{
TransactionSynchronizationManager.ClearSynchronization();
}
}
private class Sync : TransactionSynchronizationAdapter, IOrdered
{
private readonly string name;
private readonly int order;
public Sync(string name, int order)
{
this.name = name;
this.order = order;
}
public int Order { get { return order; } }
public string Name
{
get { return name; }
}
public override string ToString()
{
return name;
}
}
}
}