#!/usr/bin/php $token ) { if ( is_array($token) && $token[0] != T_WHITESPACE ) { $temp[] = $tokens[$k]; } if ( !is_array($token)) { $temp[] = $token; } } $tokens = $temp; $className = ''; $comments = ''; $path = '/' . str_replace (ROOT_PATH, '', $file); $atLeastOneClass = false; foreach ( $tokens as $k => $token ) { if ( is_array($token) ) { //looking for classes if ( $token[0] == T_CLASS ) { if ( $atLeastOneClass ) { fprintf ( $fp, " } \n" ); } $atLeastOneClass = true; $className = nextToken( T_STRING, $k ); print "--> $className\n"; $classFile = $folder . '/' . $entry; if ( !is_dir($outputDir . $folder)) { mkdir($outputDir . $folder, 0777, true); } $fp = fopen ( $outputDir . $folder . '/class' . $className . 'Test.php', 'w' ); fprintf ( $fp, " $functionName ( "; //search for first ( open parenthesis $openParenthesis = false; $closeParenthesis = false; while ( ! $openParenthesis ) { if (! is_array($tokens[$k]) && $tokens[$k] == '(' ) $openParenthesis = true; $k++; } while ( ! $closeParenthesis ) { if (is_array($tokens[$k]) && $tokens[$k][0] == T_VARIABLE ) { //print " " . $tokens[$k][1]; } if (! is_array($tokens[$k]) && $tokens[$k] == ')' ) { $closeParenthesis = true; //print " \n"; } $k++; } fprintf ( $fp, " /**\n" ); fprintf ( $fp, " * @covers %s::%s\n", $className, $functionName ); fprintf ( $fp, " * @todo Implement test%s().\n", $functionName ); fprintf ( $fp, " */\n" ); fprintf ( $fp, " public function test%s() \n", $functionName ); fprintf ( $fp, " { \n" ); fprintf ( $fp, " if (class_exists('%s')) {\n ", $className ); fprintf ( $fp, " \$methods = get_class_methods( '%s');\n", $className ); fprintf ( $fp, " \$this->assertTrue( in_array( '%s', \$methods ), 'seems like this function is outside this class' ); \n", $functionName ); // fprintf ( $fp, " \$x = new %s(); \n", $className ); // fprintf ( $fp, " \$this->assertTrue( is_a(\$x, '%s') ); \n", $className ); fprintf ( $fp, " } \n" ); fprintf ( $fp, " } \n\n" ); //fprintf ( $fp, "[$functionName]\n class = $className\n path = $path\n" ); //fprintf ( $fp, "\n" ); } function parsePublic ( $path, $className, $functionName, $comments ) { global $fp; $comm = explode ("\n", $comments); $gearman = false; $rest = false; $background = false; foreach ( $comm as $k => $line ) { $line = trim(str_replace('*','',$line)); if (substr($line,0, 13) == '@background =') $background = strtolower(trim(substr( $line,14 ))); if (substr($line,0, 10) == '@gearman =') $gearman = strtolower(trim(substr( $line,11 ))); if (substr($line,0, 7) == '@rest =') $rest = strtolower(trim(substr( $line,7 ))); } fprintf ( $fp, "[$functionName]\n class = $className\n path = $path\n" ); fprintf ( $fp, " gearman = " . ($gearman == 'true' ? 'true' : 'false') . "\n" ); fprintf ( $fp, " background = " . ($background== 'true' ? 'true' : 'false') . "\n" ); fprintf ( $fp, " rest = " . ($rest == 'true' ? 'true' : 'false') . "\n" ); fprintf ( $fp, "\n" ); } function nextToken( $type, $k ) { global $tokens; do { $k++; if ($tokens[$k][0] == T_FUNCTION || $tokens[$k][0] == T_CLASS ) { return ''; } } while ( $k < count($tokens) && $tokens[$k][0] != $type ); if ( isset($tokens[$k]) ) { return $tokens[$k][1]; } else { return ''; } } function previousToken( $type, $k ) { global $tokens; do { $k--; if ($tokens[$k][0] == T_FUNCTION || $tokens[$k][0] == T_CLASS ) { return ''; } } while ( $k > 0 && $tokens[$k][0] != $type ); if ( isset($tokens[$k]) ) { return $tokens[$k][1]; } else { return ''; } }