Development

Changeset 20961

You must first sign up to be able to contribute.

Changeset 20961

Show
Ignore:
Timestamp:
08/09/09 16:43:14 (5 years ago)
Author:
bschussek
Message:

Extracted code from LimeTester? to new class LimeTesterFactory?

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • tools/lime/branches/2.0-experimental/lib/tester/LimeTester.php

    r20958 r20961  
    1313{ 
    1414  protected static 
    15     $testers = array( 
    16       'null'      => 'LimeTesterScalar', 
    17       'integer'   => 'LimeTesterInteger', 
    18       'boolean'   => 'LimeTesterScalar', 
    19       'string'    => 'LimeTesterString', 
    20       'double'    => 'LimeTesterDouble', 
    21       'array'     => 'LimeTesterArray', 
    22       'object'    => 'LimeTesterObject', 
    23       'resource'  => 'LimeTesterResource', 
    24     ); 
     15    $factory = null; 
    2516 
    2617  protected 
     
    3021  public static function create($value) 
    3122  { 
    32     $type = null; 
    33  
    34     if (is_null($value)) 
    35     { 
    36       $type = 'null'; 
    37     } 
    38     else if (is_object($value) && array_key_exists(get_class($value), self::$testers)) 
    39     { 
    40       $type = get_class($value); 
    41     } 
    42     else if (is_object($value)) 
    43     { 
    44       $class = new ReflectionClass($value); 
    45  
    46       foreach ($class->getInterfaces() as $interface) 
    47       { 
    48         if (array_key_exists($interface->getName(), self::$testers)) 
    49         { 
    50           $type = $interface->getName(); 
    51           break; 
    52         } 
    53       } 
    54  
    55       $parentClass = $class; 
    56  
    57       while ($parentClass = $parentClass->getParentClass()) 
    58       { 
    59         if (array_key_exists($parentClass->getName(), self::$testers)) 
    60         { 
    61           $type = $parentClass->getName(); 
    62           break; 
    63         } 
    64       } 
    65  
    66       if (!empty($type)) 
    67       { 
    68         // cache the tester 
    69         self::$testers[$class->getName()] = self::$testers[$type]; 
    70       } 
    71     } 
    72  
    73     if (empty($type)) 
    74     { 
    75       if (array_key_exists(gettype($value), self::$testers)) 
    76       { 
    77         $type = gettype($value); 
    78       } 
    79       else 
    80       { 
    81         throw new InvalidArgumentException(sprintf('No tester is registered for type "%s"', gettype($value))); 
    82       } 
    83     } 
    84  
    85     $class = self::$testers[$type]; 
    86  
    87     return new $class($value); 
     23    return self::getFactory()->create($value); 
    8824  } 
    8925 
    9026  public static function register($type, $tester) 
    9127  { 
    92     if (!class_exists($tester)) 
     28    return self::getFactory()->register($type, $tester); 
     29  } 
     30 
     31  private static function getFactory() 
     32  { 
     33    if (is_null(self::$factory)) 
    9334    { 
    94       throw new InvalidArgumentException(sprintf('The class "%s" does not exist', $tester)); 
     35      self::$factory = new LimeTesterFactory(); 
    9536    } 
    9637 
    97     $class = new ReflectionClass($tester); 
    98  
    99     if (!$class->implementsInterface('LimeTesterInterface')) 
    100     { 
    101       throw new InvalidArgumentException('Testers must implement "LimeTesterInterface"'); 
    102     } 
    103  
    104     self::$testers[$type] = $tester; 
     38    return self::$factory; 
    10539  } 
    10640 
  • tools/lime/branches/2.0-experimental/test/unit/tester/LimeTesterObjectTest.php

    r20958 r20961  
    6868 
    6969 
    70 // @Test: assertEquals() throws no exception if objects are the same and strict is set 
     70// @Test: assertSame() throws no exception if objects are the same 
    7171 
    7272  // fixtures 
     
    7575  $expected = new LimeTesterObject($object); 
    7676  // test 
    77   $actual->assertEquals($expected); 
     77  $actual->assertSame($expected); 
    7878 
    7979