Halve the stack depth for both the new single step tests
[mono.git] / mcs / class / Mono.Data.Sqlite / Test / SqliteParameterUnitTests.cs
1 // SqliteParameterUnitTests.cs - NUnit Test Cases for Mono.Data.Sqlite.SqliteParameter
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 SqliteParameterUnitTests
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                 public SqliteParameterUnitTests()
23                 {
24                 }
25                 
26                 [Test]
27                 [Category ("NotWorking")]
28                 // fails randomly :)
29                 public void InsertRandomValuesWithParameter()
30                 {
31                         SqliteParameter textP = new SqliteParameter();
32                         textP.ParameterName = "textP";
33                         textP.SourceColumn = "t";
34                 
35                         SqliteParameter floatP = new SqliteParameter();
36                         floatP.ParameterName = "floatP";
37                         floatP.SourceColumn = "nu";
38                 
39                         SqliteParameter integerP = new SqliteParameter();
40                         integerP.ParameterName ="integerP";
41                         integerP.SourceColumn = "i";
42
43                         SqliteParameter blobP = new SqliteParameter();
44                         blobP.ParameterName = "blobP";
45                         blobP.SourceColumn = "b";
46
47                         Random random = new Random();
48                         StringBuilder builder = new StringBuilder();
49                         for (int k=0; k < random.Next(0,100); k++)
50                         {
51                                 builder.Append((char)random.Next(65536));
52                         }
53                         
54                         SqliteCommand insertCmd = new SqliteCommand("DELETE FROM t1; INSERT INTO t1  (t, f, i, b ) VALUES(:textP,:floatP,:integerP,:blobP)",_conn);
55                         
56                         insertCmd.Parameters.Add(textP);
57                         insertCmd.Parameters.Add(floatP);
58                         insertCmd.Parameters.Add(blobP);
59                         insertCmd.Parameters.Add(integerP);
60                         
61                         textP.Value=builder.ToString();
62                         floatP.Value=Convert.ToInt64(random.Next(999));
63                         integerP.Value=random.Next(999);
64                         blobP.Value=System.Text.Encoding.UTF8.GetBytes("\u05D0\u05D1\u05D2" + builder.ToString());
65                         
66                         SqliteCommand selectCmd = new SqliteCommand("SELECT * from t1", _conn);
67
68                         using(_conn)
69                         {
70                                 _conn.Open();
71                                 int res = insertCmd.ExecuteNonQuery();
72                                 Assert.AreEqual(res,1);
73                                 
74                                 using (IDataReader reader = selectCmd.ExecuteReader()) {
75                                         Assert.AreEqual(reader.Read(), true);
76                                         Assert.AreEqual(reader["t"], textP.Value);
77                                         Assert.AreEqual(reader["f"], floatP.Value);
78                                         Assert.AreEqual(reader["i"], integerP.Value);
79                                         
80                                         object compareValue;
81                                         if (blobP.Value is byte[])
82                                                 compareValue = System.Text.Encoding.UTF8.GetString ((byte[])blobP.Value);
83                                         else
84                                                 compareValue = blobP.Value;
85                                         Assert.AreEqual(reader["b"], compareValue);
86                                         Assert.AreEqual(reader.Read(), false);
87                                 }
88                         }
89                 }
90         }
91 }