1 // SqliteDataAdapterUnitTests.cs - NUnit Test Cases for Mono.Data.Sqlite.SqliteDataAdapter
3 // Author(s): Thomas Zoechling <thomas.zoechling@gmx.at>
10 using Mono.Data.Sqlite;
11 using NUnit.Framework;
13 namespace MonoTests.Mono.Data.Sqlite
17 public class SqliteCommandUnitTests
19 readonly static string _uri = Path.Combine (Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "SqliteTest.db");
20 readonly static string _connectionString = "URI=file://" + _uri + ", version=3";
21 static SqliteConnection _conn = new SqliteConnection (_connectionString);
22 readonly static string stringvalue = "my keyboard is better than yours : äöüß";
24 public SqliteCommandUnitTests()
36 // We want to start with a fresh db for each full run
37 // The database is created on the first open()
49 using (SqliteCommand createCommand = new SqliteCommand("CREATE TABLE t1(t TEXT, f FLOAT, i INTEGER, b TEXT);", _conn))
50 using (SqliteCommand insertCommand = new SqliteCommand("INSERT INTO t1 (t, f, i, b ) VALUES('" + stringvalue + "',123,123,'123')", _conn))
53 createCommand.ExecuteNonQuery();
54 insertCommand.ExecuteNonQuery();
59 Console.WriteLine (e);
60 throw new AssertionException("Create table failed",e);
72 using (SqliteCommand simpleSelect = new SqliteCommand("SELECT * FROM t1; ", _conn)) // check trailing spaces
75 using (SqliteDataReader dr = simpleSelect.ExecuteReader())
79 string test = dr[0].ToString();
80 Assert.AreEqual(dr["T"], stringvalue); // also checks case-insensitive column
81 Assert.AreEqual(dr["F"], 123);
82 Assert.AreEqual(dr["I"], 123);
83 Assert.AreEqual(dr["B"], "123");
85 Assert.IsTrue(dr.FieldCount>0);
94 using (SqliteCommand insCmd = new SqliteCommand("INSERT INTO t1 VALUES ('todelete',0.1,0,'')", _conn))
95 using (SqliteCommand delCmd = new SqliteCommand("DELETE FROM t1 WHERE t = 'todelete'", _conn))
98 int insReturn = insCmd.ExecuteNonQuery();
99 int delReturn = delCmd.ExecuteNonQuery();
101 Assert.IsTrue(insReturn == delReturn);
109 using (SqliteCommand insCmd = new SqliteCommand("INSERT INTO t1 VALUES ('inserted',0.1,0,'')", _conn))
112 int insReturn = insCmd.ExecuteNonQuery();
113 Assert.IsTrue(insReturn == 1);
121 using (SqliteCommand insCmd = new SqliteCommand("INSERT INTO t1 VALUES ('toupdate',0.1,0,'')", _conn))
122 using (SqliteCommand updCmd = new SqliteCommand("UPDATE t1 SET t = 'updated' ,f = 2.0, i = 2, b = '' WHERE t = 'toupdate'", _conn))
125 insCmd.ExecuteNonQuery();
126 Assert.IsTrue(updCmd.ExecuteNonQuery() == 1);
132 public void ScalarReturn()
134 // This should return the 1 line that got inserted in CreateTable() Test
136 using (SqliteCommand cmd = new SqliteCommand("SELECT COUNT(*) FROM t1 WHERE t LIKE '%äöüß'", _conn))
139 Assert.AreEqual(1, Convert.ToInt32(cmd.ExecuteScalar()));
144 public void InsertWithTransaction()
148 using (SqliteTransaction t = _conn.BeginTransaction() as SqliteTransaction)
149 using (SqliteCommand c1 = new SqliteCommand("INSERT INTO t1 VALUES ('a',0.1,0,'0')", _conn, t))
150 using (SqliteCommand c2 = new SqliteCommand("INSERT INTO t1 VALUES ('b',1.2,0,'0')", _conn, t))
151 using (SqliteCommand c3 = new SqliteCommand("INSERT INTO t1 VALUES ('c',0.3,1,'0')", _conn, t))
152 using (SqliteCommand c4 = new SqliteCommand("INSERT INTO t1 VALUES ('d',0.4,0,'1')", _conn, t))
156 c1.ExecuteNonQuery();
157 c2.ExecuteNonQuery();
158 c3.ExecuteNonQuery();
159 c4.ExecuteNonQuery();
165 throw new AssertionException("Sqlite Commands failed", e);
172 [ExpectedException(typeof(SqliteException))]
174 [ExpectedException(typeof(SqliteSyntaxException))]
176 public void InsertWithFailingTransaction()
180 using (SqliteTransaction t = _conn.BeginTransaction() as SqliteTransaction)
181 using (SqliteCommand c1 = new SqliteCommand("INSERT INTO t1 VALUES ('1','0','0','0')", _conn, t))
182 using (SqliteCommand c2 = new SqliteCommand("INSERT INTO t1 VALUES ('0','1','0','0')", _conn, t))
183 using (SqliteCommand c3 = new SqliteCommand("INSERT INTO t1 VALUES ('x',?,'x',?,'x',?,'x')", _conn, t))
184 using (SqliteCommand c4 = new SqliteCommand("INSERT INTO t1 VALUES ('0','0','0','1')", _conn, t))
188 c1.ExecuteNonQuery();
189 c2.ExecuteNonQuery();
190 c3.ExecuteNonQuery();
191 c4.ExecuteNonQuery();