MediaWiki
REL1_20
|
00001 <?php 00002 00030 abstract class GenericArrayObjectTest extends MediaWikiTestCase { 00031 00039 public abstract function elementInstancesProvider(); 00040 00048 public abstract function getInstanceClass(); 00049 00057 public function instanceProvider() { 00058 $instances = array(); 00059 00060 foreach ( $this->elementInstancesProvider() as $elementInstances ) { 00061 $instances[] = $this->getNew( $elementInstances ); 00062 } 00063 00064 return $this->arrayWrap( $instances ); 00065 } 00066 00074 protected function getNew( array $elements = array() ) { 00075 $class = $this->getInstanceClass(); 00076 return new $class( $elements ); 00077 } 00078 00086 public function testConstructor( array $elements ) { 00087 $arrayObject = $this->getNew( $elements ); 00088 00089 $this->assertEquals( count( $elements ), $arrayObject->count() ); 00090 } 00091 00099 public function testIsEmpty( array $elements ) { 00100 $arrayObject = $this->getNew( $elements ); 00101 00102 $this->assertEquals( $elements === array(), $arrayObject->isEmpty() ); 00103 } 00104 00112 public function testUnset( GenericArrayObject $list ) { 00113 if ( !$list->isEmpty() ) { 00114 $offset = $list->getIterator()->key(); 00115 $count = $list->count(); 00116 $list->offsetUnset( $offset ); 00117 $this->assertEquals( $count - 1, $list->count() ); 00118 } 00119 00120 if ( !$list->isEmpty() ) { 00121 $offset = $list->getIterator()->key(); 00122 $count = $list->count(); 00123 unset( $list[$offset] ); 00124 $this->assertEquals( $count - 1, $list->count() ); 00125 } 00126 00127 $exception = null; 00128 try { $list->offsetUnset( 'sdfsedtgsrdysftu' ); } catch ( \Exception $exception ){} 00129 $this->assertInstanceOf( '\Exception', $exception ); 00130 } 00131 00139 public function testAppend( array $elements ) { 00140 $list = $this->getNew(); 00141 00142 $listSize = count( $elements ); 00143 00144 foreach ( $elements as $element ) { 00145 $list->append( $element ); 00146 } 00147 00148 $this->assertEquals( $listSize, $list->count() ); 00149 00150 $list = $this->getNew(); 00151 00152 foreach ( $elements as $element ) { 00153 $list[] = $element; 00154 } 00155 00156 $this->assertEquals( $listSize, $list->count() ); 00157 00158 $this->checkTypeChecks( function( GenericArrayObject $list, $element ) { 00159 $list->append( $element ); 00160 } ); 00161 } 00162 00168 protected function checkTypeChecks( $function ) { 00169 $excption = null; 00170 $list = $this->getNew(); 00171 00172 $elementClass = $list->getObjectType(); 00173 00174 foreach ( array( 42, 'foo', array(), new \stdClass(), 4.2 ) as $element ) { 00175 $validValid = $element instanceof $elementClass; 00176 00177 try{ 00178 call_user_func( $function, $list, $element ); 00179 $valid = true; 00180 } 00181 catch ( InvalidArgumentException $exception ) { 00182 $valid = false; 00183 } 00184 00185 $this->assertEquals( 00186 $validValid, 00187 $valid, 00188 'Object of invalid type got successfully added to a GenericArrayObject' 00189 ); 00190 } 00191 } 00192 00200 public function testOffsetSet( array $elements ) { 00201 if ( $elements === array() ) { 00202 $this->assertTrue( true ); 00203 return; 00204 } 00205 00206 $list = $this->getNew(); 00207 00208 $element = reset( $elements ); 00209 $list->offsetSet( 42, $element ); 00210 $this->assertEquals( $element, $list->offsetGet( 42 ) ); 00211 00212 $list = $this->getNew(); 00213 00214 $element = reset( $elements ); 00215 $list['oHai'] = $element; 00216 $this->assertEquals( $element, $list['oHai'] ); 00217 00218 $list = $this->getNew(); 00219 00220 $element = reset( $elements ); 00221 $list->offsetSet( 9001, $element ); 00222 $this->assertEquals( $element, $list[9001] ); 00223 00224 $list = $this->getNew(); 00225 00226 $element = reset( $elements ); 00227 $list->offsetSet( null, $element ); 00228 $this->assertEquals( $element, $list[0] ); 00229 00230 $list = $this->getNew(); 00231 $offset = 0; 00232 00233 foreach ( $elements as $element ) { 00234 $list->offsetSet( null, $element ); 00235 $this->assertEquals( $element, $list[$offset++] ); 00236 } 00237 00238 $this->assertEquals( count( $elements ), $list->count() ); 00239 00240 $this->checkTypeChecks( function( GenericArrayObject $list, $element ) { 00241 $list->offsetSet( mt_rand(), $element ); 00242 } ); 00243 } 00244 00245 }