diff UnitTests/Linq/OrderByTest.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/OrderByTest.cs	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,332 @@
+using System;
+using System.Linq;
+
+using NUnit.Framework;
+
+using BLToolkit.Data.DataProvider;
+
+// ReSharper disable ReturnValueOfPureMethodIsNotUsed
+
+namespace Data.Linq
+{
+	[TestFixture]
+	public class OrderByTest : TestBase
+	{
+		[Test]
+		public void OrderBy1()
+		{
+			var expected =
+				from ch in Child
+				orderby ch.ParentID descending, ch.ChildID ascending
+				select ch;
+
+			ForEachProvider(db =>
+			{
+				var result =
+					from ch in db.Child
+					orderby ch.ParentID descending, ch.ChildID ascending
+					select ch;
+
+				Assert.IsTrue(result.ToList().SequenceEqual(expected));
+			});
+		}
+
+		[Test]
+		public void OrderBy2()
+		{
+			var expected =
+				from ch in Child
+				orderby ch.ParentID descending, ch.ChildID ascending
+				select ch;
+
+			ForEachProvider(db =>
+			{
+				var result = 
+					from ch in db.Child
+					orderby ch.ParentID descending, ch.ChildID ascending
+					select ch;
+
+				Assert.IsTrue(result.ToList().SequenceEqual(expected));
+			});
+		}
+
+		[Test]
+		public void OrderBy3()
+		{
+			var expected =
+				from ch in
+					from ch in Child
+					orderby ch.ParentID descending
+					select ch
+				orderby ch.ParentID descending , ch.ChildID
+				select ch;
+
+			ForEachProvider(db =>
+			{
+				var result =
+					from ch in
+						from ch in db.Child
+						orderby ch.ParentID descending
+						select ch
+					orderby ch.ParentID descending , ch.ChildID
+					select ch;
+
+				Assert.IsTrue(result.ToList().SequenceEqual(expected));
+			});
+		}
+
+		[Test]
+		public void OrderBy4()
+		{
+			var expected =
+				from ch in
+					from ch in Child
+					orderby ch.ParentID descending
+					select ch
+				orderby ch.ParentID descending, ch.ChildID, ch.ParentID + 1 descending
+				select ch;
+
+			ForEachProvider(db =>
+			{
+				var result =
+					from ch in
+						from ch in db.Child
+						orderby ch.ParentID descending
+						select ch
+					orderby ch.ParentID descending, ch.ChildID, ch.ParentID + 1 descending
+					select ch;
+
+				Assert.IsTrue(result.ToList().SequenceEqual(expected));
+			});
+		}
+
+		[Test]
+		public void OrderBy5()
+		{
+			var expected =
+				from ch in Child
+				orderby ch.ChildID % 2, ch.ChildID
+				select ch;
+
+			ForEachProvider(db =>
+			{
+				var result =
+					from ch in db.Child
+					orderby ch.ChildID % 2, ch.ChildID
+					select ch;
+
+				Assert.IsTrue(result.ToList().SequenceEqual(expected));
+			});
+		}
+
+		[Test]
+		public void OrderBy6([DataContexts(ExcludeLinqService = true)] string context)
+		{
+			using (var dataContext = GetDataContext(context))
+			{
+				if (!(dataContext is TestDbManager)) return;
+				var db = (TestDbManager)dataContext;
+
+				var q =
+					from person in db.Person
+					join patient in db.Patient on person.ID equals patient.PersonID into g
+					from patient in g.DefaultIfEmpty()
+					orderby person.MiddleName // if comment this line then "Diagnosis" is not selected.
+					select new { person.ID, PatientID = patient != null ? (int?)patient.PersonID : null };
+
+				q.ToList();
+
+				Assert.IsFalse(db.LastQuery.Contains("Diagnosis"), "Why do we select Patient.Diagnosis??");
+
+			};
+		}
+
+		[Test]
+		public void ConditionOrderBy()
+		{
+			var expected =
+				from ch in Child
+				orderby ch.ParentID > 0 && ch.ChildID != ch.ParentID descending, ch.ChildID
+				select ch;
+
+			ForEachProvider(db =>
+			{
+				var result =
+					from ch in db.Child
+					orderby ch.ParentID > 0 && ch.ChildID != ch.ParentID descending, ch.ChildID
+					select ch;
+
+				Assert.IsTrue(result.ToList().SequenceEqual(expected));
+			});
+		}
+
+		[Test]
+		public void OrderBySelf1()
+		{
+			var expected = from p in Parent orderby p select p;
+
+			ForEachProvider(db =>
+			{
+				var result = from p in db.Parent orderby p select p;
+				Assert.IsTrue(result.ToList().SequenceEqual(expected));
+			});
+		}
+
+		[Test]
+		public void OrderBySelf2()
+		{
+			var expected = from p in Parent1 orderby p select p;
+
+			ForEachProvider(db =>
+			{
+				var result = from p in db.Parent1 orderby p select p;
+				Assert.IsTrue(result.ToList().SequenceEqual(expected));
+			});
+		}
+
+		[Test]
+		public void OrderBySelectMany1()
+		{
+			var expected =
+				from p in Parent.OrderBy(p => p.ParentID)
+				from c in Child. OrderBy(c => c.ChildID)
+				where p == c.Parent
+				select new { p.ParentID, c.ChildID };
+
+			ForEachProvider(new[] { ProviderName.Access }, db =>
+			{
+				var result =
+					from p in db.Parent.OrderBy(p => p.ParentID)
+					from c in db.Child. OrderBy(c => c.ChildID)
+					where p == c.Parent
+					select new { p.ParentID, c.ChildID };
+
+				Assert.IsTrue(result.ToList().SequenceEqual(expected));
+			});
+		}
+
+		[Test]
+		public void OrderBySelectMany2()
+		{
+			var expected =
+				from p in Parent1.OrderBy(p => p.ParentID)
+				from c in Child.  OrderBy(c => c.ChildID)
+				where p.ParentID == c.Parent1.ParentID
+				select new { p.ParentID, c.ChildID };
+
+			ForEachProvider(db =>
+			{
+				var result =
+					from p in db.Parent1.OrderBy(p => p.ParentID)
+					from c in db.Child.  OrderBy(c => c.ChildID)
+					where p == c.Parent1
+					select new { p.ParentID, c.ChildID };
+
+				Assert.IsTrue(result.ToList().SequenceEqual(expected));
+			});
+		}
+
+		[Test]
+		public void OrderBySelectMany3()
+		{
+			var expected =
+				from p in Parent.OrderBy(p => p.ParentID)
+				from c in Child. OrderBy(c => c.ChildID)
+				where c.Parent == p
+				select new { p.ParentID, c.ChildID };
+
+			ForEachProvider(new[] { ProviderName.Access }, db =>
+			{
+				var result =
+					from p in db.Parent.OrderBy(p => p.ParentID)
+					from c in db.Child. OrderBy(c => c.ChildID)
+					where c.Parent == p
+					select new { p.ParentID, c.ChildID };
+
+				Assert.IsTrue(result.ToList().SequenceEqual(expected));
+			});
+		}
+
+		[Test]
+		public void OrderAscDesc()
+		{
+			var expected = Parent.OrderBy(p => p.ParentID).OrderByDescending(p => p.ParentID);
+
+			ForEachProvider(db =>
+			{
+				var result = db.Parent.OrderBy(p => p.ParentID).OrderByDescending(p => p.ParentID);
+				Assert.IsTrue(result.ToList().SequenceEqual(expected));
+			});
+		}
+
+		[Test]
+		public void Count1()
+		{
+			ForEachProvider(db => Assert.AreEqual(
+				   Parent.OrderBy(p => p.ParentID).Count(),
+				db.Parent.OrderBy(p => p.ParentID).Count()));
+		}
+
+		[Test]
+		public void Count2()
+		{
+			ForEachProvider(new[] { ProviderName.Sybase }, db => Assert.AreEqual(
+				   Parent.OrderBy(p => p.ParentID).Take(3).Count(),
+				db.Parent.OrderBy(p => p.ParentID).Take(3).Count()));
+		}
+
+		[Test]
+		public void Min1()
+		{
+			ForEachProvider(db => Assert.AreEqual(
+				   Parent.OrderBy(p => p.ParentID).Min(p => p.ParentID),
+				db.Parent.OrderBy(p => p.ParentID).Min(p => p.ParentID)));
+		}
+
+		[Test]
+		public void Min2()
+		{
+			ForEachProvider(new[] { ProviderName.Sybase }, db => Assert.AreEqual(
+				   Parent.OrderBy(p => p.ParentID).Take(3).Min(p => p.ParentID),
+				db.Parent.OrderBy(p => p.ParentID).Take(3).Min(p => p.ParentID)));
+		}
+
+		[Test]
+		public void Min3()
+		{
+			ForEachProvider(new[] { ProviderName.Sybase, ProviderName.Informix }, db => Assert.AreEqual(
+				   Parent.OrderBy(p => p.Value1).Take(3).Min(p => p.ParentID),
+				db.Parent.OrderBy(p => p.Value1).Take(3).Min(p => p.ParentID)));
+		}
+
+		[Test]
+		public void Distinct()
+		{
+			ForEachProvider(db => AreEqual(
+				(from p in Parent
+				join c in Child on p.ParentID equals c.ParentID
+				join g in GrandChild on c.ChildID equals  g.ChildID
+				select p).Distinct().OrderBy(p => p.ParentID),
+				(from p in db.Parent
+				join c in db.Child on p.ParentID equals c.ParentID
+				join g in db.GrandChild on c.ChildID equals  g.ChildID
+				select p).Distinct().OrderBy(p => p.ParentID)));
+		}
+
+		[Test]
+		public void Take()
+		{
+			ForEachProvider(db =>
+			{
+				var q =
+					(from p in db.Parent
+					 join c in db.Child on p.ParentID equals c.ParentID
+					 join g in db.GrandChild on c.ChildID equals g.ChildID
+					 select p).Take(3).OrderBy(p => p.ParentID);
+
+				Assert.AreEqual(3, q.AsEnumerable().Count());
+			});
+		}
+
+	}
+}