|
From: <fab...@us...> - 2010-12-15 21:36:31
|
Revision: 5316
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5316&view=rev
Author: fabiomaulo
Date: 2010-12-15 21:36:23 +0000 (Wed, 15 Dec 2010)
Log Message:
-----------
EnumerableExtensions (perhaps the place to replace some old stuff)
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/NHibernate.csproj
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate/Util/EnumerableExtensions.cs
trunk/nhibernate/src/NHibernate.Test/UtilityTest/EnumerableExtensionsTests/
trunk/nhibernate/src/NHibernate.Test/UtilityTest/EnumerableExtensionsTests/AnyExtensionTests.cs
Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2010-12-15 18:29:52 UTC (rev 5315)
+++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2010-12-15 21:36:23 UTC (rev 5316)
@@ -440,6 +440,7 @@
<Compile Include="Util\ADOExceptionReporter.cs" />
<Compile Include="Util\ArrayHelper.cs" />
<Compile Include="Util\CollectionPrinter.cs" />
+ <Compile Include="Util\EnumerableExtensions.cs" />
<Compile Include="Util\IdentityMap.cs" />
<Compile Include="Util\JoinedEnumerable.cs" />
<Compile Include="Util\ObjectUtils.cs" />
Added: trunk/nhibernate/src/NHibernate/Util/EnumerableExtensions.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Util/EnumerableExtensions.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Util/EnumerableExtensions.cs 2010-12-15 21:36:23 UTC (rev 5316)
@@ -0,0 +1,75 @@
+using System;
+using System.Collections;
+
+namespace NHibernate.Util
+{
+ public static class EnumerableExtensions
+ {
+ public static bool Any(this IEnumerable source)
+ {
+ if (source == null)
+ {
+ throw new ArgumentNullException("source");
+ }
+ using (DisposableEnumerator enumerator = source.GetDisposableEnumerator())
+ {
+ if (enumerator.MoveNext())
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static DisposableEnumerator GetDisposableEnumerator(this IEnumerable source)
+ {
+ return new DisposableEnumerator(source);
+ }
+
+ #region Nested type: DisposableEnumerator
+
+ internal class DisposableEnumerator : IDisposable, IEnumerator
+ {
+ private readonly IEnumerator wrapped;
+
+ public DisposableEnumerator(IEnumerable source)
+ {
+ wrapped = source.GetEnumerator();
+ }
+
+ #region IDisposable Members
+
+ public void Dispose()
+ {
+ var disposable = wrapped as IDisposable;
+ if (disposable != null)
+ {
+ disposable.Dispose();
+ }
+ }
+
+ #endregion
+
+ #region IEnumerator Members
+
+ public bool MoveNext()
+ {
+ return wrapped.MoveNext();
+ }
+
+ public void Reset()
+ {
+ wrapped.Reset();
+ }
+
+ public object Current
+ {
+ get { return wrapped.Current; }
+ }
+
+ #endregion
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-12-15 18:29:52 UTC (rev 5315)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-12-15 21:36:23 UTC (rev 5316)
@@ -580,6 +580,7 @@
<Compile Include="TypesTest\XDocTypeFixture.cs" />
<Compile Include="TypesTest\XmlDocClass.cs" />
<Compile Include="TypesTest\XmlDocTypeFixture.cs" />
+ <Compile Include="UtilityTest\EnumerableExtensionsTests\AnyExtensionTests.cs" />
<Compile Include="UtilityTest\ReflectionHelperIsMethodOfTests.cs" />
<Compile Include="UtilityTest\ReflectionHelperTest.cs" />
<Compile Include="Linq\RegresstionTests.cs" />
Added: trunk/nhibernate/src/NHibernate.Test/UtilityTest/EnumerableExtensionsTests/AnyExtensionTests.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/UtilityTest/EnumerableExtensionsTests/AnyExtensionTests.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/UtilityTest/EnumerableExtensionsTests/AnyExtensionTests.cs 2010-12-15 21:36:23 UTC (rev 5316)
@@ -0,0 +1,75 @@
+using System;
+using System.Collections;
+using NUnit.Framework;
+using NHibernate.Util;
+using SharpTestsEx;
+
+namespace NHibernate.Test.UtilityTest.EnumerableExtensionsTests
+{
+ public class AnyExtensionTests
+ {
+ [Test]
+ public void WhenEmptyListThenReturnFalse()
+ {
+ (new object[0]).Any().Should().Be.False();
+ }
+
+ [Test]
+ public void WhenNoEmptyListThenReturnTrue()
+ {
+ (new object[1]).Any().Should().Be.True();
+ }
+
+ private class MyDisposableList: IEnumerable
+ {
+ private readonly System.Action enumeratorDisposeCallback;
+
+ public MyDisposableList(System.Action enumeratorDisposeCallback)
+ {
+ this.enumeratorDisposeCallback = enumeratorDisposeCallback;
+ }
+
+ public IEnumerator GetEnumerator()
+ {
+ return new EmptyEnumerator(enumeratorDisposeCallback);
+ }
+ }
+
+ private class EmptyEnumerator : IEnumerator, IDisposable
+ {
+ private readonly System.Action disposeCallback;
+
+ public EmptyEnumerator(System.Action disposeCallback)
+ {
+ this.disposeCallback = disposeCallback;
+ }
+
+ public void Reset()
+ {
+ }
+
+ public object Current
+ {
+ get { throw new InvalidOperationException("EmptyEnumerator"); }
+ }
+
+ public bool MoveNext()
+ {
+ return false;
+ }
+
+ public void Dispose()
+ {
+ disposeCallback();
+ }
+ }
+
+ [Test]
+ public void WhenDisposableListThenCallDispose()
+ {
+ var disposeCalled = false;
+ (new MyDisposableList(()=> disposeCalled = true)).Any();
+ disposeCalled.Should().Be.True();
+ }
+ }
+}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|