/********************************************************
* ADO.NET 2.0 Data Provider for SQLite Version 3.X
* Written by Robert Simpson (robert@blackcastlesoft.com)
*
* Released to the public domain, use at your own risk!
********************************************************/
using System;
using System.Data.Common;
using System.Data.SQLite;
using System.IO;
using System.Reflection;
using System.Windows.Forms;
namespace test
{
class Program
{
private static readonly string DefaultConnectionString =
"Data Source={DataDirectory}\\test.db;Password=yVXL39etehPX;";
///////////////////////////////////////////////////////////////////////
private static string GetConnectionString(
string directory
)
{
string connectionString = DefaultConnectionString;
try
{
//
// NOTE: Attempt to open the configuration file associated with
// this test executable. It should contain *EXACTLY* one
// line, which will be the connection string to use for
// this test run.
//
using (StreamReader streamReader = File.OpenText(Path.Combine(
directory, "test.cfg")))
{
connectionString = streamReader.ReadToEnd().Trim();
}
}
catch
{
// do nothing.
}
return connectionString;
}
///////////////////////////////////////////////////////////////////////
private static string GetInitializationSQL(
string directory
)
{
string sql = null;
try
{
//
// NOTE: Attempt to open the SQL file associated with this test
// executable. If present, it can contain SQL statements
// to be executed against the new connection prior to the
// tests running.
//
using (StreamReader streamReader = File.OpenText(Path.Combine(
directory, "test.sql")))
{
sql = streamReader.ReadToEnd().Trim();
}
}
catch
{
// do nothing.
}
return sql;
}
///////////////////////////////////////////////////////////////////////
internal static void ExecuteInitializationSQL(
DbConnection connection,
string sql,
bool isolated
)
{
if (!String.IsNullOrEmpty(sql))
{
if (isolated)
{
using (DbConnection newConnection = NewConnection())
{
using (DbCommand command = newConnection.CreateCommand())
{
command.CommandText = sql;
/* IGNORED */
command.ExecuteNonQuery(); /* throw */
}
}
}
else
{
if (connection == null)
return;
using (DbCommand command = connection.CreateCommand())
{
command.CommandText = sql;
/* IGNORED */
command.ExecuteNonQuery(); /* throw */
}
}
}
}
///////////////////////////////////////////////////////////////////////
internal static DbConnection NewConnection()
{
return new SQLiteConnection();
}
///////////////////////////////////////////////////////////////////////
[MTAThread]
static int Main(string[] args)
{
bool autoClose = false;
bool isolatedSql = false;
int exitCode = 2; /* INCOMPLETE */
Assembly assembly = Assembly.GetExecutingAssembly();
AssemblyName assemblyName = assembly.GetName();
string directory = Path.GetDirectoryName(assemblyName.CodeBase);
if (args.Length > 0)
{
try { autoClose = bool.Parse(args[0]); }
catch { }
}
if (args.Length > 1)
{
try { isolatedSql = bool.Parse(args[1]); }
catch { }
}
try { File.Delete(directory + "\\test.db"); }
catch { }
SQLiteFunction.RegisterFunction(typeof(TestFunc));
SQLiteFunction.RegisterFunction(typeof(MyCount));
SQLiteFunction.RegisterFunction(typeof(MySequence));
using (DbConnection cnn = NewConnection())
{
string connectionString = GetConnectionString(directory);
//
// NOTE: If we are unable to obtain a valid connection string
// bail out now.
//
if (connectionString != null)
{
//
// NOTE: Replace the "{DataDirectory}" token, if any, in
// the connection string with the actual directory
// this test assembly is executing from.
//
connectionString = connectionString.Replace(
"{DataDirectory}", directory);
cnn.ConnectionString = connectionString;
cnn.Open();
string sql = GetInitializationSQL(directory);
ExecuteInitializationSQL(cnn, sql, isolatedSql);
TestCases tests = new TestCases(
connectionString, cnn, sql, autoClose, isolatedSql);
tests.Run();
Application.Run(tests.frm);
if (tests.Succeeded())
exitCode = 0; /* SUCCESS */
else
exitCode = 1; /* FAILURE */
}
}
return exitCode;
}
}
}