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

@@ -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);

View File

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

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