Fix for Code

  1. <?php
  2.  
  3. class test {
  4.   function pass() {
  5.     echo "Pass\n";
  6.   }
  7.   function fail() {
  8.     echo "Fail\n";
  9.   }
  10. }
  11. function test_clearinghouse($a0 = NULL, &$a1 = NULL, &$a2 = NULL, &$a3 = NULL, &$a4 = NULL, &$a5 = NULL, &$a6 = NULL, &$a7 = NULL, &$a8 = NULL, &$a9 = NULL) {
  12.   static $state = TEST_LOAD, $test, $object;
  13.   switch ($state) {
  14.     case TEST_LOAD:
  15.       if (!isset($object)) {
  16.         $object = new test;
  17.       }
  18.       $test = $a0;
  19.       $state = TEST_START;
  20.       break;
  21.     case TEST_START:
  22.       $state = TEST_IN;
  23.       $function = 'original_'. $a0;
  24.       $num_args = func_num_args();
  25.       switch ($num_args - 1) {
  26.         case 0: $return = $function();break;
  27.         case 1: $return = $function($a1); break;
  28.         case 2: $return = $function($a1, $a2); break;
  29.         case 3: $return = $function($a1, $a2, $a3); break;
  30.         case 4: $return = $function($a1, $a2, $a3, $a4); break;
  31.         case 5: $return = $function($a1, $a2, $a3, $a4, $a5); break;
  32.         case 6: $return = $function($a1, $a2, $a3, $a4, $a5, $a6); break;
  33.         case 7: $return = $function($a1, $a2, $a3, $a4, $a5, $a6, $a7); break;
  34.         case 8: $return = $function($a1, $a2, $a3, $a4, $a5, $a6, $a7, $a8); break;
  35.         case 9: $return = $function($a1, $a2, $a3, $a4, $a5, $a6, $a7, $a8, $a9); break;
  36.       }
  37.       $final_return = $test['final_return'];
  38.       unset($test['final_return']);
  39.       if (!$test && $return === $final_return) {
  40.         $object->pass();
  41.       }
  42.       else {
  43.         $object->fail();
  44.       }
  45.       $state = TEST_LOAD;
  46.       break;
  47.     case TEST_IN:
  48.       $step = array_shift($test);
  49.       $incoming = $step['incoming'];
  50.       $num_args = func_num_args();
  51.       for ($i = 0; $i < $num_args; $i++) {
  52.         $variable_name = "a$i";
  53.         if ($incoming[$i] !== $$variable_name) {
  54.           $object->fail();
  55.         }
  56.       }
  57.       if (isset($step['references'])) {
  58.         foreach ($step['references'] as $key => $value) {
  59.           $variable_name = "$a$key";
  60.           $$variable_name = $value;
  61.         }
  62.       }
  63.       if (isset($step['return'])) {
  64.         return $step['return'];
  65.       }
  66.   }
  67. }
  68.  
  69. function db_query($query) {
  70.   return test_clearinghouse('db_query', $query);
  71. }
  72.  
  73. function cache_get($cid, $table = 'cache') {
  74.   return test_clearinghouse('cache_get', $cid, $table);
  75. }
  76.  
  77. function cache_set($cid, $data, $table = 'cache', $expire = CACHE_PERMANENT, $headers = NULL) {
  78.   return test_clearinghouse('cache_set', $cid, $data, $table, $expire, $headers);
  79. }
  80.  
  81. function db_fetch_object($result) {
  82.   return test_clearinghouse('db_fetch_object', $result);
  83. }
  84.  
  85. require_once './drupal_original/includes/bootstrap.inc';
  86.  
  87. test_clearinghouse(
  88.   array(
  89.     array(
  90.       'incoming' => array('cache_get', 'variables', 'cache'),
  91.       'return' => FALSE,
  92.     ),
  93.     array(
  94.       'incoming' => array('db_query', 'SELECT * FROM {variable}'),
  95.       'return' => '__test_placeholder__',
  96.     ),
  97.     /*
  98.     array(
  99.       'incoming' => array('db_fetch_object', '__test_placeholder__'),
  100.       'return' => (object) array('name '=> 'foo', 'value' => serialize('bar')),
  101.     ),
  102.     */
  103.     array(
  104.       'incoming' => array('db_fetch_object', '__test_placeholder__'),
  105.       'return' => FALSE,
  106.     ),
  107.     array(
  108.       'incoming' => array('cache_set', 'variables', NULL, 'cache', CACHE_PERMANENT, NULL),
  109.     )
  110.   )
  111. );
  112. test_clearinghouse('variable_init');