The sqlite session tests are by Mats Lindh <mats at lindh.no>.
--- /dev/null
+--TEST--
+Test sqlite_exec() function : basic functionality
+--SKIPIF--
+<?php if (!extension_loaded("sqlite")) print "skip sqlite extension not loaded"; ?>
+--FILE--
+<?php
+/* Prototype : boolean sqlite_exec(string query, resource db[, string &error_message])
+ * Description: Executes a result-less query against a given database
+ * Source code: ext/sqlite/sqlite.c
+ * Alias to functions:
+ */
+
+echo "*** Testing sqlite_exec() : basic functionality ***\n";
+
+// set up variables
+$query = 'CREATE TABLE foobar (id INTEGER PRIMARY KEY, name CHAR(255));';
+$error_message = null;
+
+// procedural
+$db = sqlite_open(':memory:');
+var_dump( sqlite_exec($db, $query) );
+sqlite_close($db);
+
+// oo-style
+$db = new SQLiteDatabase(':memory:');
+var_dump( $db->queryExec($query, $error_message) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing sqlite_exec() : basic functionality ***
+bool(true)
+bool(true)
+===DONE===
--- /dev/null
+--TEST--
+Test sqlite_exec() function : error behaviour and functionality
+--SKIPIF--
+<?php if (!extension_loaded("sqlite")) print "skip sqlite extension not loaded"; ?>
+--FILE--
+<?php
+/* Prototype : boolean sqlite_exec(string query, resource db[, string &error_message])
+ * Description: Executes a result-less query against a given database
+ * Source code: ext/sqlite/sqlite.c
+ * Alias to functions:
+ */
+
+echo "*** Testing sqlite_exec() : error functionality ***\n";
+
+// set up variables
+$fail = 'CRE ATE TABLE';
+$error_message = null;
+
+// procedural
+$db = sqlite_open(':memory:');
+var_dump( sqlite_exec($db, $fail, $error_message) );
+var_dump( $error_message );
+var_dump( sqlite_exec($db) );
+sqlite_close($db);
+
+// oo-style
+$db = new SQLiteDatabase(':memory:');
+var_dump( $db->queryExec($fail, $error_message, 'fooparam') );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing sqlite_exec() : error functionality ***
+
+Warning: sqlite_exec(): near "CRE": syntax error in %s on line %d
+bool(false)
+%string|unicode%(24) "near "CRE": syntax error"
+
+Warning: sqlite_exec() expects at least 2 parameters, 1 given in %s on line %d
+NULL
+
+Warning: SQLiteDatabase::queryExec() expects at most 2 parameters, 3 given in %s on line %d
+NULL
+===DONE===
--- /dev/null
+--TEST--
+Test sqlite_last_error() function : basic functionality
+--SKIPIF--
+<?php if (!extension_loaded("sqlite")) print "skip sqlite extension not loaded"; ?>
+--FILE--
+<?php
+/* Prototype : int sqlite_last_error(resource db)
+ * Description: Returns the error code of the last error for a database.
+ * Source code: ext/sqlite/sqlite.c
+ * Alias to functions:
+ */
+
+echo "*** Testing sqlite_last_error() : basic functionality ***\n";
+
+// set up variables
+$query = 'CREATE TAB LE foobar (id INTEGER PRIMARY KEY, name CHAR(255));';
+$query_ok = 'CREATE TABLE foobar (id INTEGER, name CHAR(255));';
+
+// procedural
+$db = sqlite_open(':memory:');
+var_dump( sqlite_last_error($db) === SQLITE_OK );
+sqlite_exec($db, $query);
+var_dump( sqlite_last_error($db) === SQLITE_ERROR );
+sqlite_exec($db, $query_ok);
+var_dump( sqlite_last_error($db) === SQLITE_OK );
+sqlite_close($db);
+
+// oo-style
+$db = new SQLiteDatabase(':memory:');
+$db->queryExec($query);
+var_dump( $db->lastError() === SQLITE_ERROR );
+$db->queryExec($query_ok);
+var_dump( $db->lastError() === SQLITE_OK );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing sqlite_last_error() : basic functionality ***
+bool(true)
+
+Warning: sqlite_exec(): near "TAB": syntax error in %s on line %d
+bool(true)
+bool(true)
+
+Warning: SQLiteDatabase::queryExec(): near "TAB": syntax error in %s on line %d
+bool(true)
+bool(true)
+===DONE===
--- /dev/null
+--TEST--
+Test sqlite_last_error() function : error conditions
+--SKIPIF--
+<?php if (!extension_loaded("sqlite")) print "skip sqlite extension not loaded"; ?>
+--FILE--
+<?php
+/* Prototype : int sqlite_last_error(resource db)
+ * Description: Returns the error code of the last error for a database.
+ * Source code: ext/sqlite/sqlite.c
+ * Alias to functions:
+ */
+
+echo "*** Testing sqlite_last_error() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing sqlite_last_error() function with Zero arguments --\n";
+var_dump( sqlite_last_error() );
+
+//Test sqlite_last_error with one more than the expected number of arguments
+echo "\n-- Testing sqlite_last_error() function with more than expected no. of arguments --\n";
+
+$db = sqlite_open(':memory:');
+$extra_arg = 10;
+var_dump( sqlite_last_error($db, $extra_arg) );
+sqlite_close($db);
+
+$db = new SQLiteDatabase(':memory:');
+var_dump( $db->lastError($extra_arg) );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing sqlite_last_error() : error conditions ***
+
+-- Testing sqlite_last_error() function with Zero arguments --
+
+Warning: sqlite_last_error() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing sqlite_last_error() function with more than expected no. of arguments --
+
+Warning: sqlite_last_error() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+
+Warning: SQLiteDatabase::lastError() expects exactly 0 parameters, 1 given in %s on line %d
+NULL
+===DONE===
--- /dev/null
+--TEST--
+SQLite: sqlite_popen() basic tests
+--SKIPIF--
+<?php if (!extension_loaded("sqlite")) print "skip"; ?>
+--FILE--
+<?php
+/* Prototype : resource sqlite_popen(string filename [, int mode [, string &error_message]])
+ * Description: Opens a persistent handle to a SQLite database. Will create the database if it does not exist.
+ * Source code: ext/sqlite/sqlite.c
+ * Alias to functions:
+*/
+
+ $db1 = sqlite_popen(":memory:");
+ $db2 = sqlite_popen(":memory:");
+
+ var_dump($db1);
+ var_dump($db2);
+
+ list($resourceId1) = sscanf((string) $db1, "resource(%d) of type (sqlite database (persistent))");
+ list($resourceId2) = sscanf((string) $db2, "resource(%d) of type (sqlite database (persistent))");
+
+ var_dump($resourceId1 === $resourceId2);
+?>
+--EXPECTF--
+resource(%d) of type (sqlite database (persistent))
+resource(%d) of type (sqlite database (persistent))
+bool(true)
--- /dev/null
+--TEST--
+Test sqlite_popen() function : error conditions
+--SKIPIF--
+<?php if (!extension_loaded("sqlite")) print "skip sqlite extension not loaded"; ?>
+--FILE--
+<?php
+/* Prototype : resource sqlite_popen(string filename [, int mode [, string &error_message]])
+ * Description: Opens a persistent handle to a SQLite database. Will create the database if it does not exist.
+ * Source code: ext/sqlite/sqlite.c
+ * Alias to functions:
+ */
+
+$message = '';
+
+echo "*** Testing sqlite_popen() : error conditions ***\n";
+
+var_dump( sqlite_popen() );
+var_dump( sqlite_popen(":memory:", 0666, $message, 'foobar') );
+var_dump( sqlite_popen("", 0666, $message) );
+var_dump( $message );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing sqlite_popen() : error conditions ***
+
+Warning: sqlite_popen() expects at least 1 parameter, 0 given in %s on line %d
+NULL
+
+Warning: sqlite_popen() expects at most 3 parameters, 4 given in %s on line %d
+NULL
+bool(false)
+NULL
+===DONE===
--- /dev/null
+--TEST--
+sqlite, session storage test
+--CREDITS--
+Mats Lindh <mats at lindh.no>
+#Testfest php.no
+--INI--
+session.save_handler = sqlite
+--SKIPIF--
+if (!extension_loaded("session"))
+{
+ die("skip Session module not loaded");
+}
+if (!extension_loaded("sqlite"))
+{
+ die("skip Session module not loaded");
+}
+--FILE--
+<?php
+/* Description: Tests that sqlite can be used as a session save handler
+* Source code: ext/sqlite/sess_sqlite.c
+*/
+
+ob_start();
+session_save_path(__DIR__ . "/sessiondb.sdb");
+
+// create the session and set a session value
+session_start();
+$_SESSION["test"] = "foo_bar";
+
+// close the session and unset the value
+session_write_close();
+unset($_SESSION["test"]);
+var_dump(isset($_SESSION["test"]));
+
+// start the session again and check that we have the proper value
+session_start();
+var_dump($_SESSION["test"]);
+ob_end_flush();
+?>
+--EXPECTF--
+bool(false)
+%unicode|string%(7) "foo_bar"
+--CLEAN--
+<?php
+ unlink(__DIR__ . "/sessiondb.sdb")
+?>
--- /dev/null
+--TEST--
+sqlite, session destroy test
+--CREDITS--
+Mats Lindh <mats at lindh.no>
+#Testfest php.no
+--INI--
+session.save_handler = sqlite
+--SKIPIF--
+if (!extension_loaded("session"))
+{
+ die("skip Session module not loaded");
+}
+if (!extension_loaded("sqlite"))
+{
+ die("skip sqlite module not loaded");
+}
+--FILE--
+<?php
+/* Description: Tests that sqlite will destroy a session when used as a session handler
+* Source code: ext/sqlite/sess_sqlite.c
+*/
+ob_start();
+session_save_path(__DIR__ . "/sessiondb.sdb");
+
+// start a session and save a value to it before commiting the session to the database
+session_start();
+$_SESSION["test"] = "foo_bar";
+session_write_close();
+
+// remove the session value
+unset($_SESSION["test"]);
+var_dump(isset($_SESSION["test"]));
+
+// start the session again and destroy it
+session_start();
+var_dump($_SESSION["test"]);
+session_destroy();
+session_write_close();
+
+unset($_SESSION["test"]);
+
+// check that the session has been destroyed
+session_start();
+var_dump(isset($_SESSION["test"]));
+ob_end_flush();
+?>
+--EXPECTF--
+bool(false)
+%unicode|string%(7) "foo_bar"
+bool(false)
+--CLEAN--
+<?php
+ unlink(__DIR__ . "/sessiondb.sdb")
+?>