query = $statement; } public function execute($input_parameters=array()) { $this->input_parameters = $input_parameters; } public function fetch($fetch_style) { if ($this->current_row == 5) { return false; } else { $this->current_row++; return array('name' => 'Fred', 'age' => 10, 'id' => '1'); } } public function get_query() { return $this->query; } public function get_parameters() { return $this->input_parameters; } public function get_bound_query() { $sql = $this->get_query(); $sql = str_replace("?", "%s", $sql); $quoted_values = array(); $values = $this->get_parameters(); foreach ($values as $value) { $quoted_values[] = '"' . $value . '"'; } return vsprintf($sql, $quoted_values); } } /** * * Mock database class implementing a subset * of the PDO API. * */ class DummyPDO { private $last_query; public function __construct($connection_string="") { } public function setAttribute($attribute, $value) { } public function prepare($statement) { $this->last_query = new DummyPDOStatement($statement); return $this->last_query; } public function lastInsertId() { return 0; } public function get_last_query() { return $this->last_query->get_bound_query(); } } /** * * Class to provide simple testing functionality * */ class Tester { private static $passed_tests = array(); private static $failed_tests = array(); private static $db; /** * Set the dummy database connection to be * used by the class to capture the SQL strings */ public static function set_db($db) { self::$db = $db; } /** * Report a passed test */ private static function report_pass($test_name) { echo "

PASS: $test_name

"; self::$passed_tests[] = $test_name; } /** * Report a failed test */ private static function report_failure($test_name, $query) { echo "

FAIL: $test_name

"; echo "

Expected: $query

"; echo "

Actual: " . self::$db->get_last_query() . "

"; self::$failed_tests[] = $test_name; } /** * Print a summary of passed and failed test counts */ public static function report() { $passed_count = count(self::$passed_tests); $failed_count = count(self::$failed_tests); echo "

$passed_count tests passed. $failed_count tests failed.

"; if ($failed_count != 0) { echo "

Failed tests: " . join(", ", self::$failed_tests) . "

"; } } /** * Check the provided string is equal to the last * query generated by the dummy database class. */ public static function check_equal($test_name, $query) { $last_query = self::$db->get_last_query(); if ($query == self::$db->get_last_query()) { self::report_pass($test_name); } else { self::report_failure($test_name, $query); } } }