Files
spring-net/test/Spring/Spring.Data.Tests/Transaction/Interceptor/RuleBasedTransactionAttributeTests.cs
2008-05-30 22:55:02 +00:00

90 lines
3.6 KiB
C#

using System;
using System.Collections;
using System.Data;
using NUnit.Framework;
using Spring.Collections;
namespace Spring.Transaction.Interceptor
{
[TestFixture]
public class RuleBasedTransactionAttributeTests
{
[Test]
public void DefaultRule()
{
RuleBasedTransactionAttribute rta = new RuleBasedTransactionAttribute();
Assert.IsTrue(rta.RollbackOn(new SystemException()));
//mlp 3/17 changed rollback to rollback on all exceptions.
Assert.IsTrue(rta.RollbackOn(new ApplicationException()));
Assert.IsTrue( rta.RollbackOn(new TransactionSystemException()));
}
[Test]
public void RuleForRollbackOnApplicationException()
{
IList list = new LinkedList();
list.Add(new RollbackRuleAttribute("Spring.Transaction.TransactionSystemException"));
RuleBasedTransactionAttribute rta = new RuleBasedTransactionAttribute( TransactionPropagation.Required, list );
Assert.IsTrue( rta.RollbackOn(new SystemException()));
//mlp 3/17 changed rollback to rollback on all exceptions.
Assert.IsTrue( rta.RollbackOn(new ApplicationException()));
Assert.IsTrue(( rta.RollbackOn( new TransactionSystemException())));
}
[Test]
public void RuleForCommitOnUnchecked()
{
IList list = new LinkedList();
list.Add( new NoRollbackRuleAttribute("System.SystemException"));
list.Add(new RollbackRuleAttribute("Spring.Transaction.TransactionSystemException"));
RuleBasedTransactionAttribute rta = new RuleBasedTransactionAttribute( TransactionPropagation.Required, list );
Assert.IsFalse( rta.RollbackOn(new SystemException()));
Assert.IsTrue( rta.RollbackOn(new TransactionSystemException()));
}
[Test]
public void RuleForSelectiveRollbackOnCheckedWithString()
{
IList list = new LinkedList();
list.Add( new RollbackRuleAttribute("Spring.Transaction.TransactionSystemException"));
RuleBasedTransactionAttribute rta = new RuleBasedTransactionAttribute( TransactionPropagation.Required, list );
ruleForSelectionRollbackOnChecked( rta );
}
[Test]
public void RuleForSelectiveRollbackOnCheckedWithClass()
{
IList list = new LinkedList();
list.Add( new RollbackRuleAttribute(typeof(TransactionSystemException)));
RuleBasedTransactionAttribute rta = new RuleBasedTransactionAttribute( TransactionPropagation.Required, list );
ruleForSelectionRollbackOnChecked( rta );
}
private void ruleForSelectionRollbackOnChecked( RuleBasedTransactionAttribute rta )
{
Assert.IsTrue(rta.RollbackOn(new SystemException()));
Assert.IsTrue( rta.RollbackOn(new TransactionSystemException()));
}
[Test]
public void RuleForCommitOnSubclassOfChecked()
{
IList list = new LinkedList();
list.Add( new RollbackRuleAttribute("System.Data.DataException"));
list.Add( new NoRollbackRuleAttribute("Spring.Transaction.TransactionSystemException"));
RuleBasedTransactionAttribute rta = new RuleBasedTransactionAttribute( TransactionPropagation.Required, list );
Assert.IsTrue( rta.RollbackOn(new SystemException()));
Assert.IsFalse( rta.RollbackOn(new TransactionSystemException()));
}
[Test]
public void RollbackNever()
{
IList list = new LinkedList();
list.Add( new NoRollbackRuleAttribute("System.Exception"));
RuleBasedTransactionAttribute rta = new RuleBasedTransactionAttribute( TransactionPropagation.Required, list );
Assert.IsFalse(rta.RollbackOn(new SystemException()));
Assert.IsFalse(rta.RollbackOn(new DataException()));
Assert.IsFalse(rta.RollbackOn(new ApplicationException()));
Assert.IsFalse(rta.RollbackOn(new TransactionSystemException()));
}
}
}