Fix for Code

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