2 using System.Collections;
\r
3 using System.Collections.Generic;
\r
7 using NUnit.Framework;
\r
8 using Test_NUnit.Linq_101_Samples;
\r
9 using System.Data.Linq;
\r
12 using DataLoadOptions = System.Data.Linq.DataLoadOptions;
\r
14 using DataLoadOptions = DbLinq.Data.Linq.DataLoadOptions;
\r
21 namespace Test_NUnit_MySql
\r
23 namespace Test_NUnit_OracleODP
\r
25 namespace Test_NUnit_Oracle
\r
27 namespace Test_NUnit_PostgreSql
\r
29 namespace Test_NUnit_Sqlite
\r
31 namespace Test_NUnit_Ingres
\r
32 #elif MSSQL && L2SQL
\r
33 namespace Test_NUnit_MsSql_Strict
\r
35 namespace Test_NUnit_MsSql
\r
37 namespace Test_NUnit_Firebird
\r
41 public class EntitySet : TestBase
\r
45 public void SimpleMemberAccess01()
\r
47 var customer = new Customer();
\r
48 var orders = customer.Orders;
\r
52 public void SimpleMemberAccess02()
\r
54 var db = CreateDB();
\r
55 var customer = db.Customers.First();
\r
56 Assert.Greater(customer.Orders.Count, 0);
\r
59 #if !DEBUG && (SQLITE || (MSSQL && !L2SQL))
\r
63 public void EntitySetEnumerationProjection()
\r
65 var db = CreateDB();
\r
66 var results = (from c in db.Customers select c.Orders).ToList();
\r
68 Assert.Greater(results.Count, 0);
\r
72 public void HasLoadedOrAsignedValues01()
\r
74 var db = CreateDB();
\r
75 var customer = db.Customers.First();
\r
76 Assert.IsFalse(customer.Orders.HasLoadedOrAssignedValues);
\r
78 customer.Orders.Add(new Order());
\r
79 Assert.IsTrue(customer.Orders.HasLoadedOrAssignedValues);
\r
83 public void HasLoadedOrAsignedValues02()
\r
85 var db = CreateDB();
\r
86 var customer = db.Customers.First();
\r
87 Assert.IsFalse(customer.Orders.HasLoadedOrAssignedValues);
\r
89 customer.Orders.Assign(System.Linq.Enumerable.Empty<Order>());
\r
90 Assert.IsTrue(customer.Orders.HasLoadedOrAssignedValues);
\r
95 [ExpectedException(typeof(InvalidOperationException))]
\r
96 public void InvalidSourceChange()
\r
98 var db = CreateDB();
\r
99 var customer = db.Customers.First();
\r
101 Assert.Greater(customer.Orders.Count, 0, "#1");
\r
102 Assert.IsTrue(customer.Orders.HasLoadedOrAssignedValues, "#2");
\r
103 customer.Orders.SetSource(System.Linq.Enumerable.Empty<Order>());
\r
107 [ExpectedException(typeof(InvalidOperationException))]
\r
108 public void InvalidSourceChange2()
\r
110 var db = CreateDB();
\r
111 var customer = db.Customers.First();
\r
112 Assert.IsFalse(customer.Orders.HasLoadedOrAssignedValues, "#1");
\r
113 customer.Orders.Assign(new List<Order>());
\r
114 Assert.IsTrue(customer.Orders.HasLoadedOrAssignedValues, "#2");
\r
115 customer.Orders.SetSource(System.Linq.Enumerable.Empty<Order>());
\r
119 [ExpectedException(typeof(InvalidOperationException))]
\r
120 public void InvalidSourceChange3()
\r
122 var db = CreateDB();
\r
123 var customer = db.Customers.First();
\r
124 customer.Orders.SetSource(new List<Order>());
\r
125 Assert.IsFalse(customer.Orders.HasLoadedOrAssignedValues, "#1");
\r
126 customer.Orders.Load();
\r
127 Assert.IsTrue(customer.Orders.HasLoadedOrAssignedValues, "#2");
\r
128 customer.Orders.SetSource(System.Linq.Enumerable.Empty<Order>());
\r
132 public void SourceChange()
\r
134 var db = CreateDB();
\r
136 int ordersCount = (from cust in db.Customers
\r
137 select cust.Orders.Count).First();
\r
139 Assert.Greater(ordersCount, 0);
\r
141 var customer2 = db.Customers.First();
\r
142 customer2.Orders.SetSource(System.Linq.Enumerable.Empty<Order>());
\r
143 Assert.AreEqual(customer2.Orders.Count, 0);
\r
147 #if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL))
\r
151 public void Refresh01()
\r
153 var db = CreateDB();
\r
154 var c = db.Customers.First();
\r
156 int beforeCount = c.Orders.Count;
\r
157 Assert.Greater(beforeCount, 0);
\r
159 Assert.AreEqual(c.Orders.Count, 0);
\r
160 c.Orders.AddRange(db.Orders);
\r
161 Assert.Greater(c.Orders.Count, beforeCount);
\r
162 db.Refresh(RefreshMode.OverwriteCurrentValues, c.Orders);
\r
164 Assert.AreEqual(c.Orders.Count, beforeCount);
\r
167 #if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL))
\r
171 public void Refresh02()
\r
173 var db = CreateDB();
\r
174 var c = db.Customers.First();
\r
176 int beforeCount = c.Orders.Count;
\r
177 Assert.Greater(beforeCount, 0);
\r
179 Assert.AreEqual(c.Orders.Count, 0);
\r
180 c.Orders.AddRange(db.Orders);
\r
182 int middleCount = c.Orders.Count;
\r
183 Assert.Greater(c.Orders.Count, beforeCount);
\r
185 db.Refresh(RefreshMode.KeepCurrentValues, c.Orders);
\r
186 Assert.AreEqual(c.Orders.Count, middleCount);
\r
188 db.Refresh(RefreshMode.KeepChanges, c.Orders);
\r
189 Assert.AreEqual(c.Orders.Count, middleCount);
\r
193 #if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL))
\r
197 public void Refresh03()
\r
199 var db = CreateDB();
\r
200 var c = db.Customers.First();
\r
202 var order = c.Orders.First();
\r
203 string newcustomerId = "NEWCUSTOMERID";
\r
204 order.CustomerID = newcustomerId;
\r
206 db.Refresh(RefreshMode.OverwriteCurrentValues, c.Orders);
\r
207 Assert.AreNotEqual(order.CustomerID, newcustomerId);
\r
210 #if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL))
\r
214 public void Refresh04()
\r
216 var db = CreateDB();
\r
217 var c = db.Customers.First();
\r
219 var order = c.Orders.First();
\r
220 string newcustomerId = "NEWCUSTOMERID";
\r
221 order.CustomerID = newcustomerId;
\r
223 db.Refresh(RefreshMode.KeepCurrentValues, c.Orders);
\r
224 Assert.AreEqual(order.CustomerID, newcustomerId);
\r
226 db.Refresh(RefreshMode.KeepChanges, c.Orders);
\r
227 Assert.AreEqual(order.CustomerID, newcustomerId);
\r
232 public void ListChangedEvent()
\r
234 var db = CreateDB();
\r
235 var customer = db.Customers.Where(c => c.Orders.Count > 0).First();
\r
236 Assert.Greater(customer.Orders.Count, 0);
\r
238 System.ComponentModel.ListChangedEventArgs args = null;
\r
239 customer.Orders.ListChanged += delegate(object sender, System.ComponentModel.ListChangedEventArgs a)
\r
247 customer.Orders.Remove(customer.Orders.First());
\r
249 Assert.AreEqual(System.ComponentModel.ListChangedType.ItemDeleted, args.ListChangedType);
\r
250 Assert.AreEqual(0, args.NewIndex);
\r
251 Assert.AreEqual(-1, args.OldIndex);
\r
255 customer.Orders.Assign(Enumerable.Empty<Order>());
\r
257 Assert.AreEqual(System.ComponentModel.ListChangedType.Reset, args.ListChangedType);
\r
258 Assert.AreEqual(0, args.NewIndex);
\r
259 Assert.AreEqual(-1, args.OldIndex);
\r
263 customer.Orders.Add(db.Orders.First());
\r
265 Assert.AreEqual(System.ComponentModel.ListChangedType.ItemAdded, args.ListChangedType);
\r
266 Assert.AreEqual(0, args.NewIndex);
\r
267 Assert.AreEqual(-1, args.OldIndex);
\r
271 customer.Orders.Clear();
\r
273 Assert.AreEqual(System.ComponentModel.ListChangedType.Reset, args.ListChangedType);
\r
274 Assert.AreEqual(0, args.NewIndex);
\r
275 Assert.AreEqual(-1, args.OldIndex);
\r
279 customer.Orders.Insert(0, new Order());
\r
281 Assert.AreEqual(System.ComponentModel.ListChangedType.ItemAdded, args.ListChangedType);
\r
282 Assert.AreEqual(0, args.NewIndex);
\r
283 Assert.AreEqual(-1, args.OldIndex);
\r
287 customer.Orders.RemoveAt(0);
\r
289 Assert.AreEqual(System.ComponentModel.ListChangedType.ItemDeleted, args.ListChangedType);
\r
290 Assert.AreEqual(args.NewIndex, 0);
\r
291 Assert.AreEqual(args.OldIndex, -1);
\r
297 var db = CreateDB();
\r
298 var customer = db.Customers.First();
\r
299 var orders = customer.Orders;
\r
301 Assert.IsFalse(orders.HasLoadedOrAssignedValues);
\r
303 Assert.IsTrue(orders.HasLoadedOrAssignedValues);
\r
307 public void DeferedExecution()
\r
309 var db = CreateDB();
\r
310 var customer = db.Customers.First();
\r
311 Assert.IsTrue(customer.Orders.IsDeferred);
\r
313 customer.Orders.Load();
\r
314 Assert.IsFalse(customer.Orders.IsDeferred);
\r
317 #if !DEBUG && (SQLITE || POSTGRES || (MSSQL && !L2SQL))
\r
321 public void DeferedExecutionAndLoadWith()
\r
323 var db = CreateDB();
\r
324 DataLoadOptions loadoptions = new DataLoadOptions();
\r
325 loadoptions.LoadWith<Customer>(c => c.Orders);
\r
326 db.LoadOptions = loadoptions;
\r
328 var customer = db.Customers.First();
\r
329 Assert.IsFalse(customer.Orders.IsDeferred, "#1");
\r
330 Assert.IsTrue(customer.Orders.HasLoadedOrAssignedValues, "#2");
\r
336 var db = CreateDB();
\r
337 var customer = db.Customers.First();
\r
338 int beforeCount = customer.Orders.Count;
\r
339 var order = new Order();
\r
340 customer.Orders.Add(order);
\r
341 Assert.AreEqual(beforeCount + 1, customer.Orders.Count, "#3");
\r
342 customer.Orders.Add(order); // do not actually add
\r
343 Assert.AreEqual(beforeCount + 1, customer.Orders.Count, "#4");
\r
347 [ExpectedException (typeof (ArgumentOutOfRangeException))]
\r
348 public void IList_Add()
\r
350 var db = CreateDB();
\r
351 var customer = db.Customers.First();
\r
352 var order = new Order();
\r
353 ((IList)customer.Orders).Add(order);
\r
354 ((IList)customer.Orders).Add(order); // raises ArgumentOutOfRangeException for duplicate
\r
358 public void Clear()
\r
360 var db = CreateDB();
\r
361 var customer = db.Customers.First();
\r
363 if (customer.Orders.Count == 0)
\r
366 customer.Orders.Clear();
\r
367 Assert.AreEqual(customer.Orders.Count, 0);
\r
371 public void AddRange()
\r
373 var db = CreateDB();
\r
374 var customer = db.Customers.First();
\r
375 int beforeCount = customer.Orders.Count;
\r
376 var order = new Order();
\r
377 customer.Orders.AddRange(new Order[] { order, new Order() });
\r
378 Assert.AreEqual(beforeCount + 2, customer.Orders.Count);
\r
379 customer.Orders.AddRange(new Order[] { new Order(), order }); // one is existing -> not added
\r
380 Assert.AreEqual(beforeCount + 3, customer.Orders.Count);
\r
384 public void Remove()
\r
386 var db = CreateDB();
\r
387 var customer = db.Customers.First();
\r
388 Assert.IsTrue(customer.Orders.IsDeferred);
\r
389 int beforeCount = customer.Orders.Count;
\r
390 Assert.IsFalse(customer.Orders.IsDeferred);
\r
392 if (beforeCount == 0)
\r
395 Assert.IsFalse(customer.Orders.Remove(null));
\r
396 Assert.AreEqual(beforeCount, customer.Orders.Count);
\r
398 Assert.IsTrue(customer.Orders.Remove(customer.Orders.First()));
\r
399 Assert.AreEqual(customer.Orders.Count, beforeCount - 1);
\r
403 public void RemoveAt()
\r
405 var db = CreateDB();
\r
406 var customer = db.Customers.First();
\r
407 int beforeCount = customer.Orders.Count;
\r
409 if (beforeCount == 0)
\r
412 customer.Orders.RemoveAt(0);
\r
413 Assert.AreEqual(customer.Orders.Count, beforeCount - 1);
\r
417 public void RemoveAll()
\r