Merge pull request #347 from JamesB7/master
[mono.git] / mcs / class / System.Data.OracleClient / Test / System.Data.OracleClient.jvm / OracleDataAdapter / OracleDataAdapter_RowUpdated.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_RowUpdated : ADONetTesterClass
39         {
40                 public static void Main()
41                 {
42                         OracleDataAdapter_RowUpdated tc = new OracleDataAdapter_RowUpdated();
43                         Exception exp = null;
44                         try
45                         {
46                                 tc.BeginTest("OracleDataAdapter_RowUpdated");
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                 int EventCounter = 0;
72                 DataRow drInsert,drDelete,drUpdate;
73                 [Test]
74                 public void run()
75                 {
76                         Exception exp = null;
77
78                         OracleDataAdapter oleDBda = new OracleDataAdapter();
79                         oleDBda.SelectCommand = new OracleCommand("",new OracleConnection());
80
81                         base.OracleDataAdapter_BuildUpdateCommands(ref oleDBda);                
82                         // --------- get data from DB -----------------
83                         DataSet ds = base.PrepareDBData_Update((DbDataAdapter)oleDBda);
84
85
86                         // add event handler
87                         oleDBda.RowUpdated += new OracleRowUpdatedEventHandler(oleDBda_RowUpdated);
88                         
89                         //insert ,delete, update
90                         drInsert = ds.Tables[0].NewRow();
91                         drInsert.ItemArray = new object[] {9991,"Ofer","Borshtein","Insert"};
92                         drDelete = ds.Tables[0].Rows.Find(9992);
93                         drUpdate = ds.Tables[0].Rows.Find(9993);
94                 
95                         ds.Tables[0].Rows.Add(drInsert);
96                         drDelete.Delete();
97                         drUpdate["Title"] = "Jack the ripper"; 
98
99                         //execute update to db, will raise events
100                         oleDBda.Update(ds);
101
102                         try
103                         {
104                                 BeginCase("EventCounter ");
105                                 Compare(EventCounter ,3);
106                         }
107                         catch(Exception ex)     {exp = ex;}
108                         finally {EndCase(exp); exp = null;}
109                 
110                         oleDBda.RowUpdated -= new OracleRowUpdatedEventHandler(oleDBda_RowUpdated);
111                 
112                         //close connection
113                         if (  ((IDbDataAdapter)oleDBda).SelectCommand.Connection.State != ConnectionState.Closed )
114                                 ((IDbDataAdapter)oleDBda).SelectCommand.Connection.Close();
115                 }
116
117                 private void oleDBda_RowUpdated(object sender, OracleRowUpdatedEventArgs e)
118                 {
119                         Exception exp = null;
120                         switch (e.StatementType)
121                         {
122                                 case StatementType.Insert: 
123                                         try
124                                         {
125                                                 BeginCase("RowInsert");
126                                                 Compare(drInsert ,e.Row );
127                                         }
128                                         catch(Exception ex)     {exp = ex;}
129                                         finally {EndCase(exp); exp = null;}
130                                         EventCounter++;
131                                         break;
132                                 case StatementType.Delete:
133                                         try
134                                         {
135                                                 BeginCase("RowDelete");
136                                                 Compare(drDelete ,e.Row );
137                                         }
138                                         catch(Exception ex)     {exp = ex;}
139                                         finally {EndCase(exp); exp = null;}
140                                         EventCounter++;
141                                         break;
142                                 case StatementType.Update:
143                                         try
144                                         {
145                                                 BeginCase("RowUpdate");
146                                                 Compare(drUpdate ,e.Row );
147                                         }
148                                         catch(Exception ex)     {exp = ex;}
149                                         finally {EndCase(exp); exp = null;}
150                                         EventCounter++;
151                                         break;
152                         }
153                 }
154         }
155 }