Mercurial > pub > bltoolkit
diff UnitTests/Linq/TakeSkipTest.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/UnitTests/Linq/TakeSkipTest.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,324 @@ +using System; +using System.Linq; + +using NUnit.Framework; + +using BLToolkit.Data.DataProvider; +using BLToolkit.Data.Linq; + +namespace Data.Linq +{ + using Model; + + [TestFixture] + public class TakeSkipTest : TestBase + { + [Test] + public void Take1() + { + ForEachProvider(db => + { + for (var i = 2; i <= 3; i++) + Assert.AreEqual(i, (from ch in db.Child select ch).Take(i).ToList().Count); + }); + } + + static void TakeParam(ITestDataContext db, int n) + { + Assert.AreEqual(n, (from ch in db.Child select ch).Take(n).ToList().Count); + } + + [Test] + public void Take2() + { + ForEachProvider(db => TakeParam(db, 1)); + } + + [Test] + public void Take3() + { + ForEachProvider(db => + Assert.AreEqual(3, (from ch in db.Child where ch.ChildID > 3 || ch.ChildID < 4 select ch).Take(3).ToList().Count)); + } + + [Test] + public void Take4() + { + ForEachProvider(db => + Assert.AreEqual(3, (from ch in db.Child where ch.ChildID >= 0 && ch.ChildID <= 100 select ch).Take(3).ToList().Count)); + } + + [Test] + public void Take5() + { + ForEachProvider(db => Assert.AreEqual(3, db.Child.Take(3).ToList().Count)); + } + + [Test] + public void Take6() + { + var expected = Child.OrderBy(c => c.ChildID).Take(3); + + ForEachProvider(db => + { + var result = db.Child.OrderBy(c => c.ChildID).Take(3); + Assert.IsTrue(result.ToList().SequenceEqual(expected)); + }); + } + + [Test] + public void Take7() + { + ForEachProvider(db => Assert.AreEqual(3, db.Child.Take(() => 3).ToList().Count)); + } + + [Test] + public void Take8() + { + var n = 3; + ForEachProvider(db => Assert.AreEqual(3, db.Child.Take(() => n).ToList().Count)); + } + + [Test] + public void TakeCount() + { + ForEachProvider(new[] { ProviderName.Sybase }, db => Assert.AreEqual( + Child.Take(5).Count(), + db.Child.Take(5).Count())); + } + + [Test] + public void Skip1() + { + ForEachProvider(db => AreEqual(Child.Skip(3), db.Child.Skip(3))); + } + + [Test] + public void Skip2() + { + var expected = (from ch in Child where ch.ChildID > 3 || ch.ChildID < 4 select ch).Skip(3); + ForEachProvider(db => AreEqual(expected, (from ch in db.Child where ch.ChildID > 3 || ch.ChildID < 4 select ch).Skip(3))); + } + + [Test] + public void Skip3() + { + var expected = (from ch in Child where ch.ChildID >= 0 && ch.ChildID <= 100 select ch).Skip(3); + ForEachProvider(db => AreEqual(expected, (from ch in db.Child where ch.ChildID >= 0 && ch.ChildID <= 100 select ch).Skip(3))); + } + + [Test] + public void Skip4() + { + var expected = Child.OrderByDescending(c => c.ChildID).Skip(3); + + ForEachProvider(db => + { + var result = db.Child.OrderByDescending(c => c.ChildID).Skip(3); + Assert.IsTrue(result.ToList().SequenceEqual(expected)); + }); + } + + [Test] + public void Skip5() + { + var expected = Child.OrderByDescending(c => c.ChildID).ThenBy(c => c.ParentID + 1).Skip(3); + ForEachProvider(db => AreEqual(expected, db.Child.OrderByDescending(c => c.ChildID).ThenBy(c => c.ParentID + 1).Skip(3))); + } + + [Test] + public void Skip6() + { + ForEachProvider(db => AreEqual(Child.Skip(3), db.Child.Skip(() => 3))); + } + + [Test] + public void Skip7() + { + var n = 3; + ForEachProvider(db => AreEqual(Child.Skip(n), db.Child.Skip(() => n))); + } + + [Test] + public void SkipCount() + { + ForEachProvider(new[] { "Sql2000", ProviderName.Sybase, ProviderName.SQLite, ProviderName.Access }, db => Assert.AreEqual( + Child.Skip(2).Count(), + db.Child.Skip(2).Count())); + } + + [Test] + public void SkipTake1() + { + var expected = Child.OrderByDescending(c => c.ChildID).Skip(2).Take(5); + ForEachProvider(db => + { + var result = db.Child.OrderByDescending(c => c.ChildID).Skip(2).Take(5); + Assert.IsTrue(result.ToList().SequenceEqual(expected)); + }); + } + + [Test] + public void SkipTake2() + { + var expected = Child.OrderByDescending(c => c.ChildID).Take(7).Skip(2); + ForEachProvider(db => + { + var result = db.Child.OrderByDescending(c => c.ChildID).Take(7).Skip(2); + Assert.IsTrue(result.ToList().SequenceEqual(expected)); + }); + } + + [Test] + public void SkipTake3() + { + var expected = Child.OrderBy(c => c.ChildID).Skip(1).Take(7).Skip(2); + ForEachProvider(db => + { + var result = db.Child.OrderBy(c => c.ChildID).Skip(1).Take(7).Skip(2); + Assert.IsTrue(result.ToList().SequenceEqual(expected)); + }); + } + + [Test] + public void SkipTake4() + { + var expected = Child.OrderByDescending(c => c.ChildID).Skip(1).Take(7).OrderBy(c => c.ChildID).Skip(2); + ForEachProvider(new[] { "Sql2000", ProviderName.SQLite, ProviderName.Sybase, ProviderName.Access }, db => + { + var result = db.Child.OrderByDescending(c => c.ChildID).Skip(1).Take(7).OrderBy(c => c.ChildID).Skip(2); + Assert.IsTrue(result.ToList().SequenceEqual(expected)); + }); + } + + [Test] + public void SkipTake5() + { + ForEachProvider(db => + { + var list = db.Child.Skip(2).Take(5).ToList(); + Assert.AreEqual(5, list.Count); + }); + } + + void SkipTake6(ITestDataContext db, bool doSkip) + { + var q1 = from g in db.GrandChild select g; + + if (doSkip) + q1 = q1.Skip(12); + q1 = q1.Take(3); + + var q2 = + from c in db.Child + from p in q1 + where c.ParentID == p.ParentID + select c; + + var q3 = from g in GrandChild select g; + + if (doSkip) + q3 = q3.Skip(12); + q3 = q3.Take(3); + + var q4 = + from c in Child + from p in q3 + where c.ParentID == p.ParentID + select c; + + AreEqual(q4, q2); + } + + [Test] + public void SkipTake6() + { + ForEachProvider( + new[] { "Sql2000", ProviderName.SqlCe, ProviderName.SQLite, ProviderName.Access, ProviderName.Sybase }, + db => + { + SkipTake6(db, false); + SkipTake6(db, true); + }); + } + + [Test] + public void SkipTakeCount() + { + ForEachProvider(new[] { "Sql2000", ProviderName.SqlCe, ProviderName.Sybase, ProviderName.SQLite, ProviderName.Access }, db => Assert.AreEqual( + Child.Skip(2).Take(5).Count(), + db.Child.Skip(2).Take(5).Count())); + } + + [Test] + public void SkipFirst() + { + var expected = (from p in Parent where p.ParentID > 1 select p).Skip(1).First(); + + ForEachProvider(db => + { + var result = from p in db.GetTable<Parent>() select p; + result = from p in result where p.ParentID > 1 select p; + var b = result.Skip(1).First(); + + Assert.AreEqual(expected, b); + }); + } + + [Test] + public void ElementAt1([DataContexts] string context) + { + using (var db = GetDataContext(context)) + Assert.AreEqual( + (from p in Parent where p.ParentID > 1 select p).ElementAt(3), + (from p in db.Parent where p.ParentID > 1 select p).ElementAt(3)); + } + + [Test] + public void ElementAt2() + { + var n = 3; + ForEachProvider(db => Assert.AreEqual( + (from p in Parent where p.ParentID > 1 select p).ElementAt(n), + (from p in db.Parent where p.ParentID > 1 select p).ElementAt(() => n))); + } + + [Test] + public void ElementAtDefault1() + { + ForEachProvider(db => Assert.AreEqual( + (from p in Parent where p.ParentID > 1 select p).ElementAtOrDefault(3), + (from p in db.Parent where p.ParentID > 1 select p).ElementAtOrDefault(3))); + } + + [Test] + public void ElementAtDefault2() + { + ForEachProvider(db => Assert.IsNull((from p in db.Parent where p.ParentID > 1 select p).ElementAtOrDefault(300000))); + } + + [Test] + public void ElementAtDefault3() + { + var n = 3; + ForEachProvider(db => Assert.AreEqual( + (from p in Parent where p.ParentID > 1 select p).ElementAtOrDefault(n), + (from p in db.Parent where p.ParentID > 1 select p).ElementAtOrDefault(() => n))); + } + + [Test] + public void ElementAtDefault4() + { + var n = 300000; + ForEachProvider(db => Assert.IsNull((from p in db.Parent where p.ParentID > 1 select p).ElementAtOrDefault(() => n))); + } + + [Test] + public void ElementAtDefault5() + { + ForEachProvider(db => Assert.AreEqual( + Person.ElementAtOrDefault(3), + db.Person.ElementAtOrDefault(3))); + } + } +}