Annotation of embedaddon/php/scripts/dev/generate-phpt.phar, revision 1.1.1.1

1.1       misho       1: <?php
                      2: Phar::mapPhar('generate-phpt.phar');
                      3: require 'phar://generate-phpt.phar/generate-phpt.php';
                      4: __HALT_COMPILER(); ?>
                      5: 
                      6: 
:&generate-phpt.php5J5;&gtFunction.phpJeGh&
                      7: gtText.php&J&Y&gtClassMap.php       J B&texts/unknownMethod.txtlJl2_&texts/unknownClass.txtiJiop&texts/testTypeNotSpecified.txt2J2?&texts/help.txt?J?o&texts/methodNotSpecified.txtcJc&*l&&texts/functionOrMethodNotSpecified.txt8J8&texts/unknownFunction.txtrJrș&gtCodeSnippet.phpqJq>1&gtAutoload.php7J7˶&setup/gtCommandLineOptions.php)J){&)setup/preconditions/gtIsValidFunction.php&J&t&-setup/preconditions/gtIsSpecifiedTestType.phpp&Jp&?Sܶ&*setup/preconditions/gtIfClassHasMethod.php&J&5
                      8:        &5setup/preconditions/gtIsSpecifiedFunctionOrMethod.php&J&
m&'setup/preconditions/gtIsValidMethod.php2J2&&setup/preconditions/gtIsValidClass.php&J&ۧq&setup/gtPreConditionList.phprJrI&setup/gtOptionalSections.phpJa?ж&/setup/exceptions/gtMissingArgumentException.phpOJO´k&.setup/exceptions/gtUnknownSectionException.phpJJJ&-setup/exceptions/gtUnknownOptionException.phpMJMy˶&.setup/exceptions/gtMissingOptionsException.phpLJL9o&setup/gtPreCondition.phpJAy&gtTestCaseWriter.php&J&ËhS&gtMethod.phpJg&codeSnippets/commentEnd.txtJU&codeSnippets/skipifwin.txtWJW?&codeSnippets/commentStart.txtJn@&codeSnippets/float.txtJC0&codeSnippets/string.txtJ1&codeSnippets/loopStart.txt&J&ʕ&codeSnippets/skipifnotwin.txtXJX5Yn&codeSnippets/array.txt&J&GJ&codeSnippets/loopClose.txt&J&&codeSnippets/boolean.txtJ?&codeSnippets/skipifnot64b.txtJJJpŶ&codeSnippets/skipif64btxtJJJ|"˶&$codeSnippets/emptyUnsetUndefNull.txtJ!&codeSnippets/object.txtYJY|&codeSnippets/int.txtzJzB&gtTestSubject.phpJPe&'testcase/gtVariationContainerMethod.php3J3x&"testcase/gtBasicTestCaseMethod.phpJO&testcase/gtErrorTestCase.phpJ&testcase/gtTestCase.phpJ"@&$testcase/gtBasicTestCaseFunction.phpHJHx%&$testcase/gtErrorTestCaseFunction.phpJ1&&(testcase/gtVariationTestCaseFunction.phpJ5_&)testcase/gtVariationContainerFunction.php;J;a&"testcase/gtErrorTestCaseMethod.phpJ"&testcase/gtBasicTestCase.phpuJuUK%&!testcase/gtVariationContainer.phpJ(=;& testcase/gtVariationTestCase.phpJC&&testcase/gtVariationTestCaseMethod.php&J&j\&<?php
                      9: /**
                     10:  * Main code for test case generation
                     11:  */
                     12: 
                     13: require_once dirname(__FILE__) . '/gtAutoload.php';
                     14: 
                     15: //Version check. Will not run on less than PHP53;
                     16: 
                     17: list($major, $minor, $bug) = explode(".", phpversion(), 3);
                     18:  if($major == 5) {
                     19:        if($minor < 3) { die("Sorry, you need PHP version 5.3 or greater to run this.\n"); }
                     20:    }
                     21:    if ($major < 5) { die ("Seriously, you need to upgrade you PHP level\n"); }
                     22: 
                     23: 
                     24: $options = new gtCommandLineOptions();
                     25: $optionalSections = new gtOptionalSections();
                     26: 
                     27: try{
                     28:   $options->parse($argv);
                     29: } catch (exception $e) {
                     30:   echo $e->getMessage()."\n";
                     31:   die();
                     32: }
                     33: 
                     34: if($options->hasOption('h')) {
                     35:   die(gtText::get('help'));
                     36: }
                     37: 
                     38: try {
                     39:   $preConditions = new gtPreConditionList();
                     40:   $preConditions->check($options);
                     41: } catch (exception $e) {
                     42:   echo $e->getMessage()."\n";
                     43:   die();
                     44: }
                     45: 
                     46: if($options->hasOption('s')) {
                     47:   $optionalSections->setOptions($options);
                     48: }
                     49:   
                     50: 
                     51: 
                     52: if($options->hasOption('c')) {
                     53:   $name = $options->getOption('c')."_".$options->getOption('m');
                     54:   $method = new gtMethod($options->getOption('c'), $options->getOption('m'));
                     55:   
                     56:   $method->setArgumentNames();
                     57:   $method->setArgumentLists();
                     58:   $method->setInitialisationStatements();
                     59:   
                     60:   $method->setConstructorArgumentNames();
                     61:   $method->setConstructorInitStatements();
                     62:   $method->setConstructorArgumentList();
                     63: }
                     64: 
                     65: if($options->hasOption('f')) {
                     66:   $name = $options->getOption('f');
                     67:   $function = new gtFunction($name);
                     68:   $function->setArgumentNames();
                     69:   $function->setArgumentLists();
                     70:   $function->setInitialisationStatements();
                     71: }
                     72: 
                     73: 
                     74: if($options->hasOption('b')) {
                     75:   if($options->hasOption('c')) {
                     76:     $testCase = gtBasicTestCase::getInstance($optionalSections, 'method');
                     77:     $testCase->setMethod($method);
                     78:   } else {
                     79:     $testCase = gtBasicTestCase::getInstance($optionalSections);
                     80:     $testCase->setFunction($function);
                     81:   }
                     82: 
                     83:   $testCase->constructTestCase();
                     84:   gtTestCaseWriter::write($name, $testCase->toString(), 'b');
                     85: }
                     86: 
                     87: if($options->hasOption('e')) {
                     88:   if($options->hasOption('c')) {
                     89:     $testCase = gtErrorTestCase::getInstance($optionalSections, 'method');
                     90:     $testCase->setMethod($method);
                     91:   } else {
                     92:     $testCase = gtErrorTestCase::getInstance($optionalSections);
                     93:     $testCase->setFunction($function);
                     94:   }
                     95: 
                     96:   $testCase->constructTestCase();
                     97:   gtTestCaseWriter::write($name, $testCase->toString(), 'e');
                     98: }
                     99: 
                    100: 
                    101: 
                    102: if($options->hasOption('v')) {
                    103:   if($options->hasOption('c')) {
                    104:     $testCaseContainer = gtVariationContainer::getInstance($optionalSections, 'method');
                    105:     $testCaseContainer->setMethod($method);
                    106:   } else {
                    107:     $testCaseContainer = gtVariationContainer::getInstance ($optionalSections);
                    108:     $testCaseContainer->setFunction($function);
                    109:   }
                    110: 
                    111:   $testCaseContainer->constructAll();
                    112: 
                    113:   $tests = $testCaseContainer->getVariationTests();
                    114: 
                    115:   $count = 1;
                    116:   foreach($tests as $test) {
                    117:     gtTestCaseWriter::write($name, $test, 'v', $count);
                    118:     $count++;
                    119:   }
                    120: 
                    121: }
                    122: ?>
                    123: <?php
                    124: 
                    125: /**
                    126:  * Class reperesents a single PHP function.
                    127:  *
                    128:  */
                    129: class gtFunction extends gtTestSubject {
                    130: 
                    131:   private $functionName;
                    132:   
                    133:   /**
                    134:    * Set the name of the name of the function
                    135:    *
                    136:    * @param string $functionName
                    137:    */
                    138:   public function __construct($functionName)  {
                    139:     $this->functionName = $functionName;
                    140:   }
                    141: 
                    142: 
                    143:   /**
                    144:    * Get the names of function argments and initialise mandatory and optional argument arrays
                    145:    *
                    146:    */
                    147:   public function setArgumentNames() {
                    148:     $function= new ReflectionFunction($this->functionName);
                    149: 
                    150:     foreach ($function->getParameters() as $i => $param) {
                    151:       if($param->isOptional()) {
                    152:         $this->optionalArgumentNames[] = $param->getName();
                    153:       } else {
                    154:         $this->mandatoryArgumentNames[] = $param->getName();
                    155:       }
                    156:     }
                    157:   }
                    158: 
                    159: 
                    160:   /**
                    161:    * Return the name of the function
                    162:    *
                    163:    * @return string
                    164:    */
                    165:   public function getName() {
                    166:     return $this->functionName;
                    167:   }
                    168: 
                    169: }
                    170: ?><?php
                    171: 
                    172: /**
                    173:  * Get a text message
                    174:  *
                    175:  */
                    176: class gtText
                    177: {
                    178: 
                    179:   /**
                    180:    * Get the text message and return it
                    181:    *
                    182:    * @param string $name
                    183:    * @return string
                    184:    */
                    185:   public static function get($name) {
                    186:     $filename = dirname(__FILE__) . '/texts/' . $name . '.txt';
                    187: 
                    188:     if (!file_exists($filename)) {
                    189:       throw new LogicException('The text ' . $name . ' does not exist');
                    190:     }
                    191: 
                    192:     return file_get_contents($filename);
                    193:   }
                    194: }
                    195: 
                    196: ?><?php
                    197: 
                    198:  $gtClassMap = array(
                    199:  
                    200:     'gtCodeSnippet'                 => 'gtCodeSnippet.php',
                    201:     'gtTestSubject'                 => 'gtTestSubject.php',
                    202:     'gtFunction'                    => 'gtFunction.php',
                    203:     'gtMethod'                      => 'gtMethod.php',
                    204:     'gtTestCaseWriter'              => 'gtTestCaseWriter.php',
                    205:     'gtText'                        => 'gtText.php',
                    206:  
                    207:  
                    208:  
                    209:     'gtCommandLineOptions'          => 'setup/gtCommandLineOptions.php',
                    210:     'gtOptionalSections'            => 'setup/gtOptionalSections.php',
                    211:     'gtMissingArgumentException'    => 'setup/exceptions/gtMissingArgumentException.php',
                    212:     'gtUnknownOptionException'      => 'setup/exceptions/gtUnknownOptionException.php',
                    213:     'gtUnknownSectionException'      => 'setup/exceptions/gtUnknownSectionException.php',
                    214:     'gtMissingOptionsException'     => 'setup/exceptions/gtMissingOptionsException.php',
                    215:  
                    216:     'gtPreCondition'                => 'setup/gtPreCondition.php',
                    217:     'gtPreConditionList'            => 'setup/gtPreConditionList.php',
                    218:     'gtIsSpecifiedTestType'         => 'setup/preconditions/gtIsSpecifiedTestType.php',
                    219:     'gtIfClassHasMethod'            => 'setup/preconditions/gtIfClassHasMethod.php',
                    220:     'gtIsSpecifiedFunctionOrMethod' => 'setup/preconditions/gtIsSpecifiedFunctionOrMethod.php',
                    221:     'gtIsValidClass'                => 'setup/preconditions/gtIsValidClass.php',
                    222:     'gtIsValidMethod'               => 'setup/preconditions/gtIsValidMethod.php',
                    223:     'gtIsValidFunction'             => 'setup/preconditions/gtIsValidFunction.php',
                    224:  
                    225:  
                    226:      'gtTestCase'                   => 'testcase/gtTestCase.php',
                    227:      'gtVariationTestCase'          => 'testcase/gtVariationTestCase.php',
                    228:      'gtVariationTestCaseFunction'  => 'testcase/gtVariationTestCaseFunction.php',
                    229:      'gtVariationTestCaseMethod'    => 'testcase/gtVariationTestCaseMethod.php',
                    230:  
                    231:      'gtBasicTestCase'              => 'testcase/gtBasicTestCase.php',
                    232:      'gtBasicTestCaseFunction'      => 'testcase/gtBasicTestCaseFunction.php',
                    233:      'gtBasicTestCaseMethod'        => 'testcase/gtBasicTestCaseMethod.php',
                    234:  
                    235:      'gtErrorTestCase'              => 'testcase/gtErrorTestCase.php',
                    236:      'gtErrorTestCaseFunction'      => 'testcase/gtErrorTestCaseFunction.php',
                    237:      'gtErrorTestCaseMethod'        => 'testcase/gtErrorTestCaseMethod.php',
                    238:  
                    239:      'gtVariationContainer'         => 'testcase/gtVariationContainer.php',
                    240:      'gtVariationContainerMethod'   => 'testcase/gtVariationContainerMethod.php',
                    241:      'gtVariationContainerFunction' => 'testcase/gtVariationContainerFunction.php',
                    242:  );
                    243: ?>
                    244: The method name is not a valid PHP method name.
                    245: Check that the extension containing the method is loaded.
                    246: 
                    247: 
                    248: The class name is not a valid PHP class name.
                    249: Check that the extension containing the class is loaded.
                    250: 
                    251: 
                    252: Please specify basic, error or variation tests.
                    253: 
                    254: Usage:
                    255: php generate-phpt.php  -f <function_name> |-c <class_name> -m <method_name> -b|e|v [-s skipif:ini:clean:done] [-k win|notwin|64b|not64b] [-x ext]
                    256: 
                    257: Where:
                    258: -f function_name ................. Name of PHP function, eg cos
                    259: -c class name .....................Name of class, eg DOMDocument
                    260: -m method name ....................Name of method, eg createAttribute
                    261: -b ............................... Generate basic tests
                    262: -e ............................... Generate error tests
                    263: -v ............................... Generate variation tests
                    264: -s sections....................... Create optional sections, colon separated list
                    265: -k skipif key..................... Skipif option, only used if -s skipif is used.
                    266: -x extension.......................Skipif option, specify extension to check for
                    267: -h ............................... Print this message
                    268: 
                    269: You have given a class name but not supplied a method name to test.
                    270: The method name is required.
                    271: 
                    272: 
                    273: Please supply a function or method name to be tested.
                    274: 
                    275: 
                    276: The function name is not a valid PHP function name.
                    277: Check that the extension containing the function is loaded.
                    278: 
                    279: <?php
                    280: 
                    281: /**
                    282:  * Retrieves code snippets for adding to test cases
                    283:  * 
                    284:  */
                    285: class gtCodeSnippet
                    286: {
                    287: 
                    288:   /**
                    289:    * get the code snippet and initialise an array with it
                    290:    *
                    291:    * @param string $name
                    292:    * @return array
                    293:    */
                    294:   public static function get($name) {
                    295:     
                    296:     $filename = dirname(__FILE__) . '/codeSnippets/' . $name . '.txt';
                    297: 
                    298:     if (!file_exists($filename)) {
                    299:       throw new LogicException('The code snippet ' . $name . ' does not exist');
                    300:     }
                    301:     
                    302:     $lines = file($filename);
                    303:     foreach($lines as $l) {
                    304:       $array[] = rtrim($l);
                    305:     }
                    306:     return $array;
                    307:   }
                    308:   
                    309:   
                    310:   /**
                    311:    * Append the code snippet on to an existing array
                    312:    *
                    313:    * @param string $name
                    314:    * @param array $array
                    315:    * @return array
                    316:    */
                    317:   public static function append($name, $array) {
                    318:     $filename = dirname(__FILE__) . '/codeSnippets/' . $name . '.txt';
                    319: 
                    320:     if (!file_exists($filename)) {
                    321:       throw new LogicException('The code snippet ' . $name . ' does not exist');
                    322:     }
                    323: 
                    324:     $text =  file($filename);
                    325:     foreach ($text as $t) {
                    326:       $array[] = rtrim($t);
                    327:     }
                    328:     
                    329:     return $array;
                    330:   }
                    331:   
                    332:   
                    333:   /**
                    334:    * Appends blank entries on to an array
                    335:    *
                    336:    * @param int $numberOfLines
                    337:    * @param array $array
                    338:    * @return array
                    339:    */
                    340:   public static function appendBlankLines($numberOfLines, $array) {
                    341: 
                    342:     for ($i=0; $i< $numberOfLines; $i++) {
                    343:       $array[] = "";
                    344:     }
                    345:     
                    346:     return $array;
                    347:   }
                    348:   
                    349: }
                    350: ?><?php
                    351: 
                    352: 
                    353: gtAutoload::init();
                    354: 
                    355: /**
                    356:  * Autoloader using a map file (gtClassMap.php)
                    357:  * defining the file to load each class from.
                    358:  */
                    359: class gtAutoload
                    360: {
                    361:   /**
                    362:    * @var array
                    363:    */
                    364:   protected static $classMap;
                    365: 
                    366:   /**
                    367:    * @var string
                    368:    */
                    369:   protected static $classPath;
                    370: 
                    371: 
                    372:   /**
                    373:    * Initialize the autoloader
                    374:    *
                    375:    * @return null
                    376:    */
                    377:   public static function init()
                    378:   {
                    379:     self::$classPath = dirname(__FILE__);
                    380: 
                    381:     if (substr(self::$classPath, -1) != '/') {
                    382:       self::$classPath .= '/';
                    383:     }
                    384: 
                    385:     if (file_exists(self::$classPath . 'gtClassMap.php')) {
                    386:       include self::$classPath . 'gtClassMap.php';
                    387:       self::$classMap = $gtClassMap;
                    388:     }
                    389: 
                    390:     if (function_exists('__autoload')) {
                    391:       spl_autoload_register('__autoload');
                    392:     }
                    393: 
                    394:     spl_autoload_register(array('gtAutoload', 'autoload'));
                    395:   }
                    396: 
                    397: 
                    398:   /**
                    399:    * Autoload method
                    400:    *
                    401:    * @param string $class Class name to autoload
                    402:    * @return null
                    403:    */
                    404:   public static function autoload($class)
                    405:   {
                    406:     if (isset(self::$classMap[$class])) {
                    407:       include self::$classPath . self::$classMap[$class];
                    408:     }
                    409:   }
                    410: }
                    411: 
                    412: ?><?php
                    413: 
                    414: /**
                    415:  * Parse command line options
                    416:  *
                    417:  */
                    418: class gtCommandLineOptions {
                    419: 
                    420:   protected $shortOptions = array(
                    421:     'b',
                    422:     'e',
                    423:     'v',
                    424:     'h',
                    425:   );
                    426: 
                    427:   protected $shortOptionsWithArgs = array(
                    428:     'c',
                    429:     'm',
                    430:     'f',
                    431:     'i',
                    432:     's',
                    433:     'x',
                    434:     'k',
                    435:   );
                    436:   
                    437:   protected $options;
                    438: 
                    439:   protected function isShortOption($arg)
                    440:   {
                    441:     return (substr($arg, 0, 1) == '-') && (substr($arg, 1, 1) != '-');
                    442:   }
                    443: 
                    444:   public function isValidOptionArg($array, $index) {
                    445:     if (!isset($array[$index]))
                    446:     {
                    447:       return false;
                    448:     }
                    449:     return substr($array[$index], 0, 1) != '-';
                    450:   }
                    451: 
                    452: 
                    453:   public function parse($argv)
                    454:   {
                    455:     if(count($argv) < 2) {
                    456:       throw new gtMissingOptionsException('Command line options are required');
                    457:     }
                    458:     
                    459:     for ($i=1; $i<count($argv); $i++) {
                    460: 
                    461:       if ($this->isShortOption($argv[$i])) {
                    462:         $option = substr($argv[$i], 1);
                    463:       } else {
                    464:         throw new gtUnknownOptionException('Unrecognised command line option ' . $argv[$i]);
                    465:       }
                    466: 
                    467:       if (!in_array($option, array_merge($this->shortOptions, $this->shortOptionsWithArgs)))
                    468:       {
                    469:         throw new gtUnknownOptionException('Unknown option ' . $argv[$i]);
                    470:       }
                    471: 
                    472:       if (in_array($option, $this->shortOptions)) {
                    473:         $this->options[$option] = true;
                    474:         continue;
                    475:       }
                    476: 
                    477:       if (!$this->isValidOptionArg($argv, $i + 1))
                    478:       {
                    479:         throw new gtMissingArgumentException('Missing argument for command line option ' . $argv[$i]);
                    480:       }
                    481: 
                    482:       $i++;
                    483:       $this->options[$option] = $argv[$i];
                    484:     }
                    485:   }
                    486:   
                    487:  /**
                    488:    *
                    489:    */
                    490:   public function getOption($option)
                    491:   {
                    492:     if (!isset($this->options[$option])) {
                    493:       return false;
                    494:     }
                    495:     return $this->options[$option];
                    496:   }
                    497: 
                    498: 
                    499:   /**
                    500:    * Check whether an option exists
                    501:    */
                    502:   public function hasOption($option)
                    503:   {
                    504:     return isset($this->options[$option]);
                    505:   }
                    506: 
                    507: 
                    508: }
                    509: ?><?php
                    510: 
                    511: /**
                    512:  * Check that the function name is valid
                    513:  *
                    514:  */
                    515: class gtIsValidFunction extends gtPreCondition {
                    516: 
                    517:   public function check( $clo) {
                    518:     if($clo->hasOption('f') ) {
                    519:       $function = $clo->getOption('f');
                    520:       $functions = get_defined_functions();
                    521:       if( in_array( $function, $functions['internal'] ) ) {
                    522:         return true;
                    523:       }
                    524:       return false;
                    525:     }
                    526:     return true;
                    527:   }
                    528: 
                    529:   public function getMessage() {
                    530:     return gtText::get('unknownFunction');
                    531:   }
                    532: }
                    533: ?><?php
                    534: 
                    535: /**
                    536:  * Check that b|c|v is specified
                    537:  *
                    538:  */
                    539: class gtIsSpecifiedTestType extends gtPreCondition {
                    540:   
                    541:   public function check( $clo) {
                    542:     if($clo->hasOption('b') || $clo->hasOption('e') || $clo->hasOption('v') ) {
                    543:     
                    544:         return true;
                    545:       }
                    546:     return false;
                    547:   }
                    548:   
                    549:   public function getMessage() {
                    550:     return gtText::get('testTypeNotSpecified');
                    551:   }
                    552: }
                    553: ?><?php
                    554: 
                    555: /**
                    556:  * If use has requested a class check that method is specified
                    557:  *
                    558:  */
                    559: class gtIfClassHasMethod extends gtPreCondition {
                    560:   
                    561:   public function check( $clo) {
                    562:     if($clo->hasOption('c')) {
                    563:       if(!$clo->hasOption('m')) {
                    564:         return false;
                    565:       }
                    566:       return  true;
                    567:     }
                    568:     return true;
                    569:   }
                    570:   
                    571:   public function getMessage() {
                    572:     return gtText::get('methodNotSpecified');
                    573:   }
                    574: 
                    575: }
                    576: ?><?php
                    577: 
                    578: /**
                    579:  * Check that either a method or a function is specified
                    580:  *
                    581:  */
                    582: class gtIsSpecifiedFunctionOrMethod extends gtPreCondition {
                    583:   
                    584:   public function check( $clo) {
                    585:     if($clo->hasOption('f') || $clo->hasOption('m')) {
                    586:     
                    587:         return true;
                    588:       }
                    589:     return false;
                    590:   }
                    591:   
                    592:   public function getMessage() {
                    593:     return gtText::get('functionOrMethodNotSpecified');
                    594:   }
                    595: }
                    596: ?><?php
                    597: 
                    598: /**
                    599:  * Check that teh method name is valid
                    600:  *
                    601:  */
                    602: class gtIsValidMethod extends gtPreCondition {
                    603: 
                    604:  public function check( $clo) {
                    605:     if($clo->hasOption('m') ) {
                    606:       $className = $clo->getOption('c');
                    607:       $class = new ReflectionClass($className);
                    608:       $methods = $class->getMethods();
                    609:       foreach($methods as $method) {
                    610:         if($clo->getOption('m') == $method->getName()) {
                    611:           return true;
                    612:         }
                    613:       }
                    614:       return false;
                    615:     }
                    616:     return true;
                    617:   }
                    618: 
                    619:   public function getMessage() {
                    620:     return gtText::get('unknownMethod');
                    621:   }
                    622: }
                    623: ?><?php
                    624: 
                    625: /**
                    626:  * Check that the class name is valid
                    627:  *
                    628:  */
                    629: class gtIsValidClass extends gtPreCondition {
                    630: 
                    631:   public function check( $clo) {
                    632:     if($clo->hasOption('c') ) {
                    633:       $className = $clo->getOption('c');
                    634:       if( in_array( $className, get_declared_classes() ) ) {
                    635:         return true;
                    636:       }
                    637:       return false;
                    638:     }
                    639:     return true;
                    640:   }
                    641: 
                    642:   public function getMessage() {
                    643:     return gtText::get('unknownClass');
                    644:   }
                    645: }
                    646: ?><?php
                    647: 
                    648: /**
                    649:  * List of preconditions.
                    650:  *
                    651:  */
                    652: class gtPreConditionList {
                    653:   
                    654:   private $preConditions = array(
                    655:       'gtIsSpecifiedTestType',
                    656:       'gtIsSpecifiedFunctionOrMethod',  
                    657:       'gtIfClassHasMethod',
                    658:       'gtIsValidClass',
                    659:       'gtIsValidFunction',
                    660:       'gtIsValidMethod',
                    661:   );
                    662: 
                    663: 
                    664:   /**
                    665:    * Create an instance of each pre-condition and run their check methods
                    666:    *
                    667:    */
                    668:   public function check($clo) {
                    669:     foreach ($this->preConditions as $preCon) {
                    670:       $checkThis = new $preCon;
                    671:       if(!$checkThis->check($clo)) {
                    672:         echo $checkThis->getMessage();
                    673:         die(gtText::get('help'));
                    674:       }
                    675:     }
                    676:   }
                    677: }
                    678: ?><?php
                    679: class gtOptionalSections {
                    680: 
                    681:   private $optSections = array(
                    682:     'skipif' => false,
                    683:     'ini'    => false,
                    684:     'clean'  => false,
                    685:     'done'   => false,
                    686:   );
                    687: 
                    688:   private $skipifKey = '';
                    689:   private $skipifExt = '';
                    690: 
                    691: 
                    692:   public function setOptions($commandLineOptions) {
                    693:     if($commandLineOptions->hasOption('s')) {
                    694:       $options = explode(':', $commandLineOptions->getOption('s'));
                    695: 
                    696:       foreach($options as $option) {
                    697: 
                    698:         if(array_key_exists($option, $this->optSections )) {
                    699:           $this->optSections[$option] = true;
                    700:         } else {
                    701:           throw new gtUnknownSectionException('Unrecognised optional section');
                    702:         }
                    703:       }
                    704: 
                    705:       if($commandLineOptions->hasOption('k')) {
                    706:         $this->skipifKey = $commandLineOptions->getOption('k');
                    707:       }
                    708:       
                    709:       if($commandLineOptions->hasOption('x')) {
                    710:         $this->skipifExt = $commandLineOptions->getOption('x');
                    711:       }
                    712:       
                    713:     }
                    714:   }
                    715: 
                    716: 
                    717: 
                    718:   public function getOptions() {
                    719:     return $this->optSections;
                    720:   }
                    721: 
                    722: 
                    723:   public function getSkipifKey() {
                    724:     return $this->skipifKey;
                    725:   }
                    726:   
                    727:   public function getSkipifExt() {
                    728:     return $this->skipifExt;
                    729:   }
                    730: 
                    731:   public function hasSkipif() {
                    732:     return $this->optSections['skipif'];
                    733:   }
                    734: 
                    735:   public function hasSkipifKey() {
                    736:     if($this->skipifKey != '') {
                    737:       return true;
                    738:     }
                    739:     return false;
                    740:   }
                    741:   
                    742:   public function hasSkipifExt() {
                    743:     if($this->skipifExt != '') {
                    744:       return true;
                    745:     }
                    746:     return false;
                    747:   }
                    748:   public function hasIni() {
                    749:     return $this->optSections['ini'];
                    750:   }
                    751: 
                    752:   public function hasClean() {
                    753:     return $this->optSections['clean'];
                    754:   }
                    755:   
                    756:   public function hasDone() {
                    757:     return $this->optSections['done'];
                    758:   }
                    759: 
                    760: 
                    761: }
                    762: ?><?php
                    763: 
                    764:   class gtMissingArgumentException extends RuntimeException
                    765:   {
                    766:   }
                    767: 
                    768: ?>
                    769: <?php
                    770: 
                    771: class gtUnknownSectionException extends RuntimeException
                    772:   {
                    773:   }
                    774: ?><?php
                    775: 
                    776:   class gtUnknownOptionException extends RuntimeException
                    777:   {
                    778:   }
                    779: 
                    780: ?>
                    781: <?php
                    782: 
                    783:  class gtMissingOptionsException extends RuntimeException
                    784:   {
                    785:   }
                    786: 
                    787: ?><?php
                    788: 
                    789: /**
                    790:  * parent class for preconditions
                    791:  *
                    792:  */
                    793: abstract class gtPreCondition {
                    794:   
                    795:   abstract public function check($clo); 
                    796:   
                    797:   abstract public function getMessage(); 
                    798:   
                    799: }
                    800: ?><?php
                    801: 
                    802: /**
                    803:  * Writes a single test case to a file
                    804:  *
                    805:  */
                    806: class gtTestCaseWriter {
                    807:   
                    808:   public static function write($name, $string, $type, $count = 0) {
                    809:     if ($type  == 'b') {
                    810:     $fileName = $name."_basic.phpt";
                    811:     }
                    812:     
                    813:     if ($type  == 'e') {
                    814:      $fileName = $name."_error.phpt";
                    815:     }
                    816:     
                    817:     if ($type  == 'v') {
                    818:       $fileName = $name."_variation".$count.".phpt";
                    819:     }
                    820:     
                    821:     $fh = fopen($fileName, 'w');
                    822:     fwrite ($fh, $string);
                    823:     fclose($fh);
                    824:   }
                    825: }
                    826: ?><?php
                    827: 
                    828: /**
                    829:  * Class for method under test (see gtFunction for non-OO tests)
                    830:  */
                    831: class gtMethod  extends gtTestSubject {
                    832: 
                    833:   private $className;
                    834:   private $methodName;
                    835:   private $constructorArgumentNames;
                    836:   private $constructorArgumentList = '';
                    837:   private $constructorInitialisationStatements;
                    838: 
                    839: 
                    840: 
                    841:   /**
                    842:    * Construct gtMethod object from the class and method names
                    843:    *
                    844:    * @param string $className
                    845:    * @param string $methodName
                    846:    */
                    847:   public function __construct($className, $methodName) {
                    848:     $this->className = $className;
                    849:     $this->methodName = $methodName;
                    850:   }
                    851: 
                    852: 
                    853:   /**
                    854:    * Set the names of the class constructor arguments. Take only mandatory argument names.
                    855:    *
                    856:    */
                    857:   public function setConstructorArgumentNames() {
                    858:     $reflectionClass = new ReflectionClass($this->className);
                    859:     $constructor = $reflectionClass->getConstructor();
                    860:     foreach($constructor->getParameters() as $i => $param) {
                    861:       //if(!$param->isOptional()) {
                    862:         $this->constructorArgumentNames[] = $param->getName();
                    863:       //}
                    864:     }
                    865:   }
                    866: 
                    867:   
                    868:   /**
                    869:    * Set the names of the mandatory and optional arguments to the method
                    870:    *
                    871:    */
                    872:   public function setArgumentNames() {
                    873: 
                    874:     $methodClass  = new reflectionMethod($this->className, $this->methodName);
                    875:     $parameters = $methodClass->getParameters();
                    876: 
                    877:     foreach ($methodClass->getParameters() as $i => $param) {
                    878:       if($param->isOptional()) {
                    879:         $this->optionalArgumentNames[] = $param->getName();
                    880:       } else {
                    881:         $this->mandatoryArgumentNames[] = $param->getName();
                    882:       }
                    883: 
                    884:     }
                    885:   }
                    886: 
                    887: 
                    888:   /**
                    889:    * Return the list of constructor argument names
                    890:    *
                    891:    * @return array
                    892:    */
                    893:   public function getConstructorArgumentNames() {
                    894:     return $this->constructorArgumentNames;
                    895:   }
                    896: 
                    897:   /**
                    898:    * Return the name of the method
                    899:    *
                    900:    * @return string
                    901:    */
                    902:   public function getName() {
                    903:     return $this->methodName;
                    904:   }
                    905: 
                    906: 
                    907:   /**
                    908:    * Return the name of the class
                    909:    *
                    910:    * @return string
                    911:    */
                    912:   public function getClassName() {
                    913:     return $this->className;
                    914:   }
                    915:   
                    916:   /**
                    917:    * Set the list of arguments to be passed to the constructor
                    918:    *
                    919:    */
                    920:   public function setConstructorArgumentList() {
                    921:     if(count ($this->constructorArgumentNames) > 0) {
                    922:       
                    923:       for( $i = 0; $i < count( $this->constructorArgumentNames ); $i++) {
                    924:         $this->constructorArgumentList .= "\$".$this->constructorArgumentNames[$i].", ";
                    925:       }
                    926:       $this->constructorArgumentList = substr($this->constructorArgumentList, 0, -2);
                    927:     }
                    928:   }
                    929: 
                    930: 
                    931:   /**
                    932:    * Return the list of the arguments to be passed to the constructor
                    933:    *
                    934:    * @return string
                    935:    */
                    936:   public function getConstructorArgumentList() {
                    937:     return $this->constructorArgumentList;
                    938:   }
                    939: 
                    940:   
                    941:   /**
                    942:    * Set up the source statements that initialise constructor arguments;
                    943:    *
                    944:    */
                    945:   public function setConstructorInitStatements() {
                    946:     if(count ($this->constructorArgumentNames) > 0) {
                    947:       foreach( $this->constructorArgumentNames as $name) {
                    948:         $this->constructorInitialisationStatements[] = "\$".$name." = ";
                    949:       }
                    950:     }
                    951: 
                    952:   }
                    953: 
                    954:   
                    955:   /**
                    956:    * Return the constructor initialisation statements
                    957:    *
                    958:    * @return array
                    959:    */
                    960:   public function getConstructorInitStatements() {
                    961:     return $this->constructorInitialisationStatements;
                    962:   }
                    963: }
                    964: ?> *
                    965:  */if (substr(PHP_OS, 0, 3) == 'WIN') die("skip this test is not for Windows platforms");
                    966: /**
                    967:  *$variation_array = array(
                    968:   'float 10.5' => 10.5,
                    969:   'float -10.5' => -10.5,
                    970:   'float 12.3456789000e10' => 12.3456789000e10,
                    971:   'float -12.3456789000e10' => -12.3456789000e10,
                    972:   'float .5' => .5,
                    973:   );$heredoc = <<<EOT
                    974: hello world
                    975: EOT;
                    976: 
                    977: $variation_array = array(
                    978:   'string DQ' => "string",
                    979:   'string SQ' => 'string',
                    980:   'mixed case string' => "sTrInG",
                    981:   'heredoc' => $heredoc,
                    982:   );foreach ( $variation_array as $var ) {if (substr(PHP_OS, 0, 3) != 'WIN') die("skip this test is for Windows platforms only");
                    983: $index_array = array(1, 2, 3);
                    984: $assoc_array = array(1 => 'one', 2 => 'two');
                    985: 
                    986: $variation_array = array(
                    987:   'empty array' => array(),
                    988:   'int indexed array' => $index_array,
                    989:   'associative array' => $assoc_array,
                    990:   'nested arrays' => array('foo', $index_array, $assoc_array),
                    991:   );}$variation_array = array(
                    992:   'lowercase true' => true,
                    993:   'lowercase false' =>false,
                    994:   'uppercase TRUE' =>TRUE,
                    995:   'uppercase FALSE' =>FALSE,
                    996:   );if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platforms only");
                    997: if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platforms only");
                    998: $unset_var = 10;
                    999: unset($unset_var);
                   1000: 
                   1001: $variation_array = array(
                   1002:   'unset var' => @$unset_var,
                   1003:   'undefined var' => @$undefined_var,  
                   1004:   'empty string DQ' => "",
                   1005:   'empty string SQ' => '',
                   1006:   'uppercase NULL' => NULL,
                   1007:   'lowercase null' => null,
                   1008:   );function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
                   1009:         if (error_reporting() != 0) {
                   1010:                 // report non-silenced errors
                   1011:                 echo "Error: $err_no - $err_msg, $filename($linenum)\n";
                   1012:         }
                   1013: }
                   1014: set_error_handler('test_error_handler');
                   1015: 
                   1016: 
                   1017: 
                   1018: class classWithToString
                   1019: {
                   1020:         public function __toString() {
                   1021:                 return "Class A object";
                   1022:         }
                   1023: }
                   1024: 
                   1025: class classWithoutToString
                   1026: {
                   1027: }
                   1028: 
                   1029: $variation_array = array(
                   1030:   'instance of classWithToString' => new classWithToString(),
                   1031:   'instance of classWithoutToString' => new classWithoutToString(),
                   1032:   );$variation_array = array (
                   1033:     'int 0' => 0,
                   1034:     'int 1' => 1,
                   1035:     'int 12345' => 12345,
                   1036:     'int -12345' => -2345,
                   1037:     );<?php
                   1038: abstract class gtTestSubject {
                   1039: 
                   1040:   protected $optionalArgumentNames;
                   1041:   protected $mandatoryArgumentNames;
                   1042: 
                   1043:   protected $extraArgumentList = '';
                   1044:   protected $shortArgumentList = '';
                   1045: 
                   1046:   protected $allowedArgumentLists;
                   1047: 
                   1048:   protected $maximumArgumentList;
                   1049:   
                   1050:   protected $initialisationStatements;
                   1051: 
                   1052: 
                   1053:   /** Return the list of all mandatory argument names
                   1054:    *
                   1055:    * @return array
                   1056:    */
                   1057:   public function getMandatoryArgumentNames() {
                   1058:     return $this->mandatoryArgumentNames;
                   1059:   }
                   1060: 
                   1061: 
                   1062:   /**
                   1063:    * Return the list of all optional argument names
                   1064:    *
                   1065:    * @return array
                   1066:    */
                   1067:   public function getOptionalArgumentNames() {
                   1068:     return $this->optionalArgumentNames;
                   1069:   }
                   1070:   
                   1071:   public function setArgumentLists() {
                   1072:     $this->setValidArgumentLists();
                   1073:     $this->setExtraArgumentList();
                   1074:     $this->setShortArgumentList();
                   1075:   }
                   1076: 
                   1077:   /**
                   1078:    * Set the argument list to call the subject with. Adds one extra argument.
                   1079:    *
                   1080:    */
                   1081:   public function setExtraArgumentList() {
                   1082:     if(count ($this->mandatoryArgumentNames) > 0) {
                   1083:       for( $i = 0; $i < count( $this->mandatoryArgumentNames ); $i++) {
                   1084:         $this->extraArgumentList .= "\$".$this->mandatoryArgumentNames[$i].", ";
                   1085:       }
                   1086:     }
                   1087:      
                   1088:     if(count ($this->optionalArgumentNames) > 0) {
                   1089:       for( $i = 0; $i < count( $this->optionalArgumentNames ); $i++) {
                   1090:         $this->extraArgumentList .=  "\$".$this->optionalArgumentNames[$i].", ";
                   1091:       }
                   1092:     }
                   1093: 
                   1094:     $this->extraArgumentList= $this->extraArgumentList. "\$extra_arg";
                   1095:   }
                   1096:    
                   1097: 
                   1098:   /**
                   1099:    * Return the list of arguments as it appears in the function call
                   1100:    *
                   1101:    * @return string - list of arguments
                   1102:    */
                   1103:   public function getExtraArgumentList() {
                   1104:     return $this->extraArgumentList;
                   1105:   }
                   1106: 
                   1107: 
                   1108:   /**
                   1109:    * Set the list of function arguments to be one less that the number of mandatory arguments
                   1110:    *
                   1111:    */
                   1112:   public function setShortArgumentList() {
                   1113: 
                   1114:     if(count ($this->mandatoryArgumentNames) > 0) {
                   1115:       for( $i = 0; $i < count( $this->mandatoryArgumentNames ) - 1; $i++) {
                   1116:         $this->shortArgumentList .= "\$".$this->mandatoryArgumentNames[$i].", ";
                   1117:       }
                   1118:       $this->shortArgumentList = substr($this->shortArgumentList, 0, -2);
                   1119:     }
                   1120:   }
                   1121: 
                   1122: 
                   1123:   /**
                   1124:    * Return the short list of arguments
                   1125:    *
                   1126:    * @return string - list of arguments
                   1127:    */
                   1128:   public function getShortArgumentList() {
                   1129:     return $this->shortArgumentList;
                   1130:   }
                   1131: 
                   1132: 
                   1133:   /**
                   1134:    * Construct the list of all possible ways to call the subject (function or method)
                   1135:    *
                   1136:    */
                   1137:   public function setValidArgumentLists() {
                   1138:     $this->allowedArgumentLists[0] = '';
                   1139:     if(count ($this->mandatoryArgumentNames) > 0) {
                   1140:       for( $i = 0; $i < count( $this->mandatoryArgumentNames ); $i++) {
                   1141:         $this->allowedArgumentLists[0] .= "\$".$this->mandatoryArgumentNames[$i].", ";
                   1142:       }
                   1143:     }
                   1144:      
                   1145:     if(count ($this->optionalArgumentNames) > 0) {
                   1146:       for( $i = 0; $i < count( $this->optionalArgumentNames ); $i++) {
                   1147:         $this->allowedArgumentLists[] = $this->allowedArgumentLists[$i]."\$".$this->optionalArgumentNames[$i].", ";
                   1148:         $this->allowedArgumentLists[$i] = substr ($this->allowedArgumentLists[$i], 0, -2);
                   1149:       }
                   1150:     }
                   1151: 
                   1152:     $this->allowedArgumentLists[count($this->allowedArgumentLists) -1 ] = substr($this->allowedArgumentLists[count($this->allowedArgumentLists) -1 ], 0, -2);
                   1153:   }
                   1154: 
                   1155: 
                   1156:   /**
                   1157:    * Return the array of all possible sets of method/function arguments
                   1158:    *
                   1159:    * @return unknown
                   1160:    */
                   1161:   public function getValidArgumentLists() {
                   1162:     return $this->allowedArgumentLists;
                   1163:   }
                   1164: 
                   1165: 
                   1166:   /**
                   1167:    * Returns the argument list with teh greatest possible number of arguments.
                   1168:    *
                   1169:    * @return string
                   1170:    */
                   1171:   public function getMaximumArgumentList() {
                   1172:     return end($this->allowedArgumentLists);
                   1173:   }
                   1174: 
                   1175: 
                   1176:   /**
                   1177:    * Write initialisation statemenst for all the variables that might be used
                   1178:    *
                   1179:    */
                   1180:   public function setInitialisationStatements() {
                   1181:     if(count ($this->mandatoryArgumentNames) > 0) {
                   1182:       foreach( $this->mandatoryArgumentNames as $name) {
                   1183:         $this->initialisationStatements[] = "\$".$name." = ";
                   1184:       }
                   1185:     }
                   1186:     if(count ($this->optionalArgumentNames) > 0) {
                   1187:       foreach( $this->optionalArgumentNames as $name) {
                   1188:         $this->initialisationStatements[] = "\$".$name." = ";
                   1189:       }
                   1190:     }
                   1191:   }
                   1192:   
                   1193:   /**
                   1194:    * Return the initialisation statements
                   1195:    *
                   1196:    * @return unknown
                   1197:    */
                   1198:   public function getInitialisationStatements() {
                   1199:     return $this->initialisationStatements;
                   1200:   }
                   1201: }
                   1202: ?><?php
                   1203: /**
                   1204:  * Container for all possible variation test cases for a method
                   1205:  */
                   1206: class gtVariationContainerMethod extends gtVariationContainer {
                   1207:   
                   1208:   protected $method;
                   1209:   protected $optionalSections;
                   1210:   
                   1211:   public function __construct($osl) {
                   1212:     $this->optionalSections = $osl;
                   1213:   }
                   1214:   
                   1215:   
                   1216:   /**
                   1217:    * Sets the method to be tested
                   1218:    *
                   1219:    * @param gtMethod $method
                   1220:    */
                   1221:   public function setMethod(gtMethod $method) {
                   1222:     $this->method = $method;
                   1223:   }
                   1224:   
                   1225:   
                   1226:   /**
                   1227:    * Constructs all variation tests in $this_variationTests
                   1228:    *
                   1229:    */
                   1230:   public function constructAll() {
                   1231:     
                   1232:     $numberOfArguments = count($this->method->getMandatoryArgumentNames()) + count($this->method->getOptionalArgumentNames());
                   1233:     
                   1234:     for($i = 1; $i <= $numberOfArguments; $i++) {
                   1235:       
                   1236:       foreach ($this->dataTypes as $d) {
                   1237:         
                   1238:         $testCase = gtVariationTestCase::getInstance($this->optionalSections, 'method');
                   1239:         $testCase->setUp($this->method, $i, $d);
                   1240:         $testCase->constructTestCase();
                   1241:         $this->variationTests[] = $testCase->toString();
                   1242:         
                   1243:       }
                   1244:     }
                   1245:   }  
                   1246: }
                   1247: ?><?php
                   1248: 
                   1249: /**
                   1250:  * Class for basic test case construction for class methods
                   1251:  */
                   1252: class gtBasicTestCaseMethod extends gtBasicTestCase {
                   1253: 
                   1254:   public function __construct($opt) {
                   1255:     $this->optionalSections = $opt;
                   1256:   }
                   1257: 
                   1258:   /**
                   1259:    * Set the method 
                   1260:    *
                   1261:    * @param gtMethod $method
                   1262:    */
                   1263:   public function setMethod($method) {
                   1264:     $this->subject = $method;
                   1265:   }
                   1266:   
                   1267: public function constructTestCase() {
                   1268:     $this->constructCommonHeaders();
                   1269: 
                   1270:     $this->addBasicEcho();
                   1271:     
                   1272:     $this->constructorArgInit();
                   1273:     $this->constructorCreateInstance();
                   1274:     
                   1275:     $this->constructSubjectCalls();
                   1276:     
                   1277:     $this->constructCommonClosing();
                   1278:     
                   1279:   }
                   1280: 
                   1281:   public function testHeader() {
                   1282:     $this->testCase[] = "--TEST--";
                   1283:     $this->testCase[] = "Test class ".$this->subject->getClassName()." method  ".$this->subject->getName()."() by calling it with its expected arguments";
                   1284:     
                   1285:   }
                   1286:   
                   1287:   public function subjectCalls() {
                   1288:     $lists = $this->subject->getValidArgumentLists();
                   1289: 
                   1290:     foreach($lists as $list){
                   1291:       $this->testCase[] = "var_dump( \$class->".$this->subject->getName()."( ".$list." ) );";
                   1292:       $this->testCase = gtCodeSnippet::appendBlankLines(1, $this->testCase );
                   1293:     }
                   1294:     $this->testCase = gtCodeSnippet::appendBlankLines(2, $this->testCase );    
                   1295:   }
                   1296: 
                   1297: }
                   1298: ?><?php
                   1299: 
                   1300: /**
                   1301:  * Class for simple errors - one too many args and one too few
                   1302:  */
                   1303: 
                   1304: abstract class gtErrorTestCase extends gtTestCase {
                   1305: 
                   1306:   protected $shortArgumentList = '';
                   1307:   protected $longArgumentList = '';
                   1308: 
                   1309: 
                   1310:   /**
                   1311:    * Return instance of either method or function error test case
                   1312:    *
                   1313:    * @param string $type
                   1314:    * @return test case object
                   1315:    */
                   1316:   public static function getInstance($optionalSections, $type = 'function') {
                   1317:      
                   1318:     if($type == 'function') {
                   1319:       return new gtErrorTestCaseFunction($optionalSections);
                   1320:     }
                   1321:     if($type =='method') {
                   1322:       return new gtErrorTestCaseMethod($optionalSections);
                   1323:     }
                   1324: 
                   1325:   }
                   1326: 
                   1327:   public function getShortArgumentList() {
                   1328:     return $this->shortArgumentList;
                   1329:   }
                   1330: 
                   1331:   public function getLongArgumentList() {
                   1332:     return $this->longArgumentList;
                   1333:   }
                   1334:   
                   1335:   public function constructSubjectCalls() {
                   1336:     $this->argInit();
                   1337:     
                   1338:     //Initialise the additional argument
                   1339:     $this->testCase[] = "\$extra_arg = ";
                   1340:     
                   1341:     $this->subjectCalls();
                   1342:   }
                   1343:   
                   1344:  public function addErrorEcho() {
                   1345:     $this->testCase[] = "echo \"*** Test by calling method or function with incorrect numbers of arguments ***\\n\"";
                   1346:     $this->testCase = gtCodeSnippet::appendBlankLines(1, $this->testCase );
                   1347:   }
                   1348: }
                   1349: 
                   1350: ?><?php
                   1351: 
                   1352: /**
                   1353:  * Class for all test cases
                   1354:  */
                   1355: abstract class gtTestCase {
                   1356: 
                   1357: 
                   1358:   /**
                   1359:    * The subject of the test, may be either a function (gtFunction) or a method (gtMethod)
                   1360:    *
                   1361:    * @var gtMethod or gtFunction
                   1362:    */
                   1363:   protected $subject;
                   1364: 
                   1365: 
                   1366:   /**
                   1367:    * Arry of strings containing the test case
                   1368:    *
                   1369:    * @var array
                   1370:    */
                   1371:   protected $testCase;
                   1372: 
                   1373: 
                   1374:   /**
                   1375:    * Object containing teh ooptional sections that may be added to the test case
                   1376:    *
                   1377:    * @var gtOptionalSections
                   1378:    */
                   1379:   protected $optionalSections;
                   1380: 
                   1381: 
                   1382:   /**
                   1383:    * Convert test case from array to string
                   1384:    *
                   1385:    * @return string
                   1386:    */
                   1387:   public function toString() {
                   1388:     $testCaseString = "";
                   1389:     foreach($this->testCase as $line) {
                   1390:       $testCaseString .= $line."\n";
                   1391:     }
                   1392:     return $testCaseString;
                   1393:   }
                   1394: 
                   1395: 
                   1396: 
                   1397:   /**
                   1398:    * Returns test case as a array
                   1399:    *
                   1400:    * @return array
                   1401:    */
                   1402:   public function getTestCase() {
                   1403:     return $this->testCase;
                   1404:   }
                   1405: 
                   1406: 
                   1407:   /**
                   1408:    * Construct the common headers (title, file section..) of the test case
                   1409:    *
                   1410:    */
                   1411:   public function ConstructCommonHeaders() {
                   1412:     $this->testHeader();
                   1413: 
                   1414:     if($this->optionalSections->hasSkipif()) {
                   1415:       $this->addSkipif();
                   1416:     }
                   1417: 
                   1418:     if($this->optionalSections->hasIni()) {
                   1419:       $this->addIni();
                   1420:     }
                   1421: 
                   1422:     $this->fileOpening();
                   1423:   }
                   1424: 
                   1425: 
                   1426:   /**
                   1427:    * Construct the common closing statements (clean, done, EXPECTF...)
                   1428:    *
                   1429:    */
                   1430:   public function ConstructCommonClosing() {
                   1431:     $this->fileClosing();
                   1432:      
                   1433:     if ($this->optionalSections->hasDone()) {
                   1434:       $this->addDone();
                   1435:     }
                   1436:      
                   1437:     if ($this->optionalSections->hasClean()) {
                   1438:       $this->addClean();
                   1439:     }
                   1440: 
                   1441:     $this->addExpectf();
                   1442:   }
                   1443: 
                   1444:   /**
                   1445:    * Start the FILE section of the test
                   1446:    *
                   1447:    */
                   1448:   public function fileOpening() {
                   1449:     $this->testCase[] = "--FILE--";
                   1450:     $this->testCase[] = "<?php";
                   1451:     $this->testCase = gtCodeSnippet::appendBlankLines(2, $this->testCase );
                   1452:   }
                   1453: 
                   1454: 
                   1455:   /**
                   1456:    * Add contructor argument initialisation to test case
                   1457:    *
                   1458:    */
                   1459:   public function constructorArgInit() {
                   1460:     $conStatements = $this->subject->getConstructorInitStatements();
                   1461:     foreach($conStatements as $statement) {
                   1462:       $this->testCase[] = $statement;
                   1463:     }
                   1464:   }
                   1465: 
                   1466: 
                   1467:   /**
                   1468:    * Create instance of class in the test case
                   1469:    *
                   1470:    */
                   1471:   public function constructorCreateInstance() {
                   1472:     $constructorList = $this->subject->getConstructorArgumentList();
                   1473:     $this->testCase[] = "\$class = new ".$this->subject->getClassName()."( ".$constructorList." );";
                   1474:     $this->testCase = gtCodeSnippet::appendBlankLines(2, $this->testCase );
                   1475:   }
                   1476: 
                   1477: 
                   1478:   /**
                   1479:    * Add function or method initilaisation statements to the test case
                   1480:    *
                   1481:    */
                   1482:   public function argInit() {
                   1483:     $statements = $this->subject->getInitialisationStatements();
                   1484:     foreach($statements as $statement) {
                   1485:       $this->testCase[] = $statement;
                   1486:     }
                   1487:     $this->testCase = gtCodeSnippet::appendBlankLines(2, $this->testCase );
                   1488:   }
                   1489: 
                   1490: 
                   1491:   /**
                   1492:    * Add FILE section closing tag to teh test case
                   1493:    *
                   1494:    */
                   1495:   public function fileClosing() {
                   1496:     $this->testCase[] = "?>";
                   1497:   }
                   1498: 
                   1499: 
                   1500:   /**
                   1501:    * Add a skipif section to the test case
                   1502:    *
                   1503:    */
                   1504:   public function addSkipif() {
                   1505:     $this->testCase[] = "--SKIPIF--";
                   1506:     $this->testCase[] = "<?php";
                   1507:     if($this->optionalSections->hasSkipifKey()) {
                   1508:       $key = $this->optionalSections->getSkipifKey();
                   1509:       //test standard skipif sections
                   1510:       if($key == 'win') {
                   1511:         $this->testCase = gtCodeSnippet::append('skipifwin', $this->testCase);
                   1512:       }
                   1513:       if($key == 'notwin' ) {
                   1514:         $this->testCase = gtCodeSnippet::append('skipifnotwin', $this->testCase);
                   1515:       }
                   1516: 
                   1517:       if($key == '64b' ) {
                   1518:         $this->testCase = gtCodeSnippet::append('skipif64b', $this->testCase);
                   1519:       }
                   1520: 
                   1521:       if($key == 'not64b' ) {
                   1522:         $this->testCase = gtCodeSnippet::append('skipifnot64b', $this->testCase);
                   1523:       }
                   1524:     }
                   1525: 
                   1526:     if($this->optionalSections->hasSkipifExt()) {
                   1527:       $ext = $this->optionalSections->getSkipifExt();
                   1528:       $this->testCase[] = "if (!extension_loaded('$ext')) die ('skip $ext extension not available in this build');";
                   1529:     }
                   1530:     $this->testCase[] = "?>";
                   1531:   }
                   1532: 
                   1533: 
                   1534:   /**
                   1535:    * Add an INI section to the test case
                   1536:    *
                   1537:    */
                   1538:   public function addIni() {
                   1539:     $this->testCase[] = "--INI--";
                   1540:     $this->testCase[] = "";
                   1541:   }
                   1542: 
                   1543: 
                   1544:   /**
                   1545:    * Add a clean section to the test case
                   1546:    *
                   1547:    */
                   1548:   public function addClean() {
                   1549:     $this->testCase[] = "--CLEAN--";
                   1550:     $this->testCase[] = "<?php";
                   1551:     $this->testCase[] = "?>";
                   1552:   }
                   1553: 
                   1554: 
                   1555:   /**
                   1556:    * Add a ===DONE=== statement to the test case
                   1557:    *
                   1558:    */
                   1559:   public function addDone() {
                   1560:     $this->testCase[] = "===DONE===";
                   1561:   }
                   1562: 
                   1563: 
                   1564:   /**
                   1565:    * Add an EXPECTF section
                   1566:    *
                   1567:    */
                   1568:   public function addExpectf() {
                   1569:     $this->testCase[] = "--EXPECTF--";
                   1570:     if ($this->optionalSections->hasDone() ){
                   1571:       $this->testCase[] = '===DONE===';
                   1572:     }
                   1573:   }
                   1574: 
                   1575:   public function getOpt() {
                   1576:     return $this->optionalSections;
                   1577:   }
                   1578: }
                   1579: ?><?php
                   1580: 
                   1581: /**
                   1582:  * Basic test case for a PHP function
                   1583:  *
                   1584:  */
                   1585: class gtBasicTestCaseFunction extends gtBasicTestCase {
                   1586: 
                   1587: 
                   1588:   public function __construct($opt) {
                   1589:     $this->optionalSections = $opt;
                   1590:   }
                   1591: 
                   1592:   /**
                   1593:    * Set the function name
                   1594:    *
                   1595:    * @param gtFunction $function
                   1596:    */
                   1597:   public function setFunction($function) {
                   1598:     $this->subject = $function;
                   1599:   }
                   1600: 
                   1601:   public function constructTestCase() {
                   1602:     $this->constructCommonHeaders();
                   1603:     
                   1604:     $this->addBasicEcho();
                   1605:     
                   1606:     $this->constructSubjectCalls();
                   1607:     
                   1608:     $this->constructCommonClosing();
                   1609:    
                   1610:   }
                   1611: 
                   1612: 
                   1613:   /**
                   1614:    * Construct test case header
                   1615:    *
                   1616:    */
                   1617:   public function testHeader() {
                   1618:     //Opening section and start of test case array.
                   1619:     $this->testCase[] = "--TEST--";
                   1620:     $this->testCase[] = "Test function ".$this->subject->getName()."() by calling it with its expected arguments";
                   1621:   }
                   1622: 
                   1623:   /**
                   1624:    * Add the test section to call the function
                   1625:    *
                   1626:    */
                   1627:   public function subjectCalls() {
                   1628:     // Construct the argument list to pass to the function being tested
                   1629:     $lists = $this->subject->getValidArgumentLists();
                   1630: 
                   1631:     foreach($lists as $list){
                   1632: 
                   1633:       $this->testCase = gtCodeSnippet::appendBlankLines(1, $this->testCase );
                   1634:       $this->testCase[] = "var_dump(".$this->subject->getName()."( ".$list." ) );";
                   1635:     }
                   1636:     $this->testCase = gtCodeSnippet::appendBlankLines(2, $this->testCase );
                   1637:   }
                   1638: 
                   1639: }
                   1640: ?><?php
                   1641: 
                   1642: /**
                   1643:  * Error test case for a PHP function
                   1644:  *
                   1645:  */
                   1646: class gtErrorTestCaseFunction extends gtErrorTestCase {
                   1647: 
                   1648:   public function __construct($opt) {
                   1649:     $this->optionalSections = $opt;
                   1650:   }
                   1651: 
                   1652:   /**
                   1653:    * Set the function name
                   1654:    *
                   1655:    * @param string $function
                   1656:    */
                   1657:   public function setFunction($function) {
                   1658:     $this->subject = $function;
                   1659:   }
                   1660: 
                   1661: 
                   1662:   /**
                   1663:    * Construct the test case as an array of strings
                   1664:    *
                   1665:    */
                   1666:   public function constructTestCase() {
                   1667:     $this->constructCommonHeaders();
                   1668:     
                   1669:     $this->addErrorEcho();
                   1670:       
                   1671:     $this->constructSubjectCalls();
                   1672:     
                   1673:     $this->constructCommonClosing();
                   1674:     
                   1675:   }
                   1676: 
                   1677: 
                   1678:   public function testHeader() {
                   1679:     $this->testCase[] = "--TEST--";
                   1680:     $this->testCase[] = "Test function ".$this->subject->getName()."() by calling it more than or less than its expected arguments";
                   1681:   }
                   1682: 
                   1683:   public function subjectCalls() {
                   1684:     // Construct the argument lists to pass to the function being tested
                   1685:     $list = $this->subject->getExtraArgumentList();
                   1686:     $this->testCase = gtCodeSnippet::appendBlankLines(1, $this->testCase );
                   1687:     $this->testCase[] = "var_dump(".$this->subject->getName()."( ".$list." ) );";
                   1688: 
                   1689:     $list = $this->subject->getShortArgumentList();
                   1690:     $this->testCase = gtCodeSnippet::appendBlankLines(1, $this->testCase );
                   1691:     $this->testCase[] = "var_dump(".$this->subject->getName()."( ".$list." ) );";
                   1692:     $this->testCase = gtCodeSnippet::appendBlankLines(2, $this->testCase );
                   1693:   }
                   1694: 
                   1695: }
                   1696: ?><?php
                   1697: 
                   1698: /**
                   1699:  * Class for variation tests for a PHP function
                   1700:  */
                   1701: class gtVariationTestCaseFunction extends gtVariationTestCase {
                   1702: 
                   1703:   protected $argumentNumber;
                   1704:   protected $variationData;
                   1705:   protected $testCase;
                   1706: 
                   1707:   public function __construct($opt) {
                   1708:     $this->optionalSections = $opt;
                   1709:   }
                   1710:   /**
                   1711:    * Set data neede to construct variation tests
                   1712:    *
                   1713:    * @param gtfunction $function
                   1714:    * @param string $argumentNumber
                   1715:    * @param string $variationData
                   1716:    */
                   1717:   public function setUp(gtfunction $function, $argumentNumber, $variationData) {
                   1718:     $this->subject = $function;
                   1719:     $this->argumentNumber = $argumentNumber;
                   1720:     $this->variationData = $variationData;
                   1721: 
                   1722:   }
                   1723: 
                   1724: 
                   1725:   /**
                   1726:    * Constructs  the test case as a array of strings
                   1727:    *
                   1728:    */
                   1729:   public function constructTestCase() {
                   1730:     $this->constructCommonHeaders(); 
                   1731:       
                   1732:     $this->addVariationEcho();
                   1733:     
                   1734:     $this->constructSubjectCalls();
                   1735:     
                   1736:     $this->constructCommonClosing();
                   1737:     
                   1738:   }
                   1739:   public function testHeader() {
                   1740:     $this->testCase[] = "--TEST--";
                   1741:     $this->testCase[] = "Test function ".$this->subject->getName()."() by substituting argument ".$this->argumentNumber." with ".$this->variationData." values.";
                   1742:   }
                   1743: 
                   1744:   
                   1745:   public function subjectCalls() { 
                   1746:     $this->testCase = gtCodeSnippet::append('loopStart', $this->testCase);
                   1747: 
                   1748:     // Construct the argument list to pass to the function being tested
                   1749:     $argumentList = explode(",", $this->subject->getMaximumArgumentList());
                   1750:     $argumentList[$this->argumentNumber -1 ] = "\$var ";
                   1751:     $list = implode(", ", $argumentList);
                   1752: 
                   1753: 
                   1754:     $this->testCase[] = "  var_dump(".$this->subject->getName()."( ".$list." ) );";
                   1755:     $this->testCase = gtCodeSnippet::append('loopClose', $this->testCase);
                   1756:   }
                   1757:    
                   1758: }
                   1759: ?><?php
                   1760: 
                   1761: /**
                   1762:  * Container for all possible variation test cases of functions
                   1763:  */
                   1764: class gtVariationContainerFunction extends gtVariationContainer {
                   1765:   
                   1766:   protected $function;
                   1767:   protected $optionalSections;
                   1768:   
                   1769:   public function __construct($osl) {
                   1770:     $this->optionalSections = $osl;
                   1771:   }
                   1772:   
                   1773:   /**
                   1774:    * Sets function being tested
                   1775:    *
                   1776:    * @param gtFunction $function
                   1777:    */
                   1778:   public function setFunction(gtFunction $function) {
                   1779:     $this->function = $function;
                   1780:   }
                   1781:   
                   1782:   
                   1783:   /**
                   1784:    * Constucts all possible variation testcases in array $this->variationTests
                   1785:    *
                   1786:    */
                   1787:   public function constructAll() {
                   1788:     
                   1789:         
                   1790:     $numberOfArguments = count($this->function->getMandatoryArgumentNames()) + count($this->function->getOptionalArgumentNames());
                   1791:     for($i = 1; $i <= $numberOfArguments; $i++) {
                   1792:       foreach ($this->dataTypes as $d) {
                   1793:         $testCase = gtVariationTestCase::getInstance($this->optionalSections);
                   1794:         $testCase->setUp($this->function, $i, $d);
                   1795:         $testCase->constructTestCase();
                   1796:         $this->variationTests[] = $testCase->toString();
                   1797:       }
                   1798:     }
                   1799:   }  
                   1800: }
                   1801: ?><?php
                   1802: 
                   1803: /**
                   1804:  * Error test case for a PHP method
                   1805:  *
                   1806:  */
                   1807: class gtErrorTestCaseMethod extends gtErrorTestCase {
                   1808: 
                   1809:   public function __construct($opt) {
                   1810:     $this->optionalSections = $opt;
                   1811:   }
                   1812:   private $method;
                   1813: 
                   1814:   /**
                   1815:    * Set the method name
                   1816:    *
                   1817:    * @param string $method
                   1818:    */
                   1819:   public function setMethod($method) {
                   1820:     $this->subject = $method;
                   1821:   }
                   1822: 
                   1823: 
                   1824:   /**
                   1825:    * Construct the test case as an array of strings
                   1826:    *
                   1827:    */
                   1828:   public function constructTestCase() {
                   1829:     $this->constructCommonHeaders();
                   1830:     
                   1831:     $this->addErrorEcho();
                   1832:     
                   1833:     $this->constructorArgInit();
                   1834:     $this->constructorCreateInstance();
                   1835:     
                   1836:     $this->constructSubjectCalls();
                   1837:     
                   1838:     $this->constructCommonClosing();
                   1839:   }
                   1840:  
                   1841:   public function testHeader() {
                   1842:     $this->testCase[] = "--TEST--";
                   1843:     $this->testCase[] = "Test class ".$this->subject->getClassName()." method ".$this->subject->getName()."() by calling it more than or less than its expected arguments";
                   1844:   }
                   1845:  
                   1846:   public function subjectCalls() {
                   1847: 
                   1848:     // Construct the argument list to pass to the method being tested
                   1849:     $list = $this->subject->getExtraArgumentList();
                   1850:     $this->testCase = gtCodeSnippet::appendBlankLines(1, $this->testCase );
                   1851:     $this->testCase[] = "var_dump(".$this->subject->getName()."( ".$list." ) );";
                   1852:     
                   1853:     $list = $this->subject->getShortArgumentList();
                   1854:     $this->testCase = gtCodeSnippet::appendBlankLines(1, $this->testCase );
                   1855:     $this->testCase[] = "var_dump(".$this->subject->getName()."( ".$list." ) );";
                   1856:   
                   1857:   }
                   1858: }
                   1859: ?><?php
                   1860: 
                   1861: /**
                   1862:  * Class for basic test case construction
                   1863:  */
                   1864: 
                   1865: abstract class gtBasicTestCase extends gtTestCase {
                   1866: 
                   1867:   protected $subject;
                   1868: 
                   1869: 
                   1870:   /**
                   1871:    * Returns an instance of a test case for a method or a function
                   1872:    *
                   1873:    * @param string $type
                   1874:    * @return test case object
                   1875:    */
                   1876:   public static function getInstance($optionalSections, $type = 'function') {
                   1877:     if($type == 'function') {
                   1878:       return new gtBasicTestCaseFunction($optionalSections);
                   1879:     }
                   1880:     if($type =='method') {
                   1881:       return new gtBasicTestCaseMethod($optionalSections);
                   1882:     }
                   1883:   }
                   1884:   
                   1885:   public function constructSubjectCalls() {
                   1886:         $this->argInit();
                   1887:         $this->subjectCalls();
                   1888:   }
                   1889:   
                   1890:   public function addBasicEcho() {
                   1891:     $this->testCase[] = "echo \"*** Test by calling method or function with its expected arguments ***\\n\"";
                   1892:     $this->testCase = gtCodeSnippet::appendBlankLines(1, $this->testCase );
                   1893:   }
                   1894: }
                   1895: ?><?php
                   1896: 
                   1897: /**
                   1898:  * Container for all possible variation test cases
                   1899:  */
                   1900: abstract class gtVariationContainer {
                   1901:   
                   1902:   protected $variationTests;
                   1903:   
                   1904:   protected $dataTypes = array (
                   1905:                          'array',
                   1906:                          'boolean',
                   1907:                          'emptyUnsetUndefNull',
                   1908:                          'float',
                   1909:                          'int',
                   1910:                          'object',
                   1911:                          'string',
                   1912:                          );
                   1913:   
                   1914:   
                   1915:                      
                   1916:   /**
                   1917:    * Return an instance of a containers for either function or method tests
                   1918:    *
                   1919:    * @param string $type
                   1920:    * @return variation test container
                   1921:    */
                   1922:    public static function getInstance ($optionalSections, $type = 'function') {
                   1923:     
                   1924:     if($type == 'function') {
                   1925:       return new gtVariationContainerFunction($optionalSections);
                   1926:     }
                   1927:     if($type =='method') {
                   1928:       return new gtVariationContainerMethod($optionalSections);
                   1929:     }
                   1930:     
                   1931:   }
                   1932:   
                   1933:   
                   1934:   public function constructAll() {
                   1935:   }
                   1936:   
                   1937:   
                   1938:   /**
                   1939:    * Returns all varaition tests as an array of arrays
                   1940:    *
                   1941:    * @return string
                   1942:    */
                   1943:   public function getVariationTests() {
                   1944:     return $this->variationTests;
                   1945:   }
                   1946:   
                   1947: }
                   1948: ?>
                   1949: <?php
                   1950: 
                   1951: /**
                   1952:  * Class for extended variations. Needs 'data type' and argument to vary
                   1953:  */
                   1954: 
                   1955: abstract class gtVariationTestCase extends gtTestCase {
                   1956: 
                   1957: 
                   1958:   /**
                   1959:    * Returns an instance of a test case for a method or a function
                   1960:    *
                   1961:    * @param string $type
                   1962:    * @return test case object
                   1963:    */
                   1964:   public static function getInstance($optionalSections, $type = 'function') {
                   1965:      
                   1966:     if($type == 'function') {
                   1967:       return new gtVariationTestCaseFunction($optionalSections);
                   1968:     }
                   1969:     if($type =='method') {
                   1970:       return new gtVariationTestCaseMethod($optionalSections);
                   1971:     }
                   1972: 
                   1973:   }
                   1974: 
                   1975:   public function argInitVariation() {
                   1976:     $statements = $this->subject->getInitialisationStatements();
                   1977:     for($i=0; $i<count($statements); $i++) {
                   1978:       if($i != ( $this->argumentNumber -1) ) {
                   1979:         $this->testCase[] = $statements[$i];
                   1980:       }
                   1981:     }
                   1982:     $this->testCase = gtCodeSnippet::appendBlankLines(2, $this->testCase );
                   1983:   }
                   1984: 
                   1985:   public function addVariationCode() {
                   1986:     $this->testCase = gtCodeSnippet::append($this->variationData, $this->testCase);
                   1987:     $this->testCase = gtCodeSnippet::appendBlankLines(2, $this->testCase );
                   1988:   }
                   1989: 
                   1990:   public function constructSubjectCalls() {
                   1991:     $this->argInitVariation();
                   1992:     $this->addVariationCode();
                   1993:     $this->subjectCalls();
                   1994:   }
                   1995: 
                   1996:   public function addVariationEcho() {
                   1997:     $this->testCase[] = "echo \"*** Test substituting argument ".$this->argumentNumber." with ".$this->variationData." values ***\\n\";";
                   1998:     $this->testCase = gtCodeSnippet::appendBlankLines(1, $this->testCase );
                   1999:   }
                   2000: 
                   2001: }
                   2002: ?><?php
                   2003: 
                   2004: /**
                   2005:  * Class for variation tests for a PHP method
                   2006:  */
                   2007: class gtVariationTestCaseMethod extends gtVariationTestCase {
                   2008: 
                   2009:   protected $subject;
                   2010:   protected $argumentNumber;
                   2011:   protected $variationData;
                   2012:   protected $testCase;
                   2013: 
                   2014:   public function __construct($opt) {
                   2015:     $this->optionalSections = $opt;
                   2016:   }
                   2017: 
                   2018:   /**
                   2019:    * Set data neede to construct variation tests
                   2020:    *
                   2021:    * @param gtMethod $method
                   2022:    * @param string $argumentNumber
                   2023:    * @param string $variationData
                   2024:    */
                   2025:   public function setUp(gtMethod $method, $argumentNumber, $variationData) {
                   2026:     $this->subject = $method;
                   2027:     $this->argumentNumber = $argumentNumber;
                   2028:     $this->variationData = $variationData;
                   2029:   }
                   2030: 
                   2031: 
                   2032:   /**
                   2033:    * Constructs the test case as a array of strings
                   2034:    *
                   2035:    */
                   2036:   public function constructTestCase() {
                   2037:     $this->constructCommonHeaders();
                   2038:     
                   2039:     $this->addVariationEcho();
                   2040:     
                   2041:     $this->constructorArgInit();
                   2042:     $this->constructorCreateInstance();
                   2043:     
                   2044:     $this->constructSubjectcalls();
                   2045:     $this->constructCommonClosing();
                   2046:     
                   2047:   }
                   2048: 
                   2049:   public function testHeader() {
                   2050:     $this->testCase[] = "--TEST--";
                   2051:     $this->testCase[] = "Test class ".$this->subject->getClassName()." method ".$this->subject->getName()."() by substituting argument ".$this->argumentNumber." with ".$this->variationData." values.";
                   2052:   }
                   2053: 
                   2054:   public function subjectCalls() {
                   2055:     $this->testCase = gtCodeSnippet::append('loopStart', $this->testCase);
                   2056:     // Construct the argument list to pass to the method being tested
                   2057:     $argumentList = explode(",", $this->subject->getMaximumArgumentList());
                   2058:     $argumentList[$this->argumentNumber -1 ] = "\$var ";
                   2059:     $list = implode(", ", $argumentList);
                   2060: 
                   2061: 
                   2062:     $this->testCase[] = "  var_dump(\$class->".$this->subject->getName()."( ".$list." ) );";
                   2063:     $this->testCase = gtCodeSnippet::append('loopClose', $this->testCase);
                   2064: 
                   2065:   }
                   2066: 
                   2067: }
                   2068: 
                   2069: ?>:yD7`_gDUGBMB

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>