pdo_test.inc 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. // clean up any crufty test tables we might have left behind
  36. // on a previous run
  37. static $test_tables = array(
  38. 'test',
  39. 'test2',
  40. 'classtypes'
  41. );
  42. if ($drop_test_tables) {
  43. foreach ($test_tables as $table) {
  44. $db->exec("DROP TABLE $table");
  45. }
  46. }
  47. $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  48. $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
  49. $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true);
  50. return $db;
  51. }
  52. static function skip() {
  53. try {
  54. $db = PDOTest::factory();
  55. } catch (PDOException $e) {
  56. die("skip " . $e->getMessage());
  57. }
  58. }
  59. static function test_factory($file) {
  60. $config = self::get_config($file);
  61. foreach ($config['ENV'] as $k => $v) {
  62. putenv("$k=$v");
  63. }
  64. return self::factory();
  65. }
  66. static function get_config($file) {
  67. $data = file_get_contents($file);
  68. $data = preg_replace('/^.*--REDIRECTTEST--/s', '', $data);
  69. $config = eval($data);
  70. return $config;
  71. }
  72. }
  73. ?>