5 using System.Data.Common;
6 using System.Globalization;
8 using System.Runtime.Serialization;
9 using System.Runtime.Serialization.Formatters;
10 using System.Runtime.Serialization.Formatters.Binary;
11 using System.Threading;
13 using NUnit.Framework;
16 public class BinarySerializationTest
18 private CultureInfo originalCulture;
23 originalCulture = Thread.CurrentThread.CurrentCulture;
24 Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US");
28 public void TearDown ()
30 Thread.CurrentThread.CurrentCulture = originalCulture;
34 public void RemotingFormatDataTableTest ()
36 DataTable dt = new DataTable ();
37 //Test Default SerializationFormat
38 Assert.AreEqual (SerializationFormat.Xml, dt.RemotingFormat, "#1 Default value for RemotingFormat of DataTable is Xml");
39 //Test with Assigned value
40 dt.RemotingFormat = SerializationFormat.Binary;
41 Assert.AreEqual (SerializationFormat.Binary, dt.RemotingFormat, "#2 RemotingFormat Should be Binary");
44 public void RemotingFormatDataSetTest ()
46 DataSet ds = new DataSet ();
47 DataTable dt = new DataTable ();
49 //Test Default SerializationFormat
50 Assert.AreEqual (SerializationFormat.Xml, dt.RemotingFormat, "#1 Default value for RemotingFormat of DataTable is Xml");
51 Assert.AreEqual (SerializationFormat.Xml, ds.RemotingFormat, "#2 Default value for RemotingFormat of DataSet is Xml");
53 //Test with Assigned value
54 ds.RemotingFormat = SerializationFormat.Binary;
55 Assert.AreEqual (SerializationFormat.Binary, ds.RemotingFormat, "#3 RemotingFormat Should be Binary");
57 //Test After adding a Table to DataSet
59 Assert.AreEqual (SerializationFormat.Binary, ds.RemotingFormat, "#4 RemotingFormat should be Binary for DataSet");
60 Assert.AreEqual (SerializationFormat.Binary, dt.RemotingFormat, "#5 RemotingFormat should be Binary for DataTable");
62 ds.RemotingFormat = SerializationFormat.Xml;
63 Assert.AreEqual (SerializationFormat.Xml, ds.RemotingFormat, "#6 RemotingFormat should be Xml for DataSet");
64 Assert.AreEqual (SerializationFormat.Xml, dt.RemotingFormat, "#7 RemotingFormat should be Xml for DataTable");
66 //Test for Exception when try t modify RemotingFormat of DataTable which belongs to a DataSet
69 dt.RemotingFormat = SerializationFormat.Binary;
70 Assert.Fail ("#8 It should throw an ArgumentException");
71 } catch (ArgumentException e) {
72 Assert.AreEqual (e.GetType (), typeof (ArgumentException), "#9 Invalid Exception");
73 } catch (Exception e) {
74 Assert.AreEqual (e.GetType (), typeof (ArgumentException), "#10 Invalid Exception");
79 public void DataTableSerializationTest1 ()
82 DataTable tb1 = new DataTable ("Test");
83 tb1.Columns.Add ("id", typeof (int));
84 tb1.Columns.Add ("name", typeof (string));
85 tb1.Rows.Add (new object[] {1, "A"});
86 tb1.Rows.Add (new object[] {2, "B"});
88 UniqueConstraint uniqueConstraint = new UniqueConstraint (tb1.Columns ["id"]);
89 tb1.Constraints.Add (uniqueConstraint);
90 tb1.RemotingFormat = SerializationFormat.Binary;
96 MemoryStream ms = new MemoryStream ();
97 BinaryFormatter bf = new BinaryFormatter ();
98 bf.Serialize (ms,tb1);
99 byte [] serializedStream = ms.ToArray ();
102 ms = new MemoryStream (serializedStream);
103 DataTable dt = (DataTable)bf.Deserialize (ms);
106 //Test Properties of table
107 //Assert.AreEqual (tb1.RemotingFormat, dt.RemotingFormat, "#1 RemotingFormat property is Different");
108 Assert.AreEqual (tb1.Columns.Count, dt.Columns.Count, "#2 ColumnCount property is Different");
109 Assert.AreEqual (tb1.TableName, dt.TableName, "#3 TableName property is Different");
110 Assert.AreEqual (tb1.Prefix, dt.Prefix, "#4 Prefix propertyis Different");
111 Assert.AreEqual (tb1.Namespace, dt.Namespace, "#5 NameSpace property is Different");
112 Assert.AreEqual (tb1.CaseSensitive, dt.CaseSensitive, "#6 CaseSensitive property is Different");
113 Assert.AreEqual (tb1.Locale.LCID, dt.Locale.LCID, "#7 LocaleLCID property is Different");
114 Assert.AreEqual (tb1.MinimumCapacity, dt.MinimumCapacity, "#8 NameSpace property is Different");
116 Assert.AreEqual (tb1.Constraints.Count, dt.Constraints.Count, "#9 No. of Constraints is Different");
117 for (int i = 0; i < tb1.Constraints.Count; i++)
118 Assert.AreEqual (tb1.Constraints [i].GetType (), dt.Constraints [i].GetType (), "#10 Constraint : {0} is Different", tb1.Constraints [i]);
119 //Test for Table Data
120 Assert.AreEqual (tb1.Rows.Count, dt.Rows.Count, "#11 RowCount propertyis Different");
122 for (int i = 0; i < tb1.Rows.Count; i++) {
123 Assert.AreEqual (tb1.Rows [i].RowState, dt.Rows [i].RowState, "#12 RowState is Different");
126 for (int i = 0; i < tb1.Rows.Count; i++)
127 for (int j = 0; j < tb1.Columns.Count; j++) {
128 if (tb1.Rows[i].RowState != DataRowState.Deleted)
129 Assert.AreEqual (tb1.Rows [i][j], dt.Rows [i][j], "#13 Elements differ at Row :{0} Column :{1}", i, j);
131 dt.Rows[0].RejectChanges();
132 dt.Rows[1].RejectChanges();
135 public void DataTableSerializationTest2 ()
138 DataTable tb1 = new DataTable ("Test");
139 tb1.Columns.Add ("id", typeof (int));
140 tb1.Columns.Add ("name", typeof (string));
141 tb1.Rows.Add (new object[] {1, "A"});
142 tb1.Rows.Add (new object[] {2, "B"});
144 UniqueConstraint uniqueConstraint = new UniqueConstraint (tb1.Columns ["id"]);
145 tb1.Constraints.Add (uniqueConstraint);
146 tb1.RemotingFormat = SerializationFormat.Binary;
150 tb1.Rows[1].Delete();
152 BinaryFormatter bf = new BinaryFormatter ();
153 FileStream fs = new FileStream ("Test/System.Data/binserialize/BS-tb1.bin", FileMode.Open, FileAccess.Read);
154 BinaryReader r = new BinaryReader (fs);
155 byte [] serializedStream = r.ReadBytes ((int)fs.Length);
159 MemoryStream ms = new MemoryStream (serializedStream);
160 DataTable dt = (DataTable)bf.Deserialize (ms);
163 //Test Properties of table
164 //Assert.AreEqual (tb1.RemotingFormat, dt.RemotingFormat, "#1 RemotingFormat property is Different");
165 Assert.AreEqual (tb1.Columns.Count, dt.Columns.Count, "#2 ColumnCount property is Different");
166 Assert.AreEqual (tb1.TableName, dt.TableName, "#3 TableName property is Different");
167 Assert.AreEqual (tb1.Prefix, dt.Prefix, "#4 Prefix propertyis Different");
168 Assert.AreEqual (tb1.Namespace, dt.Namespace, "#5 NameSpace property is Different");
169 Assert.AreEqual (tb1.CaseSensitive, dt.CaseSensitive, "#6 CaseSensitive property is Different");
170 Assert.AreEqual (tb1.Locale.LCID, dt.Locale.LCID, "#7 LocaleLCID property is Different");
171 Assert.AreEqual (tb1.MinimumCapacity, dt.MinimumCapacity, "#8 NameSpace property is Different");
173 Assert.AreEqual (tb1.Constraints.Count, dt.Constraints.Count, "#9 No. of Constraints is Different");
174 for (int i = 0; i < tb1.Constraints.Count; i++)
175 Assert.AreEqual (tb1.Constraints [i].GetType (), dt.Constraints [i].GetType (), "#10 Constraint : {0} is Different", tb1.Constraints [i]);
176 //Test for Table Data
177 Assert.AreEqual (tb1.Rows.Count, dt.Rows.Count, "#11 RowCount propertyis Different");
179 for (int i = 0; i < tb1.Rows.Count; i++) {
180 Assert.AreEqual (tb1.Rows [i].RowState, dt.Rows [i].RowState, "#12 RowState is Different");
183 for (int i = 0; i < tb1.Rows.Count; i++)
184 for (int j = 0; j < tb1.Columns.Count; j++) {
185 if (tb1.Rows[i].RowState != DataRowState.Deleted)
186 Assert.AreEqual (tb1.Rows [i][j], dt.Rows [i][j], "#13 Elements differ at Row :{0} Column :{1}", i, j);
188 dt.Rows[0].RejectChanges();
189 dt.Rows[1].RejectChanges();
193 public void TestDefaultValues ()
196 DataTable tb1 = new DataTable ();
197 tb1.Columns.Add ("id", typeof (int));
198 tb1.Columns.Add ("Date", typeof (string));
199 tb1.Columns["id"].DefaultValue = 10;
200 tb1.Columns["Date"].DefaultValue = "9/15/2008";
201 tb1.Rows.Add (tb1.NewRow());
203 MemoryStream ms = new MemoryStream ();
204 BinaryFormatter bf = new BinaryFormatter ();
205 tb1.RemotingFormat = SerializationFormat.Binary;
206 bf.Serialize (ms,tb1);
207 byte [] serializedStream = ms.ToArray ();
210 ms = new MemoryStream (serializedStream);
211 DataTable dt = (DataTable)bf.Deserialize (ms);
215 for (int i = 0; i < tb1.Rows.Count; i++)
216 for (int j = 0; j < tb1.Columns.Count; j++) {
217 Assert.AreEqual (tb1.Columns[j].DefaultValue, dt.Rows [i][j], "#1 Element differs from DefaultValue at Row :{0} Column :{1}", i, j);
218 Assert.AreEqual (tb1.Rows [i][j], dt.Rows [i][j], "#2 Elements differ at Row :{0} Column :{1}", i, j);
223 public void TestEmptyTable ()
226 DataTable tb1 = new DataTable ();
227 tb1.Columns.Add ("id", typeof (int));
228 tb1.Columns.Add ("Date", typeof (string));
230 MemoryStream ms = new MemoryStream ();
231 BinaryFormatter bf = new BinaryFormatter ();
232 tb1.RemotingFormat = SerializationFormat.Binary;
233 bf.Serialize (ms,tb1);
234 byte [] serializedStream = ms.ToArray ();
237 ms = new MemoryStream (serializedStream);
238 DataTable dt = (DataTable)bf.Deserialize (ms);
241 Assert.AreEqual(tb1.Rows.Count, dt.Rows.Count);
245 public void Test_With_Null_Values1 ()
248 DataTable tb1 = new DataTable ();
249 tb1.Columns.Add ("id", typeof (int));
250 tb1.Columns.Add ("Date", typeof (string));
251 tb1.Rows.Add (new object[] {1, "A"});
252 tb1.Rows.Add (new object[] {2, null});
253 tb1.Rows.Add (new object[] {null, "B"});
254 tb1.Rows.Add (new object[] {null, null});
256 MemoryStream ms = new MemoryStream ();
257 BinaryFormatter bf = new BinaryFormatter ();
258 tb1.RemotingFormat = SerializationFormat.Binary;
259 bf.Serialize (ms,tb1);
260 byte [] serializedStream = ms.ToArray ();
263 ms = new MemoryStream (serializedStream);
264 DataTable dt = (DataTable)bf.Deserialize (ms);
267 for (int i = 0; i < tb1.Rows.Count; i++)
268 for (int j = 0; j < tb1.Columns.Count; j++) {
269 Assert.AreEqual (tb1.Rows [i][j], dt.Rows [i][j], "#1 Elements differ at Row :{0} Column :{1}", i, j);
274 public void Test_With_Null_Values2 ()
277 DataTable tb1 = new DataTable ();
278 tb1.Columns.Add ("id", typeof (int));
279 tb1.Columns.Add ("Date", typeof (string));
280 tb1.Rows.Add (new object[] {1, "A"});
281 tb1.Rows.Add (new object[] {2, null});
282 tb1.Rows.Add (new object[] {null, "B"});
283 tb1.Rows.Add (new object[] {null, null});
285 BinaryFormatter bf = new BinaryFormatter ();
286 tb1.RemotingFormat = SerializationFormat.Binary;
287 FileStream fs = new FileStream ("Test/System.Data/binserialize/BS-tb2.bin", FileMode.Open, FileAccess.Read);
288 BinaryReader r = new BinaryReader (fs);
289 byte [] serializedStream = r.ReadBytes ((int)fs.Length);
293 MemoryStream ms = new MemoryStream (serializedStream);
294 DataTable dt = (DataTable)bf.Deserialize (ms);
297 for (int i = 0; i < tb1.Rows.Count; i++)
298 for (int j = 0; j < tb1.Columns.Count; j++) {
299 Assert.AreEqual (tb1.Rows [i][j], dt.Rows [i][j], "#1 Elements differ at Row :{0} Column :{1}", i, j);
304 public void Test_With_DateTime_Values1 ()
307 DataTable tb1 = new DataTable ();
308 DateTime dateTime = DateTime.UtcNow;
309 tb1.Columns.Add ("id", typeof (int));
310 tb1.Columns.Add ("Date", typeof (DateTime));
311 tb1.Rows.Add (new object[] {1, "12-09-07"});
312 tb1.Rows.Add (new object[] {2, "12-09-06"});
313 //tb1.Rows.Add (new object[] {3, dateTime});
314 MemoryStream ms = new MemoryStream ();
315 BinaryFormatter bf = new BinaryFormatter ();
316 tb1.RemotingFormat = SerializationFormat.Binary;
317 bf.Serialize (ms,tb1);
318 byte [] serializedStream = ms.ToArray ();
321 ms = new MemoryStream (serializedStream);
322 DataTable dt = (DataTable)bf.Deserialize (ms);
325 for (int i = 0; i < tb1.Rows.Count; i++)
326 for (int j = 0; j < tb1.Columns.Count; j++) {
327 Assert.AreEqual (tb1.Rows [i][j], dt.Rows [i][j], "#1 Elements differ at Row :{0} Column :{1}", i, j);
331 [Category ("NotWorking")]
332 public void Test_With_DateTime_Values2 ()
335 DataTable tb1 = new DataTable ();
336 DateTime dateTime = DateTime.UtcNow;
337 tb1.Columns.Add ("id", typeof (int));
338 tb1.Columns.Add ("Date", typeof (DateTime));
339 tb1.Rows.Add (new object[] {1, "12-09-07"});
340 tb1.Rows.Add (new object[] {2, "12-09-06"});
341 //tb1.Rows.Add (new object[] {3, dateTime});
342 BinaryFormatter bf = new BinaryFormatter ();
343 tb1.RemotingFormat = SerializationFormat.Binary;
344 FileStream fs = new FileStream ("Test/System.Data/binserialize/BS-tb3.bin", FileMode.Open, FileAccess.Read);
345 BinaryReader r = new BinaryReader (fs);
346 byte [] serializedStream = r.ReadBytes ((int) fs.Length);
350 MemoryStream ms = new MemoryStream (serializedStream);
351 DataTable dt = (DataTable)bf.Deserialize (ms);
354 for (int i = 0; i < tb1.Rows.Count; i++)
355 for (int j = 0; j < tb1.Columns.Count; j++) {
356 Assert.AreEqual (tb1.Rows [i][j], dt.Rows [i][j], "#1 Elements differ at Row :{0} Column :{1}", i, j);
360 public void DataSetSerializationTest1 ()
362 DataSet ds = new DataSet ();
364 DataTable tb1 = new DataTable ();
365 tb1.Columns.Add ("id", typeof (int));
366 tb1.Columns.Add ("name", typeof (string));
367 tb1.Rows.Add (new object[] {1, "A"});
368 tb1.Rows.Add (new object[] {2, "B"});
371 DataTable tb2 = new DataTable ();
372 tb2.Columns.Add ("RollNO", typeof (int));
373 tb2.Columns.Add ("Name", typeof (string));
374 tb2.Rows.Add (new object[] {1, "A"});
375 tb2.Rows.Add (new object[] {2, "B"});
377 //Constraints and relations
378 ForeignKeyConstraint fKey = new ForeignKeyConstraint (tb2.Columns ["RollNO"],
380 tb1.Constraints.Add (fKey);
381 DataRelation rel = new DataRelation ("Relation1", tb1.Columns ["name"],
382 tb2.Columns ["Name"]);
383 ds.Relations.Add (rel);
385 MemoryStream ms = new MemoryStream ();
386 BinaryFormatter bf = new BinaryFormatter ();
387 ds.RemotingFormat = SerializationFormat.Binary;
388 bf.Serialize (ms,ds);
389 byte [] serializedStream = ms.ToArray ();
392 ms = new MemoryStream (serializedStream);
393 DataSet ds1 = (DataSet)bf.Deserialize (ms);
395 //Test DataSet Properties
396 //Assert.AreEqual (ds.RemotingFormat, ds1.RemotingFormat, "#1 RemotingFormat is different");
397 Assert.AreEqual (ds.DataSetName, ds1.DataSetName, "#2 DataSetName is different");
398 Assert.AreEqual (ds.Namespace, ds1.Namespace, "#3 Namespace is different");
399 Assert.AreEqual (ds.Prefix, ds1.Prefix, "#4 Prefix is different");
400 Assert.AreEqual (ds.CaseSensitive, ds1.CaseSensitive, "#5 CaseSensitive property value is different");
401 Assert.AreEqual (ds.Locale.LCID, ds1.Locale.LCID, "#6 DataSet LocaleLCID is different");
402 Assert.AreEqual (ds.EnforceConstraints, ds1.EnforceConstraints, "#7 EnforceConstraints property value is different");
403 Assert.AreEqual (ds.Tables.Count, ds1.Tables.Count, "#7 Table Count is different");
405 //Test Constraints & relations
408 Assert.AreEqual (ds.Tables [0].Constraints.Count, ds1.Tables [0].Constraints.Count, "#8 Number of constraint is different for Table :{0}", ds.Tables [0].TableName);
410 for (int i = 0; i < ds.Tables [0].Constraints.Count; i++)
411 Assert.AreEqual (ds.Tables [0].Constraints [i].GetType (),
412 ds1.Tables [0].Constraints [i].GetType (),
413 "#9 Constraint : {0} is Different", ds.Tables [0].Constraints [i]);
416 Assert.AreEqual (ds.Tables [1].Constraints.Count, ds1.Tables [1].Constraints.Count, "#10 Number of constraint is different for Table :{0}", ds.Tables [1].TableName);
418 for (int i = 0; i < ds.Tables [1].Constraints.Count; i++)
419 Assert.AreEqual (ds.Tables [1].Constraints [i].GetType (),
420 ds1.Tables [1].Constraints [i].GetType (),
421 "#11 Constraint : {0} is Different", ds.Tables [1].Constraints [i]);
423 Assert.AreEqual (ds.Relations.Count, ds1.Relations.Count, "#12 Relation count is different");
424 for (int i = 0; i < ds.Relations.Count; i++)
425 Assert.AreEqual (ds.Relations [i].RelationName, ds1.Relations [i].RelationName, "#13 Relation Name is different for relation :{0}", ds.Relations [i].RelationName);
427 for (int i = 0; i < ds.Relations.Count; i++)
428 Assert.AreEqual (ds.Relations [i].ParentTable.TableName,
429 ds1.Relations[i].ParentTable.TableName, "#14 Relation Name is different for relation :{0}", ds.Relations [i].ParentTable.TableName);
431 for (int i = 0; i < ds.Relations.Count; i++)
432 Assert.AreEqual (ds.Relations [i].ChildTable.TableName,
433 ds1.Relations[i].ChildTable.TableName, "#15 Relation Name is different for relation :{0}", ds.Relations [i].ChildTable.TableName);
437 for (int i = 0; i < ds.Tables [0].Rows.Count; i++)
438 for (int j = 0; j < ds.Tables [0].Columns.Count; j++) {
439 Assert.AreEqual (ds.Tables [0].Rows [i][j], ds1.Tables [0].Rows [i][j],
440 "#16 Elements differ at Row :{0} Column :{1}", i, j);
443 for (int i = 0; i < ds.Tables [0].Rows.Count; i++)
444 for (int j = 0; j < ds.Tables [1].Columns.Count; j++) {
445 Assert.AreEqual (ds.Tables [1].Rows [i][j], ds1.Tables [1].Rows [i][j],
446 "#17 Elements differ at Row :{0} Column :{1}", i, j);
451 public void DataSetSerializationTest2 ()
453 DataSet ds = new DataSet ();
455 DataTable tb1 = new DataTable ();
456 tb1.Columns.Add ("id", typeof (int));
457 tb1.Columns.Add ("name", typeof (string));
458 tb1.Rows.Add (new object[] {1, "A"});
459 tb1.Rows.Add (new object[] {2, "B"});
462 DataTable tb2 = new DataTable ();
463 tb2.Columns.Add ("RollNO", typeof (int));
464 tb2.Columns.Add ("Name", typeof (string));
465 tb2.Rows.Add (new object[] {1, "A"});
466 tb2.Rows.Add (new object[] {2, "B"});
468 //Constraints and relations
469 ForeignKeyConstraint fKey = new ForeignKeyConstraint (tb2.Columns ["RollNO"],
471 tb1.Constraints.Add (fKey);
472 DataRelation rel = new DataRelation ("Relation1", tb1.Columns ["name"],
473 tb2.Columns ["Name"]);
474 ds.Relations.Add (rel);
476 BinaryFormatter bf = new BinaryFormatter ();
477 ds.RemotingFormat = SerializationFormat.Binary;
478 FileStream fs = new FileStream ("Test/System.Data/binserialize/BS-tb4.bin", FileMode.Open, FileAccess.Read);
479 BinaryReader r = new BinaryReader (fs);
480 byte [] serializedStream = r.ReadBytes ((int) fs.Length);
484 MemoryStream ms = new MemoryStream (serializedStream);
485 DataSet ds1 = (DataSet)bf.Deserialize (ms);
487 //Test DataSet Properties
488 //Assert.AreEqual (ds.RemotingFormat, ds1.RemotingFormat, "#1 RemotingFormat is different");
489 Assert.AreEqual (ds.DataSetName, ds1.DataSetName, "#2 DataSetName is different");
490 Assert.AreEqual (ds.Namespace, ds1.Namespace, "#3 Namespace is different");
491 Assert.AreEqual (ds.Prefix, ds1.Prefix, "#4 Prefix is different");
492 Assert.AreEqual (ds.CaseSensitive, ds1.CaseSensitive, "#5 CaseSensitive property value is different");
493 Assert.AreEqual (ds.Locale.LCID, ds1.Locale.LCID, "#6 DataSet LocaleLCID is different");
494 Assert.AreEqual (ds.EnforceConstraints, ds1.EnforceConstraints, "#7 EnforceConstraints property value is different");
495 Assert.AreEqual (ds.Tables.Count, ds1.Tables.Count, "#7 Table Count is different");
497 //Test Constraints & relations
500 Assert.AreEqual (ds.Tables [0].Constraints.Count, ds1.Tables [0].Constraints.Count, "#8 Number of constraint is different for Table :{0}", ds.Tables [0].TableName);
502 for (int i = 0; i < ds.Tables [0].Constraints.Count; i++)
503 Assert.AreEqual (ds.Tables [0].Constraints [i].GetType (),
504 ds1.Tables [0].Constraints [i].GetType (),
505 "#9 Constraint : {0} is Different", ds.Tables [0].Constraints [i]);
508 Assert.AreEqual (ds.Tables [1].Constraints.Count, ds1.Tables [1].Constraints.Count, "#10 Number of constraint is different for Table :{0}", ds.Tables [1].TableName);
510 for (int i = 0; i < ds.Tables [1].Constraints.Count; i++)
511 Assert.AreEqual (ds.Tables [1].Constraints [i].GetType (),
512 ds1.Tables [1].Constraints [i].GetType (),
513 "#11 Constraint : {0} is Different", ds.Tables [1].Constraints [i]);
515 Assert.AreEqual (ds.Relations.Count, ds1.Relations.Count, "#12 Relation count is different");
516 for (int i = 0; i < ds.Relations.Count; i++)
517 Assert.AreEqual (ds.Relations [i].RelationName, ds1.Relations [i].RelationName, "#13 Relation Name is different for relation :{0}", ds.Relations [i].RelationName);
519 for (int i = 0; i < ds.Relations.Count; i++)
520 Assert.AreEqual (ds.Relations [i].ParentTable.TableName,
521 ds1.Relations[i].ParentTable.TableName, "#14 Relation Name is different for relation :{0}", ds.Relations [i].ParentTable.TableName);
523 for (int i = 0; i < ds.Relations.Count; i++)
524 Assert.AreEqual (ds.Relations [i].ChildTable.TableName,
525 ds1.Relations[i].ChildTable.TableName, "#15 Relation Name is different for relation :{0}", ds.Relations [i].ChildTable.TableName);
529 for (int i = 0; i < ds.Tables [0].Rows.Count; i++)
530 for (int j = 0; j < ds.Tables [0].Columns.Count; j++) {
531 Assert.AreEqual (ds.Tables [0].Rows [i][j], ds1.Tables [0].Rows [i][j],
532 "#16 Elements differ at Row :{0} Column :{1}", i, j);
535 for (int i = 0; i < ds.Tables [0].Rows.Count; i++)
536 for (int j = 0; j < ds.Tables [1].Columns.Count; j++) {
537 Assert.AreEqual (ds.Tables [1].Rows [i][j], ds1.Tables [1].Rows [i][j],
538 "#17 Elements differ at Row :{0} Column :{1}", i, j);
543 public void Constraint_Relations_Test1 ()
546 DataSet ds = new DataSet ();
548 DataTable tb1 = new DataTable ();
549 tb1.Columns.Add ("id", typeof (int));
550 tb1.Columns.Add ("name", typeof (string));
551 tb1.Rows.Add (new object[] {1, "A"});
552 tb1.Rows.Add (new object[] {2, "B"});
555 DataTable tb2 = new DataTable ();
556 tb2.Columns.Add ("eid", typeof (int));
557 tb2.Columns.Add ("SSN", typeof (int));
558 tb2.Columns.Add ("DOJ", typeof (DateTime));
559 tb2.Rows.Add (new object[] {1, 111, "07-25-06"});
560 tb2.Rows.Add (new object[] {2, 112, "07-19-06"});
561 tb2.Rows.Add (new object[] {3, 113, "07-22-06"});
564 DataTable tb3 = new DataTable ();
565 tb3.Columns.Add ("eid", typeof (int));
566 tb3.Columns.Add ("Salary", typeof (long));
567 tb3.Rows.Add (new object[] {1, 20000});
568 tb3.Rows.Add (new object[] {2, 30000});
571 DataTable tb4 = new DataTable ();
572 tb4.Columns.Add ("ssn", typeof (int));
573 tb4.Columns.Add ("Name", typeof (string));
574 tb4.Columns.Add ("DOB", typeof (DateTime));
575 tb4.Rows.Add (new object[] {112, "A", "09-12-81"});
576 tb4.Rows.Add (new object[] {113, "B", "09-12-82"});
580 UniqueConstraint uKey = new UniqueConstraint (tb1.Columns ["id"]);
582 DataColumn[] parentColumns = new DataColumn[2];
583 parentColumns[0] = tb1.Columns["id"];
584 parentColumns[1] = tb1.Columns["name"];
585 DataColumn[] childColumns = new DataColumn[2];
586 childColumns[0] = tb4.Columns["ssn"];
587 childColumns[1] = tb4.Columns["Name"];
588 ForeignKeyConstraint fKey1 = new ForeignKeyConstraint(childColumns,
591 ForeignKeyConstraint fKey1 = new ForeignKeyConstraint (tb2.Columns ["eid"],
593 ForeignKeyConstraint fKey2 = new ForeignKeyConstraint (tb2.Columns ["eid"],
594 tb3.Columns ["eid"]);
595 DataRelation rel = new DataRelation ("Relation1", tb1.Columns ["name"], tb4.Columns ["Name"]);
596 DataRelation rel1 = new DataRelation ("Relation2", tb2.Columns ["SSN"], tb4.Columns ["ssn"]);
597 tb1.Constraints.Add (uKey);
598 tb1.Constraints.Add (fKey1);
599 tb3.Constraints.Add (fKey2);
600 ds.Relations.Add (rel);
601 ds.Relations.Add (rel1);
605 MemoryStream ms = new MemoryStream ();
606 BinaryFormatter bf = new BinaryFormatter ();
607 ds.RemotingFormat = SerializationFormat.Binary;
608 bf.Serialize (ms,ds);
609 byte [] serializedStream = ms.ToArray ();
612 ms = new MemoryStream (serializedStream);
613 DataSet ds1 = (DataSet)bf.Deserialize (ms);
615 Assert.AreEqual (ds.Tables.Count, ds1.Tables.Count, "#1 Number of Table differs");
618 Assert.AreEqual (ds.Tables [0].Constraints.Count, ds1.Tables [0].Constraints.Count, "#2 Number of Constraints differs in Table :{0}", ds.Tables [0]);
619 for (int i = 0; i < ds.Tables [0].Constraints.Count; i++)
620 Assert.AreEqual (ds.Tables [0].Constraints [i].GetType (),
621 ds1.Tables [0].Constraints [i].GetType (),
622 "#3 Constraint : {0} is Different", ds.Tables [0].Constraints [i]);
624 Assert.AreEqual (ds.Tables [1].Constraints.Count, ds1.Tables [1].Constraints.Count, "#4 Number of Constraints differs in Table :{0}", ds.Tables [1]);
625 for (int i = 0; i < ds.Tables [1].Constraints.Count; i++)
626 Assert.AreEqual (ds.Tables [1].Constraints [i].GetType (),
627 ds1.Tables [1].Constraints [i].GetType (),
628 "#5 Constraint : {0} is Different", ds.Tables [1].Constraints [i]);
630 Assert.AreEqual (ds.Tables [2].Constraints.Count, ds1.Tables [2].Constraints.Count, "#5 Number of Constraints differs in Table :{0}", ds.Tables [2]);
631 for (int i = 0; i < ds.Tables [2].Constraints.Count; i++)
632 Assert.AreEqual (ds.Tables [2].Constraints [i].GetType (),
633 ds1.Tables [2].Constraints [i].GetType (),
634 "#6 Constraint : {0} is Different", ds.Tables [2].Constraints [i]);
636 Assert.AreEqual (ds.Tables [3].Constraints.Count, ds1.Tables [3].Constraints.Count, "#7 Number of Constraints differs in Table :{0}", ds.Tables [3]);
637 for (int i = 0; i < ds.Tables [3].Constraints.Count; i++)
638 Assert.AreEqual (ds.Tables [3].Constraints [i].GetType (),
639 ds1.Tables [3].Constraints [i].GetType (),
640 "#8 Constraint : {0} is Different", ds.Tables [3].Constraints [i]);
642 Assert.AreEqual (ds.Relations.Count, ds1.Relations.Count, "#8 Number of realtions differ");
643 for (int i = 0; i < ds.Relations.Count; i++)
644 Assert.AreEqual (ds.Relations [i].RelationName, ds.Relations [i].RelationName, "#9 Relation : {0} differs", ds.Relations [i]);
647 public void Constraint_Relations_Test2 ()
650 DataSet ds = new DataSet ();
652 DataTable tb1 = new DataTable ();
653 tb1.Columns.Add ("id", typeof (int));
654 tb1.Columns.Add ("name", typeof (string));
655 tb1.Rows.Add (new object[] {1, "A"});
656 tb1.Rows.Add (new object[] {2, "B"});
659 DataTable tb2 = new DataTable ();
660 tb2.Columns.Add ("eid", typeof (int));
661 tb2.Columns.Add ("SSN", typeof (int));
662 tb2.Columns.Add ("DOJ", typeof (DateTime));
663 tb2.Rows.Add (new object[] {1, 111, "07-25-06"});
664 tb2.Rows.Add (new object[] {2, 112, "07-19-06"});
665 tb2.Rows.Add (new object[] {3, 113, "07-22-06"});
668 DataTable tb3 = new DataTable ();
669 tb3.Columns.Add ("eid", typeof (int));
670 tb3.Columns.Add ("Salary", typeof (long));
671 tb3.Rows.Add (new object[] {1, 20000});
672 tb3.Rows.Add (new object[] {2, 30000});
675 DataTable tb4 = new DataTable ();
676 tb4.Columns.Add ("ssn", typeof (int));
677 tb4.Columns.Add ("Name", typeof (string));
678 tb4.Columns.Add ("DOB", typeof (DateTime));
679 tb4.Rows.Add (new object[] {112, "A", "09-12-81"});
680 tb4.Rows.Add (new object[] {113, "B", "09-12-82"});
684 UniqueConstraint uKey = new UniqueConstraint (tb1.Columns ["id"]);
686 DataColumn[] parentColumns = new DataColumn[2];
687 parentColumns[0] = tb1.Columns["id"];
688 parentColumns[1] = tb1.Columns["name"];
689 DataColumn[] childColumns = new DataColumn[2];
690 childColumns[0] = tb4.Columns["ssn"];
691 childColumns[1] = tb4.Columns["Name"];
692 ForeignKeyConstraint fKey1 = new ForeignKeyConstraint(childColumns,
695 ForeignKeyConstraint fKey1 = new ForeignKeyConstraint (tb2.Columns ["eid"],
697 ForeignKeyConstraint fKey2 = new ForeignKeyConstraint (tb2.Columns ["eid"],
698 tb3.Columns ["eid"]);
699 DataRelation rel = new DataRelation ("Relation1", tb1.Columns ["name"], tb4.Columns ["Name"]);
700 DataRelation rel1 = new DataRelation ("Relation2", tb2.Columns ["SSN"], tb4.Columns ["ssn"]);
701 tb1.Constraints.Add (uKey);
702 tb1.Constraints.Add (fKey1);
703 tb3.Constraints.Add (fKey2);
704 ds.Relations.Add (rel);
705 ds.Relations.Add (rel1);
709 BinaryFormatter bf = new BinaryFormatter ();
710 ds.RemotingFormat = SerializationFormat.Binary;
711 FileStream fs = new FileStream ("Test/System.Data/binserialize/BS-tb5.bin", FileMode.Open, FileAccess.Read);
712 BinaryReader r = new BinaryReader (fs);
713 byte [] serializedStream = r.ReadBytes ((int)fs.Length);
717 MemoryStream ms = new MemoryStream (serializedStream);
718 DataSet ds1 = (DataSet)bf.Deserialize (ms);
720 Assert.AreEqual (ds.Tables.Count, ds1.Tables.Count, "#1 Number of Table differs");
723 Assert.AreEqual (ds.Tables [0].Constraints.Count, ds1.Tables [0].Constraints.Count, "#2 Number of Constraints differs in Table :{0}", ds.Tables [0]);
724 for (int i = 0; i < ds.Tables [0].Constraints.Count; i++)
725 Assert.AreEqual (ds.Tables [0].Constraints [i].GetType (),
726 ds1.Tables [0].Constraints [i].GetType (),
727 "#3 Constraint : {0} is Different", ds.Tables [0].Constraints [i]);
729 Assert.AreEqual (ds.Tables [1].Constraints.Count, ds1.Tables [1].Constraints.Count, "#4 Number of Constraints differs in Table :{0}", ds.Tables [1]);
730 for (int i = 0; i < ds.Tables [1].Constraints.Count; i++)
731 Assert.AreEqual (ds.Tables [1].Constraints [i].GetType (),
732 ds1.Tables [1].Constraints [i].GetType (),
733 "#5 Constraint : {0} is Different", ds.Tables [1].Constraints [i]);
735 Assert.AreEqual (ds.Tables [2].Constraints.Count, ds1.Tables [2].Constraints.Count, "#5 Number of Constraints differs in Table :{0}", ds.Tables [2]);
736 for (int i = 0; i < ds.Tables [2].Constraints.Count; i++)
737 Assert.AreEqual (ds.Tables [2].Constraints [i].GetType (),
738 ds1.Tables [2].Constraints [i].GetType (),
739 "#6 Constraint : {0} is Different", ds.Tables [2].Constraints [i]);
741 Assert.AreEqual (ds.Tables [3].Constraints.Count, ds1.Tables [3].Constraints.Count, "#7 Number of Constraints differs in Table :{0}", ds.Tables [3]);
742 for (int i = 0; i < ds.Tables [3].Constraints.Count; i++)
743 Assert.AreEqual (ds.Tables [3].Constraints [i].GetType (),
744 ds1.Tables [3].Constraints [i].GetType (),
745 "#8 Constraint : {0} is Different", ds.Tables [3].Constraints [i]);
747 Assert.AreEqual (ds.Relations.Count, ds1.Relations.Count, "#8 Number of realtions differ");
748 for (int i = 0; i < ds.Relations.Count; i++)
749 Assert.AreEqual (ds.Relations [i].RelationName, ds.Relations [i].RelationName, "#9 Relation : {0} differs", ds.Relations [i]);