using System;
using System.Data;
using System.Reflection;
using NUnit.Framework;
namespace Spring.Transaction.Interceptor{
[TestFixture]
public class TransactionAttributeSourceEditorTests
{
[Test]
public void Null()
{
TransactionAttributeSourceEditor pe = new TransactionAttributeSourceEditor();
pe.SetAsText(null);
ITransactionAttributeSource tas = pe.Value;
MethodInfo m = typeof(object).GetMethod("GetHashCode");
Assert.IsTrue(tas.ReturnTransactionAttribute(m, null) == null);
}
[Test]
[ExpectedException(typeof(ArgumentException))]
public void Invalid()
{
TransactionAttributeSourceEditor pe = new TransactionAttributeSourceEditor();
pe.SetAsText("foo=bar");
}
[Test]
public void MatchesSpecific()
{
TransactionAttributeSourceEditor pe = new TransactionAttributeSourceEditor();
pe.SetAsText("System.Object.GetHashCode, Mscorlib =PROPAGATION_REQUIRED\n" +
"System.Object.Equals, Mscorlib =PROPAGATION_MANDATORY\n" +
"System.Object.*pe, Mscorlib=PROPAGATION_SUPPORTS");
ITransactionAttributeSource tas = pe.Value;
checkTransactionProperties(tas, typeof(object).GetMethod("GetHashCode"), TransactionPropagation.Required);
checkTransactionProperties(tas, typeof(object).GetMethod("Equals", new Type[] { typeof(object) }),TransactionPropagation.Mandatory);
checkTransactionProperties(tas, typeof(object).GetMethod( "GetType" ), TransactionPropagation.Supports);
checkTransactionProperties(tas, typeof(object).GetMethod("ToString") );
}
[Test]
public void MatchesAll()
{
TransactionAttributeSourceEditor pe = new TransactionAttributeSourceEditor();
pe.SetAsText("System.Object.*, Mscorlib=PROPAGATION_REQUIRED");
ITransactionAttributeSource tas = pe.Value;
checkTransactionProperties(tas, typeof(object).GetMethod("GetHashCode"), TransactionPropagation.Required);
checkTransactionProperties(tas, typeof(object).GetMethod("Equals", new Type[] { typeof(object) }),TransactionPropagation.Required);
checkTransactionProperties(tas, typeof(object).GetMethod("GetType"), TransactionPropagation.Required);
checkTransactionProperties(tas, typeof(object).GetMethod("ToString"), TransactionPropagation.Required);
}
private void checkTransactionProperties( ITransactionAttributeSource tas, MethodInfo method )
{
ITransactionAttribute ta = tas.ReturnTransactionAttribute( method, null );
Assert.IsNull(ta);
}
private void checkTransactionProperties( ITransactionAttributeSource tas, MethodInfo method, TransactionPropagation transactionPropagation )
{
ITransactionAttribute ta = tas.ReturnTransactionAttribute( method, null );
Assert.IsTrue( ta != null );
Assert.IsTrue( ta.TransactionIsolationLevel == IsolationLevel.ReadCommitted );
Assert.IsTrue( ta.PropagationBehavior == transactionPropagation);
}
}
}
|