2 // Rafael Mizrahi <rafim@mainsoft.com>
3 // Erez Lotan <erezl@mainsoft.com>
4 // Oren Gurfinkel <oreng@mainsoft.com>
7 // Copyright (c) 2004 Mainsoft Co.
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 using NUnit.Framework;
38 namespace tests.system_data_dll.System_Data
40 [TestFixture] public class DataTable_GetChanges_D : GHTBase
42 [Test] public void Main()
44 DataTable_GetChanges_D tc = new DataTable_GetChanges_D();
48 tc.BeginTest("DataTable_GetChanges_D");
61 //Activate This Construntor to log All To Standard output
62 //public TestClass():base(true){}
64 //Activate this constructor to log Failures to a log file
65 //public TestClass(System.IO.TextWriter tw):base(tw, false){}
68 //Activate this constructor to log All to a log file
69 //public TestClass(System.IO.TextWriter tw):base(tw, true){}
71 //BY DEFAULT LOGGING IS DONE TO THE STANDARD OUTPUT ONLY FOR FAILURES
78 DataTable dt1,dt2 = GHTUtils.DataProvider.CreateParentDataTable();
79 dt2.Constraints.Add("Unique",dt2.Columns[0],true);
80 dt2.Columns[0].DefaultValue=7;
83 dt2.Rows[0].Delete(); //DataRowState.Deleted
84 dt2.Rows[1].Delete(); //DataRowState.Deleted
85 dt2.Rows[2].BeginEdit();
86 dt2.Rows[2]["String1"] = "Changed"; //DataRowState.Modified
87 dt2.Rows[2].EndEdit();
89 dt2.Rows.Add(new object[] {"99","Temp1","Temp2"}); //DataRowState.Added
91 // *********** Checking GetChanges - DataRowState.Deleted ************
93 dt1 = dt2.GetChanges(DataRowState.Deleted);
94 CheckTableSchema (dt1,dt2,DataRowState.Deleted.ToString());
95 DataRow[] drArr1,drArr2;
96 drArr1 = dt1.Select("","",DataViewRowState.Deleted );
97 drArr2 = dt2.Select("","",DataViewRowState.Deleted );
99 for (int i=0; i<drArr1.Length ; i++)
103 BeginCase(String.Format("GetChanges(Deleted) - Data [ParentId]{0}" ,i));
104 Compare(drArr1[i]["ParentId",DataRowVersion.Original ],drArr2[i]["ParentId", DataRowVersion.Original]);
106 catch(Exception ex) {exp = ex;}
107 finally {EndCase(exp); exp = null;}
110 BeginCase(String.Format("GetChanges(Deleted) - Data [String1]{0}" ,i));
111 Compare(drArr1[i]["String1", DataRowVersion.Original],drArr2[i]["String1", DataRowVersion.Original]);
113 catch(Exception ex) {exp = ex;}
114 finally {EndCase(exp); exp = null;}
117 BeginCase(String.Format("GetChanges(Deleted) - Data [String2]{0}" ,i));
118 Compare(drArr1[i]["String2", DataRowVersion.Original],drArr2[i]["String2", DataRowVersion.Original]);
120 catch(Exception ex) {exp = ex;}
121 finally {EndCase(exp); exp = null;}
124 // *********** Checking GetChanges - DataRowState.Modified ************
126 dt1 = dt2.GetChanges(DataRowState.Modified);
127 CheckTableSchema (dt1,dt2,DataRowState.Modified.ToString());
128 drArr1 = dt1.Select("","");
129 drArr2 = dt2.Select("","",DataViewRowState.ModifiedCurrent);
131 for (int i=0; i<drArr1.Length ; i++)
135 BeginCase(String.Format("GetChanges(Modified) - Data [ParentId]{0}" ,i));
136 Compare(drArr1[i]["ParentId"],drArr2[i]["ParentId"]);
138 catch(Exception ex) {exp = ex;}
139 finally {EndCase(exp); exp = null;}
142 BeginCase(String.Format("GetChanges(Modified) - Data [String1]{0}" ,i));
143 Compare(drArr1[i]["String1"],drArr2[i]["String1"]);
145 catch(Exception ex) {exp = ex;}
146 finally {EndCase(exp); exp = null;}
149 BeginCase(String.Format("GetChanges(Modified) - Data [String2]{0}" ,i));
150 Compare(drArr1[i]["String2" ],drArr2[i]["String2"]);
152 catch(Exception ex) {exp = ex;}
153 finally {EndCase(exp); exp = null;}
156 // *********** Checking GetChanges - DataRowState.Added ************
158 dt1 = dt2.GetChanges(DataRowState.Added);
159 CheckTableSchema (dt1,dt2,DataRowState.Added.ToString());
160 drArr1 = dt1.Select("","");
161 drArr2 = dt2.Select("","",DataViewRowState.Added );
163 for (int i=0; i<drArr1.Length ; i++)
167 BeginCase(String.Format("GetChanges(Added) - Data [ParentId]{0}" ,i));
168 Compare(drArr1[i]["ParentId"],drArr2[i]["ParentId"]);
170 catch(Exception ex) {exp = ex;}
171 finally {EndCase(exp); exp = null;}
174 BeginCase(String.Format("GetChanges(Added) - Data [String1]{0}" ,i));
175 Compare(drArr1[i]["String1"],drArr2[i]["String1"]);
177 catch(Exception ex) {exp = ex;}
178 finally {EndCase(exp); exp = null;}
181 BeginCase(String.Format("GetChanges(Added) - Data [String2]{0}" ,i));
182 Compare(drArr1[i]["String2" ],drArr2[i]["String2"]);
184 catch(Exception ex) {exp = ex;}
185 finally {EndCase(exp); exp = null;}
188 // *********** Checking GetChanges - DataRowState.Unchanged ************
190 dt1 = dt2.GetChanges(DataRowState.Unchanged);
191 CheckTableSchema (dt1,dt2,DataRowState.Unchanged .ToString());
192 drArr1 = dt1.Select("","");
193 drArr2 = dt2.Select("","",DataViewRowState.Unchanged );
195 for (int i=0; i<drArr1.Length ; i++)
199 BeginCase(String.Format("GetChanges(Unchanged) - Data [ParentId]{0}" ,i));
200 Compare(drArr1[i]["ParentId"],drArr2[i]["ParentId"]);
202 catch(Exception ex) {exp = ex;}
203 finally {EndCase(exp); exp = null;}
206 BeginCase(String.Format("GetChanges(Unchanged) - Data [String1]{0}" ,i));
207 Compare(drArr1[i]["String1"],drArr2[i]["String1"]);
209 catch(Exception ex) {exp = ex;}
210 finally {EndCase(exp); exp = null;}
213 BeginCase(String.Format("GetChanges(Unchanged) - Data [String2]{0}" ,i));
214 Compare(drArr1[i]["String2" ],drArr2[i]["String2"]);
216 catch(Exception ex) {exp = ex;}
217 finally {EndCase(exp); exp = null;}
223 private void CheckTableSchema(DataTable dt1, DataTable dt2,string Description)
225 Exception exp = null;
226 for (int i=0; i<dt2.Constraints.Count; i++)
230 BeginCase(String.Format("GetChanges - Constraints[{0}] - {1}",i,Description));
231 Compare( dt1.Constraints[i].ConstraintName ,dt2.Constraints[i].ConstraintName );
233 catch(Exception ex) {exp = ex;}
234 finally {EndCase(exp); exp = null;}
237 for (int i=0; i<dt2.Columns.Count; i++)
241 BeginCase(String.Format("GetChanges - Columns[{0}].ColumnName - {1}",i,Description));
242 Compare( dt1.Columns[i].ColumnName ,dt2.Columns[i].ColumnName );
244 catch(Exception ex) {exp = ex;}
245 finally {EndCase(exp); exp = null;}
249 BeginCase(String.Format("GetChanges - Columns[{0}].DataType {1}",i,Description));
250 Compare( dt1.Columns[i].DataType ,dt2.Columns[i].DataType );
252 catch(Exception ex) {exp = ex;}
253 finally {EndCase(exp); exp = null;}