2010-06-21 Rodrigo Kumpera <rkumpera@novell.com>
[mono.git] / mcs / class / Mono.Data.Sqlite / Test / SqliteDataAdapterUnitTests.cs
1 // SqliteDataAdapterUnitTests.cs - NUnit Test Cases for Mono.Data.Sqlite.SqliteDataAdapter
2 //
3 // Author(s):   Thomas Zoechling <thomas.zoechling@gmx.at>
4
5
6 using System;
7 using System.Data;
8 using System.IO;
9 using System.Text;
10 using Mono.Data.Sqlite;
11 using NUnit.Framework;
12
13 namespace MonoTests.Mono.Data.Sqlite
14 {
15         [TestFixture]
16         public class SqliteDataAdapterUnitTests
17         {
18                 readonly static string _uri = "SqliteTest.db";
19                 readonly static string _connectionString = "URI=file://" + _uri + ", version=3";
20                 static SqliteConnection _conn = new SqliteConnection (_connectionString);
21         
22                 static SqliteDataAdapter PrepareDataAdapter()
23                 {
24                         SqliteCommand select  = new SqliteCommand("SELECT t, f, i, b FROM t1",_conn);
25                         SqliteCommand update = new SqliteCommand("UPDATE t1 SET t = :textP, f = :floatP, i = :integerP, n=:blobP WHERE t = :textP ");
26                         update.Connection=_conn;
27                         SqliteCommand delete = new SqliteCommand("DELETE FROM t1 WHERE t = :textP");
28                         delete.Connection=_conn;
29                         SqliteCommand insert = new SqliteCommand("INSERT INTO t1  (t, f, i, b ) VALUES(:textP,:floatP,:integerP,:blobP)");
30                         insert.Connection=_conn;
31                         SqliteDataAdapter custDA = new SqliteDataAdapter(select);
32                 
33                         SqliteParameter textP = new SqliteParameter();
34                         textP.ParameterName = "textP";
35                         textP.SourceColumn = "t";
36                 
37                         SqliteParameter floatP = new SqliteParameter();
38                         floatP.ParameterName = "floatP";
39                         floatP.SourceColumn = "f";
40                 
41                         SqliteParameter integerP = new SqliteParameter();
42                         integerP.ParameterName ="integerP";
43                         integerP.SourceColumn = "i";
44
45                         SqliteParameter blobP = new SqliteParameter();
46                         blobP.ParameterName = "blobP";
47                         blobP.SourceColumn = "b";
48                 
49                         update.Parameters.Add(textP);
50                         update.Parameters.Add(floatP);
51                         update.Parameters.Add(integerP);
52                         update.Parameters.Add(blobP);
53                 
54                         delete.Parameters.Add(textP);
55                 
56                         insert.Parameters.Add(textP);
57                         insert.Parameters.Add(floatP);
58                         insert.Parameters.Add(integerP);
59                         insert.Parameters.Add(blobP);
60                 
61                         custDA.UpdateCommand = update;
62                         custDA.DeleteCommand = delete;
63                         custDA.InsertCommand = insert;
64                 
65                         return custDA;
66                 }
67
68                 [Test]
69                 [Category ("NotWorking")]
70                 public void GetSchemaTable()
71                 {
72                         _conn.ConnectionString = _connectionString;
73                         SqliteDataReader reader = null;
74                         using (_conn) 
75                         {
76                                 _conn.Open ();
77                                 SqliteCommand cmd = (SqliteCommand) _conn.CreateCommand ();
78                                 cmd.CommandText = "select * from t1";
79                                 reader = cmd.ExecuteReader ();
80                                 try 
81                                 {
82                                         DataTable dt = reader.GetSchemaTable ();
83                                         Assert.IsNotNull (dt, "#GS1 should return valid table");
84                                         Assert.IsTrue (dt.Rows.Count > 0, "#GS2 should return with rows ;-)");
85                                 }
86                                 finally 
87                                 {
88                                         if (reader != null && !reader.IsClosed)
89                                                 reader.Close ();
90                                         _conn.Close ();
91                                 }
92                         }
93                 }
94
95                 [Test]
96                 [Category ("NotWorking")]
97                 public void DataAdapterRandomValues()
98                 {
99                         SqliteDataAdapter da = PrepareDataAdapter();
100                         DataSet ds = new DataSet();
101                         int i = 0;
102                         Random random = new Random();
103                         using(_conn)
104                         {
105                                 _conn.Open();
106                                 da.Fill(ds);
107                                 for(; i<300;i++)
108                                 {
109                                         DataRow dr = ds.Tables[0].NewRow();
110                                         
111                                         foreach(DataColumn dc in ds.Tables[0].Columns)
112                                         {
113                                                 switch(dc.DataType.Name)
114                                                 {
115                                                         case "String":
116                                                         {
117                                                                 int ml=0;
118                                                                 if(dc.MaxLength!=-1)
119                                                                 {
120                                                                         ml=dc.MaxLength;
121                                                                 }
122                                                                 else
123                                                                 {
124                                                                         ml=256;
125                                                                 }
126                                                                 StringBuilder builder = new StringBuilder(ml);
127                                                                 for (int k=0; k < random.Next(ml); k++)
128                                                                 {
129                                                                         builder.Append((char)random.Next(65536));
130                                                 
131                                                                 }
132                                                                 string curs = builder.ToString();
133                                                                 dr[dc]=curs;
134                                                                 break;
135                                                         }
136
137                                                         case "Int32":
138                                                         {
139                                                                 dr[dc]=random.Next(65536);
140                                                                 break;
141                                                         }
142
143                                                         case "Int64":
144                                                         {
145                                                                 dr[dc]=Convert.ToInt64(random.Next(65536));
146                                                                 break;
147                                                         }
148                                                 }
149                                         }
150                                         ds.Tables[0].Rows.Add(dr);
151                                 }
152                                 int res = da.Update(ds);
153                                 Assert.AreEqual(i,res);
154                         }
155                 }
156         }
157 }