📄 reflection_php5_test.php.svn-base
字号:
<?php// $Id: reflection_php5_test.php 1541 2007-06-10 02:27:59Z tswicegood $require_once(dirname(__FILE__) . '/../autorun.php');require_once(dirname(__FILE__) . '/../reflection_php5.php');class AnyOldLeafClass { function aMethod() { }}abstract class AnyOldClass { function aMethod() { }}class AnyOldLeafClassWithAFinal { final function aMethod() { }}interface AnyOldInterface { function aMethod();}interface AnyOldArgumentInterface { function aMethod(AnyOldInterface $argument);}interface AnyDescendentInterface extends AnyOldInterface {}class AnyOldImplementation implements AnyOldInterface { function aMethod() { } function extraMethod() { }}abstract class AnyAbstractImplementation implements AnyOldInterface {}abstract class AnotherOldAbstractClass { protected abstract function aMethod(AnyOldInterface $argument);}class AnyOldSubclass extends AnyOldImplementation { }class AnyOldArgumentClass { function aMethod($argument) { }}class AnyOldArgumentImplementation implements AnyOldArgumentInterface { function aMethod(AnyOldInterface $argument) { }}class AnyOldTypeHintedClass implements AnyOldArgumentInterface { function aMethod(AnyOldInterface $argument) { }}class AnyDescendentImplementation implements AnyDescendentInterface { function aMethod() { }}class AnyOldOverloadedClass { function __isset($key) { } function __unset($key) { }}class AnyOldClassWithStaticMethods { static function aStatic() { } static function aStaticWithParameters($arg1, $arg2) { }}abstract class AnyOldAbstractClassWithAbstractMethods { abstract function anAbstract(); abstract function anAbstractWithParameter($foo); abstract function anAbstractWithMultipleParameters($foo, $bar);}class TestOfReflection extends UnitTestCase { function testClassExistence() { $reflection = new SimpleReflection('AnyOldLeafClass'); $this->assertTrue($reflection->classOrInterfaceExists()); $this->assertTrue($reflection->classOrInterfaceExistsSansAutoload()); $this->assertFalse($reflection->isAbstract()); $this->assertFalse($reflection->isInterface()); } function testClassNonExistence() { $reflection = new SimpleReflection('UnknownThing'); $this->assertFalse($reflection->classOrInterfaceExists()); $this->assertFalse($reflection->classOrInterfaceExistsSansAutoload()); } function testDetectionOfAbstractClass() { $reflection = new SimpleReflection('AnyOldClass'); $this->assertTrue($reflection->isAbstract()); } function testDetectionOfFinalMethods() { $reflection = new SimpleReflection('AnyOldClass'); $this->assertFalse($reflection->hasFinal()); $reflection = new SimpleReflection('AnyOldLeafClassWithAFinal'); $this->assertTrue($reflection->hasFinal()); } function testFindingParentClass() { $reflection = new SimpleReflection('AnyOldSubclass'); $this->assertEqual($reflection->getParent(), 'AnyOldImplementation'); } function testInterfaceExistence() { $reflection = new SimpleReflection('AnyOldInterface'); $this->assertTrue($reflection->classOrInterfaceExists()); $this->assertTrue($reflection->classOrInterfaceExistsSansAutoload()); $this->assertTrue($reflection->isInterface()); } function testMethodsListFromClass() { $reflection = new SimpleReflection('AnyOldClass'); $this->assertIdentical($reflection->getMethods(), array('aMethod')); } function testMethodsListFromInterface() { $reflection = new SimpleReflection('AnyOldInterface'); $this->assertIdentical($reflection->getMethods(), array('aMethod')); $this->assertIdentical($reflection->getInterfaceMethods(), array('aMethod')); } function testMethodsComeFromDescendentInterfacesASWell() { $reflection = new SimpleReflection('AnyDescendentInterface'); $this->assertIdentical($reflection->getMethods(), array('aMethod')); } function testCanSeparateInterfaceMethodsFromOthers() { $reflection = new SimpleReflection('AnyOldImplementation'); $this->assertIdentical($reflection->getMethods(), array('aMethod', 'extraMethod')); $this->assertIdentical($reflection->getInterfaceMethods(), array('aMethod')); } function testMethodsComeFromDescendentInterfacesInAbstractClass() { $reflection = new SimpleReflection('AnyAbstractImplementation'); $this->assertIdentical($reflection->getMethods(), array('aMethod')); } function testInterfaceHasOnlyItselfToImplement() { $reflection = new SimpleReflection('AnyOldInterface'); $this->assertEqual( $reflection->getInterfaces(), array('AnyOldInterface')); } function testInterfacesListedForClass() { $reflection = new SimpleReflection('AnyOldImplementation'); $this->assertEqual( $reflection->getInterfaces(), array('AnyOldInterface')); } function testInterfacesListedForSubclass() { $reflection = new SimpleReflection('AnyOldSubclass'); $this->assertEqual( $reflection->getInterfaces(), array('AnyOldInterface')); } function testNoParameterCreationWhenNoInterface() { $reflection = new SimpleReflection('AnyOldArgumentClass'); $function = $reflection->getSignature('aMethod'); if (version_compare(phpversion(), '5.0.2', '<=')) { $this->assertEqual('function amethod()', strtolower($function)); } else { $this->assertEqual('function aMethod()', $function); } } function testParameterCreationWithoutTypeHinting() { $reflection = new SimpleReflection('AnyOldArgumentImplementation'); $function = $reflection->getSignature('aMethod'); if (version_compare(phpversion(), '5.0.2', '<=')) { $this->assertEqual('function amethod(AnyOldInterface $argument)', $function); } else { $this->assertEqual('function aMethod(AnyOldInterface $argument)', $function); } } function testParameterCreationForTypeHinting() { $reflection = new SimpleReflection('AnyOldTypeHintedClass'); $function = $reflection->getSignature('aMethod'); if (version_compare(phpversion(), '5.0.2', '<=')) { $this->assertEqual('function amethod(AnyOldInterface $argument)', $function); } else { $this->assertEqual('function aMethod(AnyOldInterface $argument)', $function); } } function testIssetFunctionSignature() { $reflection = new SimpleReflection('AnyOldOverloadedClass'); $function = $reflection->getSignature('__isset'); if (version_compare(phpversion(), '5.1.0', '>=')) { $this->assertEqual('function __isset($key)', $function); } else { $this->assertEqual('function __isset()', $function); } } function testUnsetFunctionSignature() { $reflection = new SimpleReflection('AnyOldOverloadedClass'); $function = $reflection->getSignature('__unset'); if (version_compare(phpversion(), '5.1.0', '>=')) { $this->assertEqual('function __unset($key)', $function); } else { $this->assertEqual('function __unset()', $function); } } function testProperlyReflectsTheFinalInterfaceWhenObjectImplementsAnExtendedInterface() { $reflection = new SimpleReflection('AnyDescendentImplementation'); $interfaces = $reflection->getInterfaces(); $this->assertEqual(1, count($interfaces)); $this->assertEqual('AnyDescendentInterface', array_shift($interfaces)); } function testCreatingSignatureForAbstractMethod() { $reflection = new SimpleReflection('AnotherOldAbstractClass'); $this->assertEqual($reflection->getSignature('aMethod'), 'function aMethod(AnyOldInterface $argument)'); } function testCanProperlyGenerateStaticMethodSignatures() { $reflection = new SimpleReflection('AnyOldClassWithStaticMethods'); $this->assertEqual('static function aStatic()', $reflection->getSignature('aStatic')); $this->assertEqual( 'static function aStaticWithParameters($arg1, $arg2)', $reflection->getSignature('aStaticWithParameters') ); }}class TestOfReflectionWithTypeHints extends UnitTestCase { function skip() { $this->skipIf(version_compare(phpversion(), '5.1.0', '<'), 'Reflection with type hints only tested for PHP 5.1.0 and above'); } function testParameterCreationForTypeHintingWithArray() { eval('interface AnyOldArrayTypeHintedInterface { function amethod(array $argument); } class AnyOldArrayTypeHintedClass implements AnyOldArrayTypeHintedInterface { function amethod(array $argument) {} }'); $reflection = new SimpleReflection('AnyOldArrayTypeHintedClass'); $function = $reflection->getSignature('amethod'); $this->assertEqual('function amethod(array $argument)', $function); }}class TestOfAbstractsWithAbstractMethods extends UnitTestCase { function testCanProperlyGenerateAbstractMethods() { $reflection = new SimpleReflection('AnyOldAbstractClassWithAbstractMethods'); $this->assertEqual( 'function anAbstract()', $reflection->getSignature('anAbstract') ); $this->assertEqual( 'function anAbstractWithParameter($foo)', $reflection->getSignature('anAbstractWithParameter') ); $this->assertEqual( 'function anAbstractWithMultipleParameters($foo, $bar)', $reflection->getSignature('anAbstractWithMultipleParameters') ); }}?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -