From: <fab...@us...> - 2010-12-15 21:57:32
|
Revision: 5317 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5317&view=rev Author: fabiomaulo Date: 2010-12-15 21:57:25 +0000 (Wed, 15 Dec 2010) Log Message: ----------- First as enumerable extensions Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Util/EnumerableExtensions.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/UtilityTest/EnumerableExtensionsTests/FirstExtensionTests.cs Modified: trunk/nhibernate/src/NHibernate/Util/EnumerableExtensions.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Util/EnumerableExtensions.cs 2010-12-15 21:36:23 UTC (rev 5316) +++ trunk/nhibernate/src/NHibernate/Util/EnumerableExtensions.cs 2010-12-15 21:57:25 UTC (rev 5317) @@ -21,6 +21,33 @@ return false; } + public static object First(this IEnumerable source) + { + if (source == null) + { + throw new ArgumentNullException("source"); + } + IList collection = source as IList; + if (collection != null) + { + if (collection.Count > 0) + { + return collection[0]; + } + } + else + { + using (DisposableEnumerator enumerator = source.GetDisposableEnumerator()) + { + if (enumerator.MoveNext()) + { + return enumerator.Current; + } + } + } + throw new InvalidOperationException("Sequence contains no elements"); + } + private static DisposableEnumerator GetDisposableEnumerator(this IEnumerable source) { return new DisposableEnumerator(source); Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-12-15 21:36:23 UTC (rev 5316) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-12-15 21:57:25 UTC (rev 5317) @@ -581,6 +581,7 @@ <Compile Include="TypesTest\XmlDocClass.cs" /> <Compile Include="TypesTest\XmlDocTypeFixture.cs" /> <Compile Include="UtilityTest\EnumerableExtensionsTests\AnyExtensionTests.cs" /> + <Compile Include="UtilityTest\EnumerableExtensionsTests\FirstExtensionTests.cs" /> <Compile Include="UtilityTest\ReflectionHelperIsMethodOfTests.cs" /> <Compile Include="UtilityTest\ReflectionHelperTest.cs" /> <Compile Include="Linq\RegresstionTests.cs" /> Added: trunk/nhibernate/src/NHibernate.Test/UtilityTest/EnumerableExtensionsTests/FirstExtensionTests.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/UtilityTest/EnumerableExtensionsTests/FirstExtensionTests.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/UtilityTest/EnumerableExtensionsTests/FirstExtensionTests.cs 2010-12-15 21:57:25 UTC (rev 5317) @@ -0,0 +1,29 @@ +using System; +using System.Collections; +using NHibernate.Util; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.UtilityTest.EnumerableExtensionsTests +{ + public class FirstExtensionTests + { + [Test] + public void WhenNullThenThenThrows() + { + Executing.This(() => ((IEnumerable)null).First()).Should().Throw<ArgumentNullException>(); + } + + [Test] + public void WhenHasElementsThenReturnFirst() + { + (new[] { 2, 1 }).First().Should().Be(2); + } + + [Test] + public void WhenEmptyThenThrowsInvalidOperation() + { + Executing.This(() => (new object[0]).First()).Should().Throw<InvalidOperationException>(); + } + } +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |