pdo_test.inc 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. # PDO test framework utilities
  3. if (getenv('PDOTEST_DSN') === false) {
  4. $common = '';
  5. $append = false;
  6. foreach(file(dirname($_SERVER['PHP_SELF']).'/common.phpt') as $line) {
  7. if ($append) {
  8. $common .= $line;
  9. } elseif (trim($line) == '--REDIRECTTEST--') {
  10. $append = true;
  11. }
  12. }
  13. $conf = eval($common);
  14. foreach($conf['ENV'] as $n=>$v) putenv("$n=$v");
  15. }
  16. class PDOTest {
  17. // create an instance of the PDO driver, based on
  18. // the current environment
  19. static function factory($classname = 'PDO', $drop_test_tables = true) {
  20. $dsn = getenv('PDOTEST_DSN');
  21. $user = getenv('PDOTEST_USER');
  22. $pass = getenv('PDOTEST_PASS');
  23. $attr = getenv('PDOTEST_ATTR');
  24. if (is_string($attr) && strlen($attr)) {
  25. $attr = unserialize($attr);
  26. } else {
  27. $attr = null;
  28. }
  29. if ($user === false) $user = NULL;
  30. if ($pass === false) $pass = NULL;
  31. $db = new $classname($dsn, $user, $pass, $attr);
  32. if (!$db) {
  33. die("Could not create PDO object (DSN=$dsn, user=$user)\n");
  34. }
  35. // Ignore errors about non-existent tables
  36. $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
  37. // clean up any crufty test tables we might have left behind
  38. // on a previous run
  39. static $test_tables = array(
  40. 'test',
  41. 'test2',
  42. 'classtypes'
  43. );
  44. if ($drop_test_tables) {
  45. foreach ($test_tables as $table) {
  46. $db->exec("DROP TABLE $table");
  47. }
  48. }
  49. $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  50. $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
  51. $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true);
  52. return $db;
  53. }
  54. static function skip() {
  55. try {
  56. $db = PDOTest::factory();
  57. } catch (PDOException $e) {
  58. die("skip " . $e->getMessage());
  59. }
  60. }
  61. static function test_factory($file) {
  62. $config = self::get_config($file);
  63. foreach ($config['ENV'] as $k => $v) {
  64. putenv("$k=$v");
  65. }
  66. return self::factory();
  67. }
  68. static function get_config($file) {
  69. $data = file_get_contents($file);
  70. $data = preg_replace('/^.*--REDIRECTTEST--/s', '', $data);
  71. $config = eval($data);
  72. return $config;
  73. }
  74. }
  75. ?>