diff options
Diffstat (limited to 'tests/phpunit/includes/utils')
-rw-r--r-- | tests/phpunit/includes/utils/AvroValidatorTest.php | 96 | ||||
-rw-r--r-- | tests/phpunit/includes/utils/BatchRowUpdateTest.php | 243 | ||||
-rw-r--r-- | tests/phpunit/includes/utils/IPTest.php | 306 | ||||
-rw-r--r-- | tests/phpunit/includes/utils/MWFunctionTest.php | 34 | ||||
-rw-r--r-- | tests/phpunit/includes/utils/UIDGeneratorTest.php | 10 |
5 files changed, 542 insertions, 147 deletions
diff --git a/tests/phpunit/includes/utils/AvroValidatorTest.php b/tests/phpunit/includes/utils/AvroValidatorTest.php new file mode 100644 index 00000000..52c242c1 --- /dev/null +++ b/tests/phpunit/includes/utils/AvroValidatorTest.php @@ -0,0 +1,96 @@ +<?php +/** + * Tests for IP validity functions. + * + * Ported from /t/inc/IP.t by avar. + * + * @group IP + * @todo Test methods in this call should be split into a method and a + * dataprovider. + */ + +class AvroValidatorTest extends PHPUnit_Framework_TestCase { + public function setUp() { + if ( !class_exists( 'AvroSchema' ) ) { + $this->markTestSkipped( 'Avro is required to run the AvroValidatorTest' ); + } + parent::setUp(); + } + + public function getErrorsProvider() { + $stringSchema = AvroSchema::parse( json_encode( array( 'type' => 'string' ) ) ); + $recordSchema = AvroSchema::parse( json_encode( array( + 'type' => 'record', + 'name' => 'ut', + 'fields' => array( + array( 'name' => 'id', 'type' => 'int', 'required' => true ), + ), + ) ) ); + $enumSchema = AvroSchema::parse( json_encode( array( + 'type' => 'record', + 'name' => 'ut', + 'fields' => array( + array( 'name' => 'count', 'type' => array( 'int', 'null' ) ), + ), + ) ) ); + + return array( + array( + 'No errors with a simple string serialization', + $stringSchema, 'foobar', array(), + ), + + array( + 'Cannot serialize integer into string', + $stringSchema, 5, 'Expected string, but recieved integer', + ), + + array( + 'Cannot serialize array into string', + $stringSchema, array(), 'Expected string, but recieved array', + ), + + array( + 'allows and ignores extra fields', + $recordSchema, array( 'id' => 4, 'foo' => 'bar' ), array(), + ), + + array( + 'detects missing fields', + $recordSchema, array(), array( 'id' => 'Missing expected field' ), + ), + + array( + 'handles first element in enum', + $enumSchema, array( 'count' => 4 ), array(), + ), + + array( + 'handles second element in enum', + $enumSchema, array( 'count' => null ), array(), + ), + + array( + 'rejects element not in union', + $enumSchema, array( 'count' => 'invalid' ), array( 'count' => array( + 'Expected any one of these to be true', + array( + 'Expected integer, but recieved string', + 'Expected null, but recieved string', + ) + ) ) + ), + ); + } + + /** + * @dataProvider getErrorsProvider + */ + public function testGetErrors( $message, $schema, $datum, $expected ) { + $this->assertEquals( + $expected, + AvroValidator::getErrors( $schema, $datum ), + $message + ); + } +} diff --git a/tests/phpunit/includes/utils/BatchRowUpdateTest.php b/tests/phpunit/includes/utils/BatchRowUpdateTest.php new file mode 100644 index 00000000..a2b35f39 --- /dev/null +++ b/tests/phpunit/includes/utils/BatchRowUpdateTest.php @@ -0,0 +1,243 @@ +<?php + +/** + * Tests for BatchRowUpdate and its components + * + * @group db + */ +class BatchRowUpdateTest extends MediaWikiTestCase { + + public function testWriterBasicFunctionality() { + $db = $this->mockDb(); + $writer = new BatchRowWriter( $db, 'echo_event' ); + + $updates = array( + self::mockUpdate( array( 'something' => 'changed' ) ), + self::mockUpdate( array( 'otherthing' => 'changed' ) ), + self::mockUpdate( array( 'and' => 'something', 'else' => 'changed' ) ), + ); + + $db->expects( $this->exactly( count( $updates ) ) ) + ->method( 'update' ); + + $writer->write( $updates ); + } + + static protected function mockUpdate( array $changes ) { + static $i = 0; + return array( + 'primaryKey' => array( 'event_id' => $i++ ), + 'changes' => $changes, + ); + } + + public function testReaderBasicIterate() { + $db = $this->mockDb(); + $batchSize = 2; + $reader = new BatchRowIterator( $db, 'some_table', 'id_field', $batchSize ); + + $response = $this->genSelectResult( $batchSize, /*numRows*/ 5, function() { + static $i = 0; + return array( 'id_field' => ++$i ); + } ); + $db->expects( $this->exactly( count( $response ) ) ) + ->method( 'select' ) + ->will( $this->consecutivelyReturnFromSelect( $response ) ); + + $pos = 0; + foreach ( $reader as $rows ) { + $this->assertEquals( $response[$pos], $rows, "Testing row in position $pos" ); + $pos++; + } + // -1 is because the final array() marks the end and isnt included + $this->assertEquals( count( $response ) - 1, $pos ); + } + + static public function provider_readerGetPrimaryKey() { + $row = array( + 'id_field' => 42, + 'some_col' => 'dvorak', + 'other_col' => 'samurai', + ); + return array( + + array( + 'Must return single column pk when requested', + array( 'id_field' => 42 ), + $row + ), + + array( + 'Must return multiple column pks when requested', + array( 'id_field' => 42, 'other_col' => 'samurai' ), + $row + ), + + ); + } + + /** + * @dataProvider provider_readerGetPrimaryKey + */ + public function testReaderGetPrimaryKey( $message, array $expected, array $row ) { + $reader = new BatchRowIterator( $this->mockDb(), 'some_table', array_keys( $expected ), 8675309 ); + $this->assertEquals( $expected, $reader->extractPrimaryKeys( (object) $row ), $message ); + } + + static public function provider_readerSetFetchColumns() { + return array( + + array( + 'Must merge primary keys into select conditions', + // Expected column select + array( 'foo', 'bar' ), + // primary keys + array( 'foo' ), + // setFetchColumn + array( 'bar' ) + ), + + array( + 'Must not merge primary keys into the all columns selector', + // Expected column select + array( '*' ), + // primary keys + array( 'foo' ), + // setFetchColumn + array( '*' ), + ), + + array( + 'Must not duplicate primary keys into column selector', + // Expected column select. + // TODO: figure out how to only assert the array_values portion and not the keys + array( 0 => 'foo', 1 => 'bar', 3 => 'baz' ), + // primary keys + array( 'foo', 'bar', ), + // setFetchColumn + array( 'bar', 'baz' ), + ), + ); + } + + /** + * @dataProvider provider_readerSetFetchColumns + */ + public function testReaderSetFetchColumns( $message, array $columns, array $primaryKeys, array $fetchColumns ) { + $db = $this->mockDb(); + $db->expects( $this->once() ) + ->method( 'select' ) + ->with( 'some_table', $columns ) // only testing second parameter of DatabaseBase::select + ->will( $this->returnValue( new ArrayIterator( array() ) ) ); + + $reader = new BatchRowIterator( $db, 'some_table', $primaryKeys, 22 ); + $reader->setFetchColumns( $fetchColumns ); + // triggers first database select + $reader->rewind(); + } + + static public function provider_readerSelectConditions() { + return array( + + array( + "With single primary key must generate id > 'value'", + // Expected second iteration + array( "( id_field > '3' )" ), + // Primary key(s) + 'id_field', + ), + + array( + 'With multiple primary keys the first conditions must use >= and the final condition must use >', + // Expected second iteration + array( "( id_field = '3' AND foo > '103' ) OR ( id_field > '3' )" ), + // Primary key(s) + array( 'id_field', 'foo' ), + ), + + ); + } + + /** + * Slightly hackish to use reflection, but asserting different parameters + * to consecutive calls of DatabaseBase::select in phpunit is error prone + * + * @dataProvider provider_readerSelectConditions + */ + public function testReaderSelectConditionsMultiplePrimaryKeys( $message, $expectedSecondIteration, $primaryKeys, $batchSize = 3 ) { + $results = $this->genSelectResult( $batchSize, $batchSize * 3, function() { + static $i = 0, $j = 100, $k = 1000; + return array( 'id_field' => ++$i, 'foo' => ++$j, 'bar' => ++$k ); + } ); + $db = $this->mockDbConsecutiveSelect( $results ); + + $conditions = array( 'bar' => 42, 'baz' => 'hai' ); + $reader = new BatchRowIterator( $db, 'some_table', $primaryKeys, $batchSize ); + $reader->addConditions( $conditions ); + + $buildConditions = new ReflectionMethod( $reader, 'buildConditions' ); + $buildConditions->setAccessible( true ); + + // On first iteration only the passed conditions must be used + $this->assertEquals( $conditions, $buildConditions->invoke( $reader ), + 'First iteration must return only the conditions passed in addConditions' ); + $reader->rewind(); + + // Second iteration must use the maximum primary key of last set + $this->assertEquals( + $conditions + $expectedSecondIteration, + $buildConditions->invoke( $reader ), + $message + ); + } + + protected function mockDbConsecutiveSelect( array $retvals ) { + $db = $this->mockDb(); + $db->expects( $this->any() ) + ->method( 'select' ) + ->will( $this->consecutivelyReturnFromSelect( $retvals ) ); + $db->expects( $this->any() ) + ->method( 'addQuotes' ) + ->will( $this->returnCallback( function( $value ) { + return "'$value'"; // not real quoting: doesn't matter in test + } ) ); + + return $db; + } + + protected function consecutivelyReturnFromSelect( array $results ) { + $retvals = array(); + foreach ( $results as $rows ) { + // The DatabaseBase::select method returns iterators, so we do too. + $retvals[] = $this->returnValue( new ArrayIterator( $rows ) ); + } + + return call_user_func_array( array( $this, 'onConsecutiveCalls' ), $retvals ); + } + + + protected function genSelectResult( $batchSize, $numRows, $rowGenerator ) { + $res = array(); + for ( $i = 0; $i < $numRows; $i += $batchSize ) { + $rows = array(); + for ( $j = 0; $j < $batchSize && $i + $j < $numRows; $j++ ) { + $rows [] = (object) call_user_func( $rowGenerator ); + } + $res[] = $rows; + } + $res[] = array(); // termination condition requires empty result for last row + return $res; + } + + protected function mockDb() { + // Cant mock from DatabaseType or DatabaseBase, they dont + // have the full gamut of methods + $databaseMysql = $this->getMockBuilder( 'DatabaseMysql' ) + ->disableOriginalConstructor() + ->getMock(); + $databaseMysql->expects( $this->any() ) + ->method( 'isOpen' ) + ->will( $this->returnValue( true ) ); + return $databaseMysql; + } +} diff --git a/tests/phpunit/includes/utils/IPTest.php b/tests/phpunit/includes/utils/IPTest.php index 09c1587d..34aff796 100644 --- a/tests/phpunit/includes/utils/IPTest.php +++ b/tests/phpunit/includes/utils/IPTest.php @@ -11,29 +11,37 @@ class IPTest extends PHPUnit_Framework_TestCase { /** - * not sure it should be tested with boolean false. hashar 20100924 * @covers IP::isIPAddress + * @dataProvider provideInvalidIPs */ - public function testisIPAddress() { - $this->assertFalse( IP::isIPAddress( false ), 'Boolean false is not an IP' ); - $this->assertFalse( IP::isIPAddress( true ), 'Boolean true is not an IP' ); - $this->assertFalse( IP::isIPAddress( "" ), 'Empty string is not an IP' ); - $this->assertFalse( IP::isIPAddress( 'abc' ), 'Garbage IP string' ); - $this->assertFalse( IP::isIPAddress( ':' ), 'Single ":" is not an IP' ); - $this->assertFalse( IP::isIPAddress( '2001:0DB8::A:1::1' ), 'IPv6 with a double :: occurrence' ); - $this->assertFalse( - IP::isIPAddress( '2001:0DB8::A:1::' ), - 'IPv6 with a double :: occurrence, last at end' - ); - $this->assertFalse( - IP::isIPAddress( '::2001:0DB8::5:1' ), - 'IPv6 with a double :: occurrence, firt at beginning' + public function isNotIPAddress( $val, $desc ) { + $this->assertFalse( IP::isIPAddress( $val ), $desc ); + } + + /** + * Provide a list of things that aren't IP addresses + */ + public function provideInvalidIPs() { + return array( + array( false, 'Boolean false is not an IP' ), + array( true, 'Boolean true is not an IP' ), + array( '', 'Empty string is not an IP' ), + array( 'abc', 'Garbage IP string' ), + array( ':', 'Single ":" is not an IP' ), + array( '2001:0DB8::A:1::1', 'IPv6 with a double :: occurrence' ), + array( '2001:0DB8::A:1::', 'IPv6 with a double :: occurrence, last at end' ), + array( '::2001:0DB8::5:1', 'IPv6 with a double :: occurrence, firt at beginning' ), + array( '124.24.52', 'IPv4 not enough quads' ), + array( '24.324.52.13', 'IPv4 out of range' ), + array( '.24.52.13', 'IPv4 starts with period' ), + array( 'fc:100:300', 'IPv6 with only 3 words' ), ); - $this->assertFalse( IP::isIPAddress( '124.24.52' ), 'IPv4 not enough quads' ); - $this->assertFalse( IP::isIPAddress( '24.324.52.13' ), 'IPv4 out of range' ); - $this->assertFalse( IP::isIPAddress( '.24.52.13' ), 'IPv4 starts with period' ); - $this->assertFalse( IP::isIPAddress( 'fc:100:300' ), 'IPv6 with only 3 words' ); + } + /** + * @covers IP::isIPAddress + */ + public function testisIPAddress() { $this->assertTrue( IP::isIPAddress( '::' ), 'RFC 4291 IPv6 Unspecified Address' ); $this->assertTrue( IP::isIPAddress( '::1' ), 'RFC 4291 IPv6 Loopback Address' ); $this->assertTrue( IP::isIPAddress( '74.24.52.13/20', 'IPv4 range' ) ); @@ -107,20 +115,42 @@ class IPTest extends PHPUnit_Framework_TestCase { /** * @covers IP::isIPv4 + * @dataProvider provideInvalidIPv4Addresses */ - public function testisIPv4() { - $this->assertFalse( IP::isIPv4( false ), 'Boolean false is not an IP' ); - $this->assertFalse( IP::isIPv4( true ), 'Boolean true is not an IP' ); - $this->assertFalse( IP::isIPv4( "" ), 'Empty string is not an IP' ); - $this->assertFalse( IP::isIPv4( 'abc' ) ); - $this->assertFalse( IP::isIPv4( ':' ) ); - $this->assertFalse( IP::isIPv4( '124.24.52' ), 'IPv4 not enough quads' ); - $this->assertFalse( IP::isIPv4( '24.324.52.13' ), 'IPv4 out of range' ); - $this->assertFalse( IP::isIPv4( '.24.52.13' ), 'IPv4 starts with period' ); + public function testisNotIPv4( $bogusIP, $desc ) { + $this->assertFalse( IP::isIPv4( $bogusIP ), $desc ); + } - $this->assertTrue( IP::isIPv4( '124.24.52.13' ) ); - $this->assertTrue( IP::isIPv4( '1.24.52.13' ) ); - $this->assertTrue( IP::isIPv4( '74.24.52.13/20', 'IPv4 range' ) ); + public function provideInvalidIPv4Addresses() { + return array( + array( false, 'Boolean false is not an IP' ), + array( true, 'Boolean true is not an IP' ), + array( '', 'Empty string is not an IP' ), + array( 'abc', 'Letters are not an IP' ), + array( ':', 'A colon is not an IP' ), + array( '124.24.52', 'IPv4 not enough quads' ), + array( '24.324.52.13', 'IPv4 out of range' ), + array( '.24.52.13', 'IPv4 starts with period' ), + ); + } + + /** + * @covers IP::isIPv4 + * @dataProvider provideValidIPv4Address + */ + public function testIsIPv4( $ip, $desc ) { + $this->assertTrue( IP::isIPv4( $ip ), $desc ); + } + + /** + * Provide some IPv4 addresses and ranges + */ + public function provideValidIPv4Address() { + return array( + array( '124.24.52.13', 'Valid IPv4 address' ), + array( '1.24.52.13', 'Another valid IPv4 address' ), + array( '74.24.52.13/20', 'An IPv4 range' ), + ); } /** @@ -224,58 +254,87 @@ class IPTest extends PHPUnit_Framework_TestCase { } /** - * @covers IP::isValidBlock + * Provide some valid IP blocks */ - public function testValidBlocks() { - $valid = array( - '116.17.184.5/32', - '0.17.184.5/30', - '16.17.184.1/24', - '30.242.52.14/1', - '10.232.52.13/8', - '30.242.52.14/0', - '::e:f:2001/96', - '::c:f:2001/128', - '::10:f:2001/70', - '::fe:f:2001/1', - '::6d:f:2001/8', - '::fe:f:2001/0', + public function provideValidBlocks() { + return array( + array( '116.17.184.5/32' ), + array( '0.17.184.5/30' ), + array( '16.17.184.1/24' ), + array( '30.242.52.14/1' ), + array( '10.232.52.13/8' ), + array( '30.242.52.14/0' ), + array( '::e:f:2001/96' ), + array( '::c:f:2001/128' ), + array( '::10:f:2001/70' ), + array( '::fe:f:2001/1' ), + array( '::6d:f:2001/8' ), + array( '::fe:f:2001/0' ), ); - foreach ( $valid as $i ) { - $this->assertTrue( IP::isValidBlock( $i ), "$i is a valid IP block" ); - } } /** * @covers IP::isValidBlock + * @dataProvider provideValidBlocks */ - public function testInvalidBlocks() { - $invalid = array( - '116.17.184.5/33', - '0.17.184.5/130', - '16.17.184.1/-1', - '10.232.52.13/*', - '7.232.52.13/ab', - '11.232.52.13/', - '::e:f:2001/129', - '::c:f:2001/228', - '::10:f:2001/-1', - '::6d:f:2001/*', - '::86:f:2001/ab', - '::23:f:2001/', + public function testValidBlocks( $block ) { + $this->assertTrue( IP::isValidBlock( $block ), "$block is a valid IP block" ); + } + + /** + * @covers IP::isValidBlock + * @dataProvider provideInvalidBlocks + */ + public function testInvalidBlocks( $invalid ) { + $this->assertFalse( IP::isValidBlock( $invalid ), "$invalid is not a valid IP block" ); + } + + public function provideInvalidBlocks() { + return array( + array( '116.17.184.5/33' ), + array( '0.17.184.5/130' ), + array( '16.17.184.1/-1' ), + array( '10.232.52.13/*' ), + array( '7.232.52.13/ab' ), + array( '11.232.52.13/' ), + array( '::e:f:2001/129' ), + array( '::c:f:2001/228' ), + array( '::10:f:2001/-1' ), + array( '::6d:f:2001/*' ), + array( '::86:f:2001/ab' ), + array( '::23:f:2001/' ), ); - foreach ( $invalid as $i ) { - $this->assertFalse( IP::isValidBlock( $i ), "$i is not a valid IP block" ); - } } /** - * Improve IP::sanitizeIP() code coverage - * @todo Most probably incomplete + * @covers IP::sanitizeIP + * @dataProvider provideSanitizeIP + */ + public function testSanitizeIP( $expected, $input ) { + $result = IP::sanitizeIP( $input ); + $this->assertEquals( $expected, $result ); + } + + /** + * Provider for IP::testSanitizeIP() */ - public function testSanitizeIP() { - $this->assertNull( IP::sanitizeIP( '' ) ); - $this->assertNull( IP::sanitizeIP( ' ' ) ); + public static function provideSanitizeIP() { + return array( + array( '0.0.0.0', '0.0.0.0' ), + array( '0.0.0.0', '00.00.00.00' ), + array( '0.0.0.0', '000.000.000.000' ), + array( '141.0.11.253', '141.000.011.253' ), + array( '1.2.4.5', '1.2.4.5' ), + array( '1.2.4.5', '01.02.04.05' ), + array( '1.2.4.5', '001.002.004.005' ), + array( '10.0.0.1', '010.0.000.1' ), + array( '80.72.250.4', '080.072.250.04' ), + array( 'Foo.1000.00', 'Foo.1000.00'), + array( 'Bar.01', 'Bar.01'), + array( 'Bar.010', 'Bar.010'), + array( null, ''), + array( null, ' ') + ); } /** @@ -299,6 +358,7 @@ class IPTest extends PHPUnit_Framework_TestCase { array( '80000000', '128.0.0.0' ), array( 'DEADCAFE', '222.173.202.254' ), array( 'FFFFFFFF', '255.255.255.255' ), + array( '8D000BFD', '141.000.11.253' ), array( false, 'IN.VA.LI.D' ), array( 'v6-00000000000000000000000000000001', '::1' ), array( 'v6-20010DB885A3000000008A2E03707334', '2001:0db8:85a3:0000:0000:8a2e:0370:7334' ), @@ -310,16 +370,31 @@ class IPTest extends PHPUnit_Framework_TestCase { /** * @covers IP::isPublic + * @dataProvider provideIsPublic */ - public function testPrivateIPs() { - $private = array( 'fc00::3', 'fc00::ff', '::1', '10.0.0.1', '172.16.0.1', '192.168.0.1' ); - foreach ( $private as $p ) { - $this->assertFalse( IP::isPublic( $p ), "$p is not a public IP address" ); - } - $public = array( '2001:5c0:1000:a::133', 'fc::3', '00FC::' ); - foreach ( $public as $p ) { - $this->assertTrue( IP::isPublic( $p ), "$p is a public IP address" ); - } + public function testIsPublic( $expected, $input ) { + $result = IP::isPublic( $input ); + $this->assertEquals( $expected, $result ); + } + + /** + * Provider for IP::testIsPublic() + */ + public static function provideIsPublic() { + return array( + array( false, 'fc00::3' ), # RFC 4193 (local) + array( false, 'fc00::ff' ), # RFC 4193 (local) + array( false, '127.1.2.3' ), # loopback + array( false, '::1' ), # loopback + array( false, 'fe80::1' ), # link-local + array( false, '169.254.1.1' ), # link-local + array( false, '10.0.0.1' ), # RFC 1918 (private) + array( false, '172.16.0.1' ), # RFC 1918 (private) + array( false, '192.168.0.1' ), # RFC 1918 (private) + array( true, '2001:5c0:1000:a::133' ), # public + array( true, 'fc::3' ), # public + array( true, '00FC::' ) # public + ); } // Private wrapper used to test CIDR Parsing. @@ -336,40 +411,55 @@ class IPTest extends PHPUnit_Framework_TestCase { /** * @covers IP::hexToQuad + * @dataProvider provideIPsAndHexes */ - public function testHexToQuad() { - $this->assertEquals( '0.0.0.1', IP::hexToQuad( '00000001' ) ); - $this->assertEquals( '255.0.0.0', IP::hexToQuad( 'FF000000' ) ); - $this->assertEquals( '255.255.255.255', IP::hexToQuad( 'FFFFFFFF' ) ); - $this->assertEquals( '10.188.222.255', IP::hexToQuad( '0ABCDEFF' ) ); - // hex not left-padded... - $this->assertEquals( '0.0.0.0', IP::hexToQuad( '0' ) ); - $this->assertEquals( '0.0.0.1', IP::hexToQuad( '1' ) ); - $this->assertEquals( '0.0.0.255', IP::hexToQuad( 'FF' ) ); - $this->assertEquals( '0.0.255.0', IP::hexToQuad( 'FF00' ) ); + public function testHexToQuad( $ip, $hex ) { + $this->assertEquals( $ip, IP::hexToQuad( $hex ) ); + } + + /** + * Provide some IP addresses and their equivalent hex representations + */ + public function provideIPsandHexes() { + return array( + array( '0.0.0.1', '00000001' ), + array( '255.0.0.0', 'FF000000' ), + array( '255.255.255.255', 'FFFFFFFF' ), + array( '10.188.222.255', '0ABCDEFF' ), + // hex not left-padded... + array( '0.0.0.0', '0' ), + array( '0.0.0.1', '1' ), + array( '0.0.0.255', 'FF' ), + array( '0.0.255.0', 'FF00' ), + ); } /** * @covers IP::hexToOctet + * @dataProvider provideOctetsAndHexes + */ + public function testHexToOctet( $octet, $hex ) { + $this->assertEquals( $octet, IP::hexToOctet( $hex ) ); + } + + /** + * Provide some hex and octet representations of the same IPs */ - public function testHexToOctet() { - $this->assertEquals( '0:0:0:0:0:0:0:1', - IP::hexToOctet( '00000000000000000000000000000001' ) ); - $this->assertEquals( '0:0:0:0:0:0:FF:3', - IP::hexToOctet( '00000000000000000000000000FF0003' ) ); - $this->assertEquals( '0:0:0:0:0:0:FF00:6', - IP::hexToOctet( '000000000000000000000000FF000006' ) ); - $this->assertEquals( '0:0:0:0:0:0:FCCF:FAFF', - IP::hexToOctet( '000000000000000000000000FCCFFAFF' ) ); - $this->assertEquals( 'FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF', - IP::hexToOctet( 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' ) ); - // hex not left-padded... - $this->assertEquals( '0:0:0:0:0:0:0:0', IP::hexToOctet( '0' ) ); - $this->assertEquals( '0:0:0:0:0:0:0:1', IP::hexToOctet( '1' ) ); - $this->assertEquals( '0:0:0:0:0:0:0:FF', IP::hexToOctet( 'FF' ) ); - $this->assertEquals( '0:0:0:0:0:0:0:FFD0', IP::hexToOctet( 'FFD0' ) ); - $this->assertEquals( '0:0:0:0:0:0:FA00:0', IP::hexToOctet( 'FA000000' ) ); - $this->assertEquals( '0:0:0:0:0:0:FCCF:FAFF', IP::hexToOctet( 'FCCFFAFF' ) ); + public function provideOctetsAndHexes() { + return array( + array( '0:0:0:0:0:0:0:1', '00000000000000000000000000000001' ), + array( '0:0:0:0:0:0:FF:3', '00000000000000000000000000FF0003' ), + array( '0:0:0:0:0:0:FF00:6', '000000000000000000000000FF000006' ), + array( '0:0:0:0:0:0:FCCF:FAFF', '000000000000000000000000FCCFFAFF' ), + array( 'FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF', 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' ), + // hex not left-padded... + array( '0:0:0:0:0:0:0:0', '0' ), + array( '0:0:0:0:0:0:0:1', '1' ), + array( '0:0:0:0:0:0:0:FF', 'FF' ), + array( '0:0:0:0:0:0:0:FFD0', 'FFD0' ), + array( '0:0:0:0:0:0:FA00:0', 'FA000000' ), + array( '0:0:0:0:0:0:FCCF:FAFF', 'FCCFFAFF' ), + ); } /** diff --git a/tests/phpunit/includes/utils/MWFunctionTest.php b/tests/phpunit/includes/utils/MWFunctionTest.php deleted file mode 100644 index f4d17999..00000000 --- a/tests/phpunit/includes/utils/MWFunctionTest.php +++ /dev/null @@ -1,34 +0,0 @@ -<?php - -/** - * @covers MWFunction - */ -class MWFunctionTest extends MediaWikiTestCase { - public function testNewObjFunction() { - $arg1 = 'Foo'; - $arg2 = 'Bar'; - $arg3 = array( 'Baz' ); - $arg4 = new ExampleObject; - - $args = array( $arg1, $arg2, $arg3, $arg4 ); - - $newObject = new MWBlankClass( $arg1, $arg2, $arg3, $arg4 ); - $this->hideDeprecated( 'MWFunction::newObj' ); - $this->assertEquals( - MWFunction::newObj( 'MWBlankClass', $args )->args, - $newObject->args - ); - } -} - -class MWBlankClass { - - public $args = array(); - - function __construct( $arg1, $arg2, $arg3, $arg4 ) { - $this->args = array( $arg1, $arg2, $arg3, $arg4 ); - } -} - -class ExampleObject { -} diff --git a/tests/phpunit/includes/utils/UIDGeneratorTest.php b/tests/phpunit/includes/utils/UIDGeneratorTest.php index 0e11ccad..fedcc762 100644 --- a/tests/phpunit/includes/utils/UIDGeneratorTest.php +++ b/tests/phpunit/includes/utils/UIDGeneratorTest.php @@ -1,6 +1,6 @@ <?php -class UIDGeneratorTest extends MediaWikiTestCase { +class UIDGeneratorTest extends PHPUnit_Framework_TestCase { protected function tearDown() { // Bug: 44850 @@ -28,7 +28,7 @@ class UIDGeneratorTest extends MediaWikiTestCase { $lastId = array_shift( $ids ); - $this->assertArrayEquals( array_unique( $ids ), $ids, "All generated IDs are unique." ); + $this->assertSame( array_unique( $ids ), $ids, "All generated IDs are unique." ); foreach ( $ids as $id ) { $id_bin = wfBaseConvert( $id, 10, 2 ); @@ -105,8 +105,8 @@ class UIDGeneratorTest extends MediaWikiTestCase { $id1 = UIDGenerator::newSequentialPerNodeID( 'test', 32 ); $id2 = UIDGenerator::newSequentialPerNodeID( 'test', 32 ); - $this->assertType( 'float', $id1, "ID returned as float" ); - $this->assertType( 'float', $id2, "ID returned as float" ); + $this->assertInternalType( 'float', $id1, "ID returned as float" ); + $this->assertInternalType( 'float', $id2, "ID returned as float" ); $this->assertGreaterThan( 0, $id1, "ID greater than 1" ); $this->assertGreaterThan( $id1, $id2, "IDs increasing in value" ); } @@ -118,7 +118,7 @@ class UIDGeneratorTest extends MediaWikiTestCase { $ids = UIDGenerator::newSequentialPerNodeIDs( 'test', 32, 5 ); $lastId = null; foreach ( $ids as $id ) { - $this->assertType( 'float', $id, "ID returned as float" ); + $this->assertInternalType( 'float', $id, "ID returned as float" ); $this->assertGreaterThan( 0, $id, "ID greater than 1" ); if ( $lastId ) { $this->assertGreaterThan( $lastId, $id, "IDs increasing in value" ); |