Mercurial > pub > bltoolkit
comparison UnitTests/Linq/ElementOperationTest.cs @ 0:f990fcb411a9
Копия текущей версии из github
| author | cin | 
|---|---|
| date | Thu, 27 Mar 2014 21:46:09 +0400 | 
| parents | |
| children | 
   comparison
  equal
  deleted
  inserted
  replaced
| -1:000000000000 | 0:f990fcb411a9 | 
|---|---|
| 1 using System.Linq; | |
| 2 | |
| 3 using BLToolkit.Data.DataProvider; | |
| 4 using BLToolkit.Data.Linq; | |
| 5 using NUnit.Framework; | |
| 6 | |
| 7 namespace Data.Linq | |
| 8 { | |
| 9 using Model; | |
| 10 | |
| 11 [TestFixture] | |
| 12 public class ElementOperationTest : TestBase | |
| 13 { | |
| 14 [Test] | |
| 15 public void First() | |
| 16 { | |
| 17 ForEachProvider(db => Assert.AreEqual( | |
| 18 Parent.OrderByDescending(p => p.ParentID).First().ParentID, | |
| 19 db.Parent.OrderByDescending(p => p.ParentID).First().ParentID)); | |
| 20 } | |
| 21 | |
| 22 [Test] | |
| 23 public void FirstWhere() | |
| 24 { | |
| 25 ForEachProvider(db => Assert.AreEqual(2, db.Parent.First(p => p.ParentID == 2).ParentID)); | |
| 26 } | |
| 27 | |
| 28 [Test] | |
| 29 public void FirstOrDefault() | |
| 30 { | |
| 31 ForEachProvider(db => Assert.IsNull((from p in db.Parent where p.ParentID == 100 select p).FirstOrDefault())); | |
| 32 } | |
| 33 | |
| 34 [Test] | |
| 35 public void FirstOrDefaultWhere() | |
| 36 { | |
| 37 ForEachProvider(db => Assert.AreEqual(2, db.Parent.FirstOrDefault(p => p.ParentID == 2).ParentID)); | |
| 38 } | |
| 39 | |
| 40 [Test] | |
| 41 public void Single() | |
| 42 { | |
| 43 ForEachProvider(db => Assert.AreEqual(1, db.Parent.Where(p => p.ParentID == 1).Single().ParentID)); | |
| 44 } | |
| 45 | |
| 46 [Test] | |
| 47 public void SingleWhere() | |
| 48 { | |
| 49 ForEachProvider(db => Assert.AreEqual(2, db.Parent.Single(p => p.ParentID == 2).ParentID)); | |
| 50 } | |
| 51 | |
| 52 [Test] | |
| 53 public void SingleOrDefault() | |
| 54 { | |
| 55 ForEachProvider(db => Assert.IsNull((from p in db.Parent where p.ParentID == 100 select p).SingleOrDefault())); | |
| 56 } | |
| 57 | |
| 58 [Test] | |
| 59 public void SingleOrDefaultWhere() | |
| 60 { | |
| 61 ForEachProvider(db => Assert.AreEqual(2, db.Parent.SingleOrDefault(p => p.ParentID == 2).ParentID)); | |
| 62 } | |
| 63 | |
| 64 [Test] | |
| 65 public void FirstOrDefaultScalar() | |
| 66 { | |
| 67 ForEachProvider(db => Assert.AreEqual( | |
| 68 Parent.OrderBy(p => p.ParentID).FirstOrDefault().ParentID, | |
| 69 db.Parent.OrderBy(p => p.ParentID).FirstOrDefault().ParentID)); | |
| 70 } | |
| 71 | |
| 72 [Test] | |
| 73 public void NestedFirstOrDefaultScalar1() | |
| 74 { | |
| 75 ForEachProvider(new[] { ProviderName.Informix, ProviderName.Sybase }, db => AreEqual( | |
| 76 from p in Parent select Child.FirstOrDefault().ChildID, | |
| 77 from p in db.Parent select db.Child.FirstOrDefault().ChildID)); | |
| 78 } | |
| 79 | |
| 80 [Test] | |
| 81 public void NestedFirstOrDefaultScalar2() | |
| 82 { | |
| 83 ForEachProvider( | |
| 84 new[] { ProviderName.Informix, "Oracle", "DevartOracle", ProviderName.Sybase }, db => | |
| 85 AreEqual( | |
| 86 from p in Parent | |
| 87 select new | |
| 88 { | |
| 89 p.ParentID, | |
| 90 MaxChild = | |
| 91 Child | |
| 92 .Where(c => c.Parent == p) | |
| 93 .OrderByDescending(c => c.ChildID * c.ParentID) | |
| 94 .FirstOrDefault() == null ? | |
| 95 0 : | |
| 96 Child | |
| 97 .Where(c => c.Parent == p) | |
| 98 .OrderByDescending(c => c.ChildID * c.ParentID) | |
| 99 .FirstOrDefault() | |
| 100 .ChildID | |
| 101 }, | |
| 102 from p in db.Parent | |
| 103 select new | |
| 104 { | |
| 105 p.ParentID, | |
| 106 MaxChild = db.Child | |
| 107 .Where(c => c.Parent == p) | |
| 108 .OrderByDescending(c => c.ChildID * c.ParentID) | |
| 109 .FirstOrDefault() | |
| 110 .ChildID | |
| 111 })); | |
| 112 } | |
| 113 | |
| 114 [Test] | |
| 115 public void NestedFirstOrDefault1() | |
| 116 { | |
| 117 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = true; | |
| 118 | |
| 119 ForEachProvider( | |
| 120 db => AreEqual( | |
| 121 from p in Parent select Child.FirstOrDefault(), | |
| 122 from p in db.Parent select db.Child.FirstOrDefault())); | |
| 123 | |
| 124 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = false; | |
| 125 } | |
| 126 | |
| 127 [Test] | |
| 128 public void NestedFirstOrDefault2() | |
| 129 { | |
| 130 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = true; | |
| 131 | |
| 132 ForEachProvider( | |
| 133 db => AreEqual( | |
| 134 from p in Parent select p.Children.FirstOrDefault(), | |
| 135 from p in db.Parent select p.Children.FirstOrDefault())); | |
| 136 | |
| 137 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = false; | |
| 138 } | |
| 139 | |
| 140 [Test] | |
| 141 public void NestedFirstOrDefault3() | |
| 142 { | |
| 143 ForEachProvider( | |
| 144 // Can be fixed. | |
| 145 new[] { ProviderName.Informix, ProviderName.Firebird }, | |
| 146 db => AreEqual( | |
| 147 from p in Parent select p.Children.Select(c => c.ParentID).Distinct().FirstOrDefault(), | |
| 148 from p in db.Parent select p.Children.Select(c => c.ParentID).Distinct().FirstOrDefault())); | |
| 149 } | |
| 150 | |
| 151 [Test] | |
| 152 public void NestedFirstOrDefault4() | |
| 153 { | |
| 154 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = true; | |
| 155 | |
| 156 ForEachProvider( | |
| 157 // Can be fixed. | |
| 158 new[] { ProviderName.Informix, ProviderName.Firebird, ProviderName.PostgreSQL }, | |
| 159 db => AreEqual( | |
| 160 from p in Parent select p.Children.Where(c => c.ParentID > 0).Distinct().FirstOrDefault(), | |
| 161 from p in db.Parent select p.Children.Where(c => c.ParentID > 0).Distinct().FirstOrDefault())); | |
| 162 | |
| 163 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = false; | |
| 164 } | |
| 165 | |
| 166 [Test] | |
| 167 public void NestedFirstOrDefault5() | |
| 168 { | |
| 169 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = true; | |
| 170 | |
| 171 ForEachProvider( | |
| 172 db => AreEqual( | |
| 173 from p in GrandChild select p.Child.Parent.Children.FirstOrDefault(), | |
| 174 from p in db.GrandChild select p.Child.Parent.Children.FirstOrDefault())); | |
| 175 | |
| 176 BLToolkit.Common.Configuration.Linq.AllowMultipleQuery = false; | |
| 177 } | |
| 178 | |
| 179 [Test] | |
| 180 public void NestedSingleOrDefault1() | |
| 181 { | |
| 182 ForEachProvider( | |
| 183 db => AreEqual( | |
| 184 from p in Parent select p.Children.Select(c => c.ParentID).Distinct().SingleOrDefault(), | |
| 185 from p in db.Parent select p.Children.Select(c => c.ParentID).Distinct().SingleOrDefault())); | |
| 186 } | |
| 187 | |
| 188 [Test] | |
| 189 public void FirstOrDefaultEntitySet([IncludeDataContexts("Northwind")] string context) | |
| 190 { | |
| 191 using (var db = new NorthwindDB()) | |
| 192 { | |
| 193 AreEqual( | |
| 194 Customer.Select(c => c.Orders.FirstOrDefault()), | |
| 195 db.Customer.Select(c => c.Orders.FirstOrDefault())); | |
| 196 } | |
| 197 } | |
| 198 | |
| 199 [Test] | |
| 200 public void NestedSingleOrDefaultTest([IncludeDataContexts("Northwind")] string context) | |
| 201 { | |
| 202 using (var db = new NorthwindDB()) | |
| 203 { | |
| 204 AreEqual( | |
| 205 Customer.Select(c => c.Orders.Take(1).SingleOrDefault()), | |
| 206 db.Customer.Select(c => c.Orders.Take(1).SingleOrDefault())); | |
| 207 } | |
| 208 } | |
| 209 | |
| 210 [Test] | |
| 211 public void MultipleQuery([IncludeDataContexts("Northwind")] string context) | |
| 212 { | |
| 213 using (var db = new NorthwindDB()) | |
| 214 { | |
| 215 var q = | |
| 216 from p in db.Product | |
| 217 select db.Category.Select(zrp => zrp.CategoryName).FirstOrDefault(); | |
| 218 | |
| 219 q.ToList(); | |
| 220 } | |
| 221 } | |
| 222 } | |
| 223 } | 
