fixed SPRNET-1160, SPRNET-1178
This commit is contained in:
@@ -140,7 +140,7 @@ namespace Spring.Objects.Support
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Ignore("Sort ordering is not preserved (unstable) with equal elements (c.f. System.Array.Sort (Array, IComparer)))")]
|
||||
// [Ignore("Sort ordering is not preserved (unstable) with equal elements (c.f. System.Array.Sort (Array, IComparer)))")]
|
||||
public void OrderingIsUnperturbedWithEqualProps()
|
||||
{
|
||||
ISortDefinition definition = new MutableSortDefinition("Age", false, true);
|
||||
|
||||
@@ -5,303 +5,303 @@ using Spring.Objects;
|
||||
|
||||
namespace Spring.Util
|
||||
{
|
||||
[TestFixture]
|
||||
public class CollectionUtilsTests
|
||||
{
|
||||
internal class NoContainsNoAddCollection : ICollection
|
||||
{
|
||||
internal class Iterator : IEnumerator
|
||||
{
|
||||
#region IEnumerator Members
|
||||
[TestFixture]
|
||||
public class CollectionUtilsTests
|
||||
{
|
||||
internal class NoContainsNoAddCollection : ICollection
|
||||
{
|
||||
internal class Iterator : IEnumerator
|
||||
{
|
||||
#region IEnumerator Members
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
// TODO: Add Iterator.Reset implementation
|
||||
}
|
||||
public void Reset()
|
||||
{
|
||||
// TODO: Add Iterator.Reset implementation
|
||||
}
|
||||
|
||||
public object Current
|
||||
{
|
||||
get
|
||||
{
|
||||
// TODO: Add Iterator.Current getter implementation
|
||||
return null;
|
||||
}
|
||||
}
|
||||
public object Current
|
||||
{
|
||||
get
|
||||
{
|
||||
// TODO: Add Iterator.Current getter implementation
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public bool MoveNext()
|
||||
{
|
||||
// TODO: Add Iterator.MoveNext implementation
|
||||
return false;
|
||||
}
|
||||
public bool MoveNext()
|
||||
{
|
||||
// TODO: Add Iterator.MoveNext implementation
|
||||
return false;
|
||||
}
|
||||
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void CopyTo(Array array, int index)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
public void CopyTo(Array array, int index)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public int Count
|
||||
{
|
||||
get { return 0; }
|
||||
}
|
||||
public int Count
|
||||
{
|
||||
get { return 0; }
|
||||
}
|
||||
|
||||
public object SyncRoot
|
||||
{
|
||||
get { throw new NotImplementedException(); }
|
||||
}
|
||||
public object SyncRoot
|
||||
{
|
||||
get { throw new NotImplementedException(); }
|
||||
}
|
||||
|
||||
public bool IsSynchronized
|
||||
{
|
||||
get { throw new NotImplementedException(); }
|
||||
}
|
||||
public bool IsSynchronized
|
||||
{
|
||||
get { throw new NotImplementedException(); }
|
||||
}
|
||||
|
||||
public IEnumerator GetEnumerator()
|
||||
{
|
||||
return new Iterator();
|
||||
}
|
||||
}
|
||||
[Test]
|
||||
[ExpectedException(typeof(ArgumentNullException))]
|
||||
public void ContainsNullCollection()
|
||||
{
|
||||
CollectionUtils.Contains(null, null);
|
||||
}
|
||||
[Test]
|
||||
public void ContainsNullObject()
|
||||
{
|
||||
ArrayList list = new ArrayList();
|
||||
list.Add(null);
|
||||
Assert.IsTrue(CollectionUtils.Contains(list, null));
|
||||
}
|
||||
[Test]
|
||||
[ExpectedException(typeof(InvalidOperationException))]
|
||||
public void ContainsCollectionDoesNotImplementContains()
|
||||
{
|
||||
NoContainsNoAddCollection noAddCollection = new NoContainsNoAddCollection();
|
||||
CollectionUtils.Contains(noAddCollection, new object());
|
||||
}
|
||||
[Test]
|
||||
public void ContainsValidElement()
|
||||
{
|
||||
ArrayList list = new ArrayList();
|
||||
list.Add(1);
|
||||
list.Add(2);
|
||||
list.Add(3);
|
||||
list.Add(4);
|
||||
|
||||
Assert.IsTrue(CollectionUtils.Contains(list, 3));
|
||||
}
|
||||
[Test]
|
||||
public void ContainsDoesNotContainElement()
|
||||
{
|
||||
ArrayList list = new ArrayList();
|
||||
list.Add(1);
|
||||
list.Add(2);
|
||||
list.Add(3);
|
||||
list.Add(4);
|
||||
public IEnumerator GetEnumerator()
|
||||
{
|
||||
return new Iterator();
|
||||
}
|
||||
}
|
||||
[Test]
|
||||
[ExpectedException(typeof(ArgumentNullException))]
|
||||
public void ContainsNullCollection()
|
||||
{
|
||||
CollectionUtils.Contains(null, null);
|
||||
}
|
||||
[Test]
|
||||
public void ContainsNullObject()
|
||||
{
|
||||
ArrayList list = new ArrayList();
|
||||
list.Add(null);
|
||||
Assert.IsTrue(CollectionUtils.Contains(list, null));
|
||||
}
|
||||
[Test]
|
||||
[ExpectedException(typeof(InvalidOperationException))]
|
||||
public void ContainsCollectionDoesNotImplementContains()
|
||||
{
|
||||
NoContainsNoAddCollection noAddCollection = new NoContainsNoAddCollection();
|
||||
CollectionUtils.Contains(noAddCollection, new object());
|
||||
}
|
||||
[Test]
|
||||
public void ContainsValidElement()
|
||||
{
|
||||
ArrayList list = new ArrayList();
|
||||
list.Add(1);
|
||||
list.Add(2);
|
||||
list.Add(3);
|
||||
list.Add(4);
|
||||
|
||||
Assert.IsFalse(CollectionUtils.Contains(list, 5));
|
||||
}
|
||||
[Test]
|
||||
[ExpectedException(typeof(ArgumentNullException))]
|
||||
public void AddNullCollection()
|
||||
{
|
||||
CollectionUtils.Add(null, null);
|
||||
}
|
||||
[Test]
|
||||
public void AddNullObject()
|
||||
{
|
||||
ArrayList list = new ArrayList();
|
||||
CollectionUtils.Add(list, null);
|
||||
Assert.IsTrue(list.Count == 1);
|
||||
}
|
||||
[Test]
|
||||
[ExpectedException(typeof(InvalidOperationException))]
|
||||
public void AddCollectionDoesNotImplementAdd()
|
||||
{
|
||||
NoContainsNoAddCollection noAddCollection = new NoContainsNoAddCollection();
|
||||
CollectionUtils.Add(noAddCollection, null);
|
||||
}
|
||||
[Test]
|
||||
public void AddValidElement()
|
||||
{
|
||||
ArrayList list = new ArrayList();
|
||||
object obj1 = new object();
|
||||
CollectionUtils.Add(list, obj1);
|
||||
Assert.IsTrue(list.Count == 1);
|
||||
}
|
||||
[Test]
|
||||
[ExpectedException(typeof(ArgumentNullException))]
|
||||
public void ContainsAllNullTargetCollection()
|
||||
{
|
||||
CollectionUtils.ContainsAll(null, new ArrayList());
|
||||
}
|
||||
Assert.IsTrue(CollectionUtils.Contains(list, 3));
|
||||
}
|
||||
[Test]
|
||||
public void ContainsDoesNotContainElement()
|
||||
{
|
||||
ArrayList list = new ArrayList();
|
||||
list.Add(1);
|
||||
list.Add(2);
|
||||
list.Add(3);
|
||||
list.Add(4);
|
||||
|
||||
[Test]
|
||||
[ExpectedException(typeof(ArgumentNullException))]
|
||||
public void ContainsAllSourceNullCollection()
|
||||
{
|
||||
CollectionUtils.ContainsAll(new ArrayList(), null);
|
||||
}
|
||||
[Test]
|
||||
[ExpectedException(typeof(InvalidOperationException))]
|
||||
public void ContainsAllDoesNotImplementContains()
|
||||
{
|
||||
CollectionUtils.ContainsAll(new NoContainsNoAddCollection(), new ArrayList());
|
||||
}
|
||||
[Test]
|
||||
public void DoesNotContainAllElements()
|
||||
{
|
||||
ArrayList target = new ArrayList();
|
||||
target.Add(1);
|
||||
target.Add(2);
|
||||
target.Add(3);
|
||||
Assert.IsFalse(CollectionUtils.Contains(list, 5));
|
||||
}
|
||||
[Test]
|
||||
[ExpectedException(typeof(ArgumentNullException))]
|
||||
public void AddNullCollection()
|
||||
{
|
||||
CollectionUtils.Add(null, null);
|
||||
}
|
||||
[Test]
|
||||
public void AddNullObject()
|
||||
{
|
||||
ArrayList list = new ArrayList();
|
||||
CollectionUtils.Add(list, null);
|
||||
Assert.IsTrue(list.Count == 1);
|
||||
}
|
||||
[Test]
|
||||
[ExpectedException(typeof(InvalidOperationException))]
|
||||
public void AddCollectionDoesNotImplementAdd()
|
||||
{
|
||||
NoContainsNoAddCollection noAddCollection = new NoContainsNoAddCollection();
|
||||
CollectionUtils.Add(noAddCollection, null);
|
||||
}
|
||||
[Test]
|
||||
public void AddValidElement()
|
||||
{
|
||||
ArrayList list = new ArrayList();
|
||||
object obj1 = new object();
|
||||
CollectionUtils.Add(list, obj1);
|
||||
Assert.IsTrue(list.Count == 1);
|
||||
}
|
||||
[Test]
|
||||
[ExpectedException(typeof(ArgumentNullException))]
|
||||
public void ContainsAllNullTargetCollection()
|
||||
{
|
||||
CollectionUtils.ContainsAll(null, new ArrayList());
|
||||
}
|
||||
|
||||
ArrayList source = new ArrayList();
|
||||
source.Add(1);
|
||||
[Test]
|
||||
[ExpectedException(typeof(ArgumentNullException))]
|
||||
public void ContainsAllSourceNullCollection()
|
||||
{
|
||||
CollectionUtils.ContainsAll(new ArrayList(), null);
|
||||
}
|
||||
[Test]
|
||||
[ExpectedException(typeof(InvalidOperationException))]
|
||||
public void ContainsAllDoesNotImplementContains()
|
||||
{
|
||||
CollectionUtils.ContainsAll(new NoContainsNoAddCollection(), new ArrayList());
|
||||
}
|
||||
[Test]
|
||||
public void DoesNotContainAllElements()
|
||||
{
|
||||
ArrayList target = new ArrayList();
|
||||
target.Add(1);
|
||||
target.Add(2);
|
||||
target.Add(3);
|
||||
|
||||
Assert.IsTrue(CollectionUtils.ContainsAll(target, source));
|
||||
}
|
||||
[Test]
|
||||
public void ContainsAllElements()
|
||||
{
|
||||
ArrayList target = new ArrayList();
|
||||
target.Add(1);
|
||||
target.Add(2);
|
||||
target.Add(3);
|
||||
ArrayList source = new ArrayList();
|
||||
source.Add(1);
|
||||
|
||||
ArrayList source = new ArrayList();
|
||||
source.Add(1);
|
||||
source.Add(2);
|
||||
source.Add(3);
|
||||
Assert.IsTrue(CollectionUtils.ContainsAll(target, source));
|
||||
}
|
||||
[Test]
|
||||
public void ContainsAllElements()
|
||||
{
|
||||
ArrayList target = new ArrayList();
|
||||
target.Add(1);
|
||||
target.Add(2);
|
||||
target.Add(3);
|
||||
|
||||
Assert.IsTrue(CollectionUtils.ContainsAll(target, source));
|
||||
}
|
||||
[Test]
|
||||
public void ContainsAllElementsWithNoElementsInSourceCollection()
|
||||
{
|
||||
ArrayList target = new ArrayList();
|
||||
target.Add(1);
|
||||
target.Add(2);
|
||||
target.Add(3);
|
||||
ArrayList source = new ArrayList();
|
||||
source.Add(1);
|
||||
source.Add(2);
|
||||
source.Add(3);
|
||||
|
||||
ArrayList source = new ArrayList();
|
||||
Assert.IsTrue(CollectionUtils.ContainsAll(target, source));
|
||||
}
|
||||
[Test]
|
||||
public void ContainsAllElementsWithNoElementsEitherCollection()
|
||||
{
|
||||
ArrayList target = new ArrayList();
|
||||
ArrayList source = new ArrayList();
|
||||
Assert.IsFalse(CollectionUtils.ContainsAll(target, source));
|
||||
}
|
||||
[Test]
|
||||
[ExpectedException(typeof(ArgumentNullException))]
|
||||
public void ToArrayNullTargetCollection()
|
||||
{
|
||||
CollectionUtils.ToArrayList(null);
|
||||
}
|
||||
[Test]
|
||||
public void ToArrayAllElements()
|
||||
{
|
||||
ArrayList target = new ArrayList();
|
||||
target.Add(1);
|
||||
target.Add(2);
|
||||
target.Add(3);
|
||||
Assert.IsTrue(CollectionUtils.ContainsAll(target, source));
|
||||
}
|
||||
[Test]
|
||||
public void ContainsAllElementsWithNoElementsInSourceCollection()
|
||||
{
|
||||
ArrayList target = new ArrayList();
|
||||
target.Add(1);
|
||||
target.Add(2);
|
||||
target.Add(3);
|
||||
|
||||
ArrayList source = CollectionUtils.ToArrayList(target);
|
||||
ArrayList source = new ArrayList();
|
||||
Assert.IsTrue(CollectionUtils.ContainsAll(target, source));
|
||||
}
|
||||
[Test]
|
||||
public void ContainsAllElementsWithNoElementsEitherCollection()
|
||||
{
|
||||
ArrayList target = new ArrayList();
|
||||
ArrayList source = new ArrayList();
|
||||
Assert.IsFalse(CollectionUtils.ContainsAll(target, source));
|
||||
}
|
||||
[Test]
|
||||
[ExpectedException(typeof(ArgumentNullException))]
|
||||
public void ToArrayNullTargetCollection()
|
||||
{
|
||||
CollectionUtils.ToArrayList(null);
|
||||
}
|
||||
[Test]
|
||||
public void ToArrayAllElements()
|
||||
{
|
||||
ArrayList target = new ArrayList();
|
||||
target.Add(1);
|
||||
target.Add(2);
|
||||
target.Add(3);
|
||||
|
||||
Assert.AreEqual(target.Count, source.Count);
|
||||
}
|
||||
[Test]
|
||||
public void EmptyArrayElements()
|
||||
{
|
||||
ArrayList source = CollectionUtils.ToArrayList(new NoContainsNoAddCollection());
|
||||
Assert.AreEqual(0, source.Count);
|
||||
}
|
||||
ArrayList source = CollectionUtils.ToArrayList(target);
|
||||
|
||||
[Test]
|
||||
[ExpectedException(typeof(ArgumentNullException))]
|
||||
public void RemoveAllTargetNullCollection()
|
||||
{
|
||||
CollectionUtils.RemoveAll(null, new ArrayList());
|
||||
}
|
||||
[Test]
|
||||
[ExpectedException(typeof(ArgumentNullException))]
|
||||
public void RemoveAllSourceNullCollection()
|
||||
{
|
||||
CollectionUtils.RemoveAll(new ArrayList(), null);
|
||||
}
|
||||
[Test]
|
||||
[ExpectedException(typeof(InvalidOperationException))]
|
||||
public void RemoveAllTargetCollectionDoesNotImplementContains()
|
||||
{
|
||||
CollectionUtils.RemoveAll(new NoContainsNoAddCollection(), new ArrayList());
|
||||
}
|
||||
[Test]
|
||||
[ExpectedException(typeof(InvalidOperationException))]
|
||||
public void RemoveAllTargetCollectionDoesNotImplementRemove()
|
||||
{
|
||||
CollectionUtils.RemoveAll(new NoContainsNoAddCollection(), new ArrayList());
|
||||
}
|
||||
[Test]
|
||||
public void RemoveAllNoElements()
|
||||
{
|
||||
ArrayList target = new ArrayList();
|
||||
target.Add(1);
|
||||
target.Add(2);
|
||||
target.Add(3);
|
||||
Assert.AreEqual(target.Count, source.Count);
|
||||
}
|
||||
[Test]
|
||||
public void EmptyArrayElements()
|
||||
{
|
||||
ArrayList source = CollectionUtils.ToArrayList(new NoContainsNoAddCollection());
|
||||
Assert.AreEqual(0, source.Count);
|
||||
}
|
||||
|
||||
ArrayList source = new ArrayList();
|
||||
source.Add(4);
|
||||
source.Add(5);
|
||||
source.Add(6);
|
||||
[Test]
|
||||
[ExpectedException(typeof(ArgumentNullException))]
|
||||
public void RemoveAllTargetNullCollection()
|
||||
{
|
||||
CollectionUtils.RemoveAll(null, new ArrayList());
|
||||
}
|
||||
[Test]
|
||||
[ExpectedException(typeof(ArgumentNullException))]
|
||||
public void RemoveAllSourceNullCollection()
|
||||
{
|
||||
CollectionUtils.RemoveAll(new ArrayList(), null);
|
||||
}
|
||||
[Test]
|
||||
[ExpectedException(typeof(InvalidOperationException))]
|
||||
public void RemoveAllTargetCollectionDoesNotImplementContains()
|
||||
{
|
||||
CollectionUtils.RemoveAll(new NoContainsNoAddCollection(), new ArrayList());
|
||||
}
|
||||
[Test]
|
||||
[ExpectedException(typeof(InvalidOperationException))]
|
||||
public void RemoveAllTargetCollectionDoesNotImplementRemove()
|
||||
{
|
||||
CollectionUtils.RemoveAll(new NoContainsNoAddCollection(), new ArrayList());
|
||||
}
|
||||
[Test]
|
||||
public void RemoveAllNoElements()
|
||||
{
|
||||
ArrayList target = new ArrayList();
|
||||
target.Add(1);
|
||||
target.Add(2);
|
||||
target.Add(3);
|
||||
|
||||
CollectionUtils.RemoveAll(target, source);
|
||||
Assert.IsTrue(3 == target.Count);
|
||||
}
|
||||
[Test]
|
||||
public void RemoveAllSomeElements()
|
||||
{
|
||||
ArrayList target = new ArrayList();
|
||||
target.Add(1);
|
||||
target.Add(2);
|
||||
target.Add(3);
|
||||
target.Add(4);
|
||||
target.Add(5);
|
||||
ArrayList source = new ArrayList();
|
||||
source.Add(4);
|
||||
source.Add(5);
|
||||
source.Add(6);
|
||||
|
||||
ArrayList source = new ArrayList();
|
||||
source.Add(4);
|
||||
source.Add(5);
|
||||
source.Add(6);
|
||||
CollectionUtils.RemoveAll(target, source);
|
||||
Assert.IsTrue(3 == target.Count);
|
||||
}
|
||||
[Test]
|
||||
public void RemoveAllSomeElements()
|
||||
{
|
||||
ArrayList target = new ArrayList();
|
||||
target.Add(1);
|
||||
target.Add(2);
|
||||
target.Add(3);
|
||||
target.Add(4);
|
||||
target.Add(5);
|
||||
|
||||
CollectionUtils.RemoveAll(target, source);
|
||||
Assert.IsTrue(3 == target.Count);
|
||||
}
|
||||
[Test]
|
||||
public void RemoveAllAllElements()
|
||||
{
|
||||
ArrayList target = new ArrayList();
|
||||
target.Add(1);
|
||||
target.Add(2);
|
||||
target.Add(3);
|
||||
target.Add(4);
|
||||
target.Add(5);
|
||||
ArrayList source = new ArrayList();
|
||||
source.Add(4);
|
||||
source.Add(5);
|
||||
source.Add(6);
|
||||
|
||||
ArrayList source = new ArrayList();
|
||||
source.Add(1);
|
||||
source.Add(2);
|
||||
source.Add(3);
|
||||
source.Add(4);
|
||||
source.Add(5);
|
||||
source.Add(6);
|
||||
CollectionUtils.RemoveAll(target, source);
|
||||
Assert.IsTrue(3 == target.Count);
|
||||
}
|
||||
[Test]
|
||||
public void RemoveAllAllElements()
|
||||
{
|
||||
ArrayList target = new ArrayList();
|
||||
target.Add(1);
|
||||
target.Add(2);
|
||||
target.Add(3);
|
||||
target.Add(4);
|
||||
target.Add(5);
|
||||
|
||||
CollectionUtils.RemoveAll(target, source);
|
||||
Assert.IsTrue(0 == target.Count);
|
||||
}
|
||||
ArrayList source = new ArrayList();
|
||||
source.Add(1);
|
||||
source.Add(2);
|
||||
source.Add(3);
|
||||
source.Add(4);
|
||||
source.Add(5);
|
||||
source.Add(6);
|
||||
|
||||
CollectionUtils.RemoveAll(target, source);
|
||||
Assert.IsTrue(0 == target.Count);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsCollectionEmptyOrNull()
|
||||
@@ -331,14 +331,14 @@ namespace Spring.Util
|
||||
ArrayList list = new ArrayList();
|
||||
Assert.IsNull(CollectionUtils.FindValueOfType(list, typeof(String)));
|
||||
list.Add("foo");
|
||||
object obj = CollectionUtils.FindValueOfType(list, typeof (String));
|
||||
Assert.IsNotNull(obj);
|
||||
object obj = CollectionUtils.FindValueOfType(list, typeof(String));
|
||||
Assert.IsNotNull(obj);
|
||||
Assert.IsNotNull(obj as string);
|
||||
string val = obj as string;
|
||||
Assert.AreEqual("foo", val);
|
||||
|
||||
list.Add(new TestObject("Joe", 34));
|
||||
obj = CollectionUtils.FindValueOfType(list, typeof (TestObject));
|
||||
obj = CollectionUtils.FindValueOfType(list, typeof(TestObject));
|
||||
Assert.IsNotNull(obj);
|
||||
TestObject to = obj as TestObject;
|
||||
Assert.IsNotNull(to);
|
||||
@@ -349,7 +349,8 @@ namespace Spring.Util
|
||||
{
|
||||
obj = CollectionUtils.FindValueOfType(list, typeof(TestObject));
|
||||
Assert.Fail("Should have thrown exception");
|
||||
} catch (ArgumentException)
|
||||
}
|
||||
catch (ArgumentException)
|
||||
{
|
||||
//ok
|
||||
}
|
||||
@@ -361,7 +362,7 @@ namespace Spring.Util
|
||||
{
|
||||
ArrayList list = new ArrayList();
|
||||
list.Add("mystring");
|
||||
string[] strList = (string[]) CollectionUtils.ToArray(list, typeof(string));
|
||||
string[] strList = (string[])CollectionUtils.ToArray(list, typeof(string));
|
||||
Assert.AreEqual(1, strList.Length);
|
||||
|
||||
try
|
||||
@@ -369,7 +370,39 @@ namespace Spring.Util
|
||||
CollectionUtils.ToArray(list, typeof(Type));
|
||||
Assert.Fail("should fail");
|
||||
}
|
||||
catch(InvalidCastException) {}
|
||||
catch (InvalidCastException) { }
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void StableSorting()
|
||||
{
|
||||
DictionaryEntry[] entries = new DictionaryEntry[]
|
||||
{
|
||||
new DictionaryEntry(5, 4),
|
||||
new DictionaryEntry(5, 5),
|
||||
new DictionaryEntry(3, 2),
|
||||
new DictionaryEntry(3, 3),
|
||||
new DictionaryEntry(1, 0),
|
||||
new DictionaryEntry(1, 1),
|
||||
};
|
||||
|
||||
ICollection resultList = CollectionUtils.StableSort(entries, new CollectionUtils.CompareCallback(CompareEntries));
|
||||
DictionaryEntry[] resultEntries = (DictionaryEntry[]) CollectionUtils.ToArray(resultList, typeof(DictionaryEntry));
|
||||
|
||||
Assert.AreEqual(0, resultEntries[0].Value);
|
||||
Assert.AreEqual(1, resultEntries[1].Value);
|
||||
Assert.AreEqual(2, resultEntries[2].Value);
|
||||
Assert.AreEqual(3, resultEntries[3].Value);
|
||||
Assert.AreEqual(4, resultEntries[4].Value);
|
||||
Assert.AreEqual(5, resultEntries[5].Value);
|
||||
}
|
||||
|
||||
private int CompareEntries(object x, object y)
|
||||
{
|
||||
DictionaryEntry dex = (DictionaryEntry)x;
|
||||
DictionaryEntry dey = (DictionaryEntry)y;
|
||||
|
||||
return ((int)dex.Key).CompareTo(dey.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user