AllTests.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. <?php
  2. /**
  3. * Zend Framework
  4. *
  5. * LICENSE
  6. *
  7. * This source file is subject to the new BSD license that is bundled
  8. * with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://framework.zend.com/license/new-bsd
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@zend.com so we can send you a copy immediately.
  14. *
  15. * @category Zend
  16. * @package Zend_Db
  17. * @subpackage UnitTests
  18. * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
  19. * @license http://framework.zend.com/license/new-bsd New BSD License
  20. * @version $Id$
  21. */
  22. if (!defined('PHPUnit_MAIN_METHOD')) {
  23. define('PHPUnit_MAIN_METHOD', 'Zend_Db_AllTests::main');
  24. }
  25. /**
  26. * Test helper
  27. */
  28. require_once dirname(__FILE__) . '/../../TestHelper.php';
  29. /**
  30. * PHPUnit_Framework_TestSuite
  31. */
  32. require_once 'PHPUnit/Framework/TestSuite.php';
  33. /**
  34. * PHPUnit_TextUI_TestRunner
  35. */
  36. require_once 'PHPUnit/TextUI/TestRunner.php';
  37. /**
  38. * @see Zend_Loader
  39. */
  40. require_once 'Zend/Loader.php';
  41. /**
  42. * @see Zend_Db_SkipTests
  43. */
  44. require_once 'Zend/Db/SkipTests.php';
  45. /**
  46. * @see Zend_Db_Profiler_AllTests
  47. */
  48. require_once 'Zend/Db/Profiler/AllTests.php';
  49. /**
  50. * @category Zend
  51. * @package Zend_Db
  52. * @subpackage UnitTests
  53. * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
  54. * @license http://framework.zend.com/license/new-bsd New BSD License
  55. * @group Zend_Db
  56. */
  57. class Zend_Db_AllTests
  58. {
  59. protected static $_skipTestSuite = null;
  60. public static function main()
  61. {
  62. PHPUnit_TextUI_TestRunner::run(self::suite());
  63. }
  64. public static function suite()
  65. {
  66. $suite = new PHPUnit_Framework_TestSuite('Zend Framework - Zend_Db');
  67. /**
  68. * Static tests should always be enabled,
  69. * but if they're not, don't throw an error.
  70. */
  71. if (!defined('TESTS_ZEND_DB_ADAPTER_STATIC_ENABLED')) {
  72. define('TESTS_ZEND_DB_ADAPTER_STATIC_ENABLED', true);
  73. }
  74. self::_addDbTestSuites($suite, 'Static');
  75. self::_addDbTestSuites($suite, 'Db2');
  76. self::_addDbTestSuites($suite, 'Mysqli');
  77. self::_addDbTestSuites($suite, 'Oracle');
  78. self::_addDbTestSuites($suite, 'Sqlsrv');
  79. /**
  80. * @todo self::_addDbTestSuites($suite, 'Odbc');
  81. */
  82. self::_addDbTestSuites($suite, 'Pdo_Ibm');
  83. self::_addDbTestSuites($suite, 'Pdo_Mssql');
  84. self::_addDbTestSuites($suite, 'Pdo_Mysql');
  85. self::_addDbTestSuites($suite, 'Pdo_Oci');
  86. self::_addDbTestSuites($suite, 'Pdo_Pgsql');
  87. self::_addDbTestSuites($suite, 'Pdo_Sqlite');
  88. if (self::$_skipTestSuite !== null) {
  89. $suite->addTest(self::$_skipTestSuite);
  90. }
  91. $suite->addTest(Zend_Db_Profiler_AllTests::suite());
  92. return $suite;
  93. }
  94. protected static function _addDbTestSuites($suite, $driver)
  95. {
  96. $DRIVER = strtoupper($driver);
  97. $enabledConst = "TESTS_ZEND_DB_ADAPTER_{$DRIVER}_ENABLED";
  98. if (!defined($enabledConst) || constant($enabledConst) != true) {
  99. self::_skipTestSuite($driver, "this Adapter is not enabled in TestConfiguration.php");
  100. return;
  101. }
  102. $ext = array(
  103. 'Oracle' => 'oci8',
  104. 'Db2' => 'ibm_db2',
  105. 'Mysqli' => 'mysqli',
  106. 'Sqlsrv' => 'sqlsrv',
  107. /**
  108. * @todo 'Odbc'
  109. */
  110. );
  111. if (isset($ext[$driver]) && !extension_loaded($ext[$driver])) {
  112. self::_skipTestSuite($driver, "extension '{$ext[$driver]}' is not loaded");
  113. return;
  114. }
  115. if (preg_match('/^pdo_(.*)/i', $driver, $matches)) {
  116. // check for PDO extension
  117. if (!extension_loaded('pdo')) {
  118. self::_skipTestSuite($driver, "extension 'PDO' is not loaded");
  119. return;
  120. }
  121. // check the PDO driver is available
  122. $pdo_driver = strtolower($matches[1]);
  123. if (!in_array($pdo_driver, PDO::getAvailableDrivers())) {
  124. self::_skipTestSuite($driver, "PDO driver '{$pdo_driver}' is not available");
  125. return;
  126. }
  127. }
  128. try {
  129. Zend_Loader::loadClass("Zend_Db_Adapter_{$driver}Test");
  130. Zend_Loader::loadClass("Zend_Db_Profiler_{$driver}Test");
  131. Zend_Loader::loadClass("Zend_Db_Statement_{$driver}Test");
  132. Zend_Loader::loadClass("Zend_Db_Select_{$driver}Test");
  133. Zend_Loader::loadClass("Zend_Db_Table_{$driver}Test");
  134. Zend_Loader::loadClass("Zend_Db_Table_Select_{$driver}Test");
  135. Zend_Loader::loadClass("Zend_Db_Table_Rowset_{$driver}Test");
  136. Zend_Loader::loadClass("Zend_Db_Table_Row_{$driver}Test");
  137. Zend_Loader::loadClass("Zend_Db_Table_Relationships_{$driver}Test");
  138. // if we get this far, there have been no exceptions loading classes
  139. // so we can add them as test suites
  140. $suite->addTestSuite("Zend_Db_Adapter_{$driver}Test");
  141. $suite->addTestSuite("Zend_Db_Profiler_{$driver}Test");
  142. $suite->addTestSuite("Zend_Db_Statement_{$driver}Test");
  143. $suite->addTestSuite("Zend_Db_Select_{$driver}Test");
  144. $suite->addTestSuite("Zend_Db_Table_{$driver}Test");
  145. $suite->addTestSuite("Zend_Db_Table_Select_{$driver}Test");
  146. $suite->addTestSuite("Zend_Db_Table_Rowset_{$driver}Test");
  147. $suite->addTestSuite("Zend_Db_Table_Row_{$driver}Test");
  148. $suite->addTestSuite("Zend_Db_Table_Relationships_{$driver}Test");
  149. } catch (Zend_Exception $e) {
  150. self::_skipTestSuite($driver, "cannot load test classes: " . $e->getMessage());
  151. }
  152. }
  153. protected static function _skipTestSuite($driver, $message = '')
  154. {
  155. $skipTestClass = "Zend_Db_Skip_{$driver}Test";
  156. $skipTest = new $skipTestClass();
  157. $skipTest->message = $message;
  158. if (self::$_skipTestSuite === null) {
  159. self::$_skipTestSuite = new PHPUnit_Framework_TestSuite('Zend_Db skipped test suites');
  160. }
  161. self::$_skipTestSuite->addTest($skipTest);
  162. }
  163. }
  164. if (PHPUnit_MAIN_METHOD == 'Zend_Db_AllTests::main') {
  165. Zend_Db_AllTests::main();
  166. }