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())); } } }