Esempio n. 1
0
 public final function createStrictMock($class_name, $extra_interfaces = array())
 {
     FBMock_Utils::assertString($class_name);
     $mock = self::createMock($class_name, $extra_interfaces);
     FBMock_Utils::getDoubleImplementation($mock)->setStrictMock();
     return $mock;
 }
Esempio n. 2
0
/**
 * Create a strict mock object of type $class_name.
 *
 * "Strict" means that if any unmocked method is called, an exception will be
 * thrown.
 */
function strict_mock($class_name)
{
    FBMock_Utils::assertString($class_name);
    $interface_names = func_get_args();
    array_shift($interface_names);
    return FBMock_Config::get()->getMockCreator()->createStrictMock($class_name, $interface_names);
}
Esempio n. 3
0
 private function getStub($method_name)
 {
     FBMock_Utils::assertString($method_name);
     if (isset($this->methodsToStubs[strtolower($method_name)])) {
         return $this->methodsToStubs[strtolower($method_name)];
     }
     return null;
 }
Esempio n. 4
0
 /**
  * Assert that the method calls match the array of calls.
  *
  * Example usage:
  *
  *    // Code under test calls method
  *    $mock->testMethod(1,2,3);
  *    $mock->testMethod('a', 'b', 'c');
  *
  *    // Test asserts calls
  *    self::assertCalls(
  *      $mock,
  *      'testMethod',
  *      array(1,2,3),
  *      array('a', 'b', 'c')
  *    );
  *
  * @param  $mock         a mock object
  * @param  $method_name  name of method to check
  * @param  ...           arrays of expected arguments for each call
  * @param  $msg          message for assert (optional)
  */
 public static function assertCalls(FBMock_Mock $mock, $method_name)
 {
     FBMock_Utils::assertString($method_name);
     $args = func_get_args();
     $msg = '';
     if (is_string(end($args))) {
         $msg = array_pop($args);
     }
     $expected_calls = array_slice($args, 2);
     self::assertNumCalls($mock, $method_name, count($expected_calls), $msg);
     $actual_calls = $mock->mockGetCalls($method_name);
     foreach ($expected_calls as $i => $call) {
         PHPUnit_Framework_TestCase::assertEquals($call, $actual_calls[$i], $msg ?: "Call {$i} for method {$method_name} did not match expected call");
     }
 }
    public function testMethodWithTypehintedArguments()
    {
        $this->refMethod = new ReflectionMethod('FBMock_MethodGeneratorTestObj::methodWithHintsAndDefaults');
        if (FBMock_Utils::isHHVM()) {
            $expected = <<<'EOD'
public function methodWithHintsAndDefaults(stdClass $o, array $a=array (
  0 => "asdf",
), $n=NULL)
EOD;
            $this->assertCorrectHeader($expected);
        } else {
            $expected = <<<'EOD'
public function methodWithHintsAndDefaults(stdClass $o, array $a=array (
  0 => 'asdf',
), $n=NULL)
EOD;
            $this->assertCorrectHeader($expected);
        }
    }
Esempio n. 6
0
 public final function createTestDoubleFor($class_name, array $interfaces = array(), array $traits = array(), $method_checker = null)
 {
     FBMock_Utils::assertString($class_name);
     $this->assertAllowed();
     if (!class_exists($class_name) && !interface_exists($class_name)) {
         throw new FBMock_TestDoubleException("Attempting to mock {$class_name} but {$class_name} isn't loaded.");
     }
     $mock_class_name = FBMock_Utils::mockClassNameFor($class_name, $interfaces, $traits);
     $ref_class = new ReflectionClass($class_name);
     if ($ref_class->isInternal() && !FBMock_Utils::isHHVM()) {
         throw new FBMock_TestDoubleException("Trying to mock PHP internal class {$class_name}. Mocking of internal " . "classes is only supported in HHVM.");
     }
     if (!class_exists($mock_class_name, $autoload = false)) {
         $class_generator_class = FBMock_Config::get()->getClassGenerator();
         $class_generator = new $class_generator_class();
         $code = $class_generator->generateCode($ref_class, $mock_class_name, $interfaces, $traits, $method_checker);
         eval($code);
     }
     $mock_object = (new ReflectionClass($mock_class_name))->newInstanceWithoutConstructor();
     return $mock_object;
 }
Esempio n. 7
0
 /**
  * @expectedException Exception
  * @expectedExceptionMessage Error message with 2 args
  */
 public function testEnforceFail()
 {
     FBMock_Utils::enforce(array(), 'Error message with %d %s', 2, 'args');
 }
 private function canOverrideFinals()
 {
     return FBMock_Utils::isHHVM();
 }
Esempio n. 9
0
 public static function skipInHHVM()
 {
     if (FBMock_Utils::isHHVM()) {
         self::markTestSkipped('Test is for standard (non-HHVM) PHP');
     }
 }
Esempio n. 10
0
 public function mockGetCalls($method_name)
 {
     FBMock_Utils::assertString($method_name);
     return FBMock_Utils::getDoubleImplementation($this)->getCalls($this, $method_name);
 }
Esempio n. 11
0
 public function __construct($format_str)
 {
     FBMock_Utils::assertString($format_str);
     $args = array_slice(func_get_args(), 1);
     parent::__construct(vsprintf($format_str, $args));
 }