Merge pull request #347 from JamesB7/master
[mono.git] / mcs / class / System.Data.OracleClient / Test / System.Data.OracleClient.jvm / OracleDataAdapter / OracleDataAdapter_RowUpdating.cs
1 // 
2 // Copyright (c) 2006 Mainsoft Co.
3 // 
4 // Permission is hereby granted, free of charge, to any person obtaining
5 // a copy of this software and associated documentation files (the
6 // "Software"), to deal in the Software without restriction, including
7 // without limitation the rights to use, copy, modify, merge, publish,
8 // distribute, sublicense, and/or sell copies of the Software, and to
9 // permit persons to whom the Software is furnished to do so, subject to
10 // the following conditions:
11 // 
12 // The above copyright notice and this permission notice shall be
13 // included in all copies or substantial portions of the Software.
14 // 
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 //
23
24 using System;
25 using System.Data;
26 using System.Data.Common;
27 using System.Data.OracleClient;
28
29 using MonoTests.System.Data.Utils;
30
31
32 using NUnit.Framework;
33
34 namespace MonoTests.System.Data.OracleClient
35 {
36         [TestFixture]
37         [Category ("NotWorking")]
38         public class OracleDataAdapter_RowUpdating : ADONetTesterClass
39         {
40                 public static void Main()
41                 {
42                         OracleDataAdapter_RowUpdating tc = new OracleDataAdapter_RowUpdating();
43                         Exception exp = null;
44                         try
45                         {
46                                 tc.BeginTest("OracleDataAdapter_RowUpdating");
47                                 tc.run();
48                         }
49                         catch(Exception ex)
50                         {
51                                 exp = ex;
52                         }
53                         finally
54                         {
55                                 tc.EndTest(exp);
56                         }
57                 }
58
59
60                 //public TestClass():base(true){}
61
62                 //Activate this constructor to log Failures to a log file
63                 //public TestClass(System.IO.TextWriter tw):base(tw, false){}
64
65
66                 //Activate this constructor to log All to a log file
67                 //public TestClass(System.IO.TextWriter tw):base(tw, true){}
68
69                 //BY DEFAULT LOGGING IS DONE TO THE STANDARD OUTPUT ONLY FOR FAILURES
70
71
72                 int EventCounter = 0;
73                 DataRow drInsert,drDelete,drUpdate;
74                 [Test]
75                 public void run()
76                 {
77                         Exception exp = null;
78
79                         OracleDataAdapter oleDBda = new OracleDataAdapter();
80                         oleDBda.SelectCommand = new OracleCommand("",new OracleConnection());
81
82                         base.OracleDataAdapter_BuildUpdateCommands(ref oleDBda);                
83                         // --------- get data from DB -----------------
84                         DataSet ds = base.PrepareDBData_Update((DbDataAdapter)oleDBda);
85                         // add event handler
86                         oleDBda.RowUpdating +=new OracleRowUpdatingEventHandler(oleDBda_RowUpdating);
87                         
88                         //insert ,delete, update
89                         drInsert = ds.Tables[0].NewRow();
90                         drInsert.ItemArray = new object[] {9991,"Ofer","Borshtein","Insert"};
91                         drDelete = ds.Tables[0].Rows.Find(9992);
92                         drUpdate = ds.Tables[0].Rows.Find(9993);
93                 
94                         ds.Tables[0].Rows.Add(drInsert);
95                         drDelete.Delete();
96                         drUpdate["Title"] = "Jack the ripper"; 
97
98                         //execute update to db, will raise events
99                         oleDBda.Update(ds);
100
101                         try
102                         {
103                                 BeginCase("EventCounter ");
104                                 Compare(EventCounter ,3);
105                         }
106                         catch(Exception ex)     {exp = ex;}
107                         finally {EndCase(exp); exp = null;}
108                 
109                         oleDBda.RowUpdating -=new OracleRowUpdatingEventHandler(oleDBda_RowUpdating);
110                                 
111                         //close connection
112                         if (  ((IDbDataAdapter)oleDBda).SelectCommand.Connection.State != ConnectionState.Closed )
113                                 ((IDbDataAdapter)oleDBda).SelectCommand.Connection.Close();
114                 }
115
116                 private void oleDBda_RowUpdating(object sender, OracleRowUpdatingEventArgs e)
117                 {
118                         Exception exp = null;
119                         switch (e.StatementType)
120                         {
121                                 case StatementType.Insert: 
122                                         try
123                                         {
124                                                 BeginCase("RowInsert");
125                                                 Compare(drInsert ,e.Row );
126                                         }
127                                         catch(Exception ex)     {exp = ex;}
128                                         finally {EndCase(exp); exp = null;}
129                                         EventCounter++;
130                                         break;
131                                 case StatementType.Delete:
132                                         try
133                                         {
134                                                 BeginCase("RowDelete");
135                                                 Compare(drDelete ,e.Row );
136                                         }
137                                         catch(Exception ex)     {exp = ex;}
138                                         finally {EndCase(exp); exp = null;}
139                                         EventCounter++;
140                                         break;
141                                 case StatementType.Update:
142                                         try
143                                         {
144                                                 BeginCase("RowUpdate");
145                                                 Compare(drUpdate ,e.Row );
146                                         }
147                                         catch(Exception ex)     {exp = ex;}
148                                         finally {EndCase(exp); exp = null;}
149                                         EventCounter++;
150                                         break;
151                         }
152                 }
153         }
154 }