1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
<?php
use MediaWiki\Utils\UrlUtils;
/**
* @coversDefaultClass \MediaWiki\Utils\UrlUtils
* @covers ::__construct
*/
class UrlUtilsTest extends MediaWikiUnitTestCase {
public function testConstructError(): void {
$this->expectException( InvalidArgumentException::class );
$this->expectExceptionMessage( 'Unrecognized option "unrecognized"' );
new UrlUtils( [ 'unrecognized' => true ] );
}
/**
* @covers ::expand
* @dataProvider UrlUtilsProviders::provideExpandException
* @param array $options
* @param string|int|null $defaultProto
* @param string $expectedClass Expected class of exception
* @param string $expectedMsg Expected exception message
*/
public function testExpandException(
array $options, $defaultProto, string $expectedClass, string $expectedMsg
): void {
$this->expectException( $expectedClass );
$this->expectExceptionMessage( $expectedMsg );
$urlUtils = new UrlUtils( $options );
$urlUtils->expand( '/', $defaultProto );
}
/**
* @covers ::expand
* @dataProvider UrlUtilsProviders::provideExpand
* @param string $input
* @param array $options
* @param string|int|null $defaultProto
* @param ?string $expected
*/
public function testExpand(
string $input, array $options, $defaultProto, ?string $expected
): void {
$urlUtils = new UrlUtils( $options );
$this->assertSame( $expected, $urlUtils->expand( $input, $defaultProto ) );
}
/**
* @covers ::getServer
* @dataProvider UrlUtilsProviders::provideGetServer
* @param array $options
* @param string|int|null $defaultProto
* @param string $expected
*/
public function testGetServer( array $options, $defaultProto, string $expected ): void {
$urlUtils = new UrlUtils( $options );
$this->assertSame( $expected, $urlUtils->getServer( $defaultProto ) );
}
/**
* @covers ::assemble
* @dataProvider UrlUtilsProviders::provideAssemble
* @param array $bits
* @param string $expected
*/
public function testAssemble( array $bits, string $expected ): void {
$this->assertSame( $expected, UrlUtils::assemble( $bits ) );
}
/**
* @covers ::removeDotSegments
* @dataProvider UrlUtilsProviders::provideRemoveDotSegments
* @param string $input
* @param string $expected
*/
public function testRemoveDotSegments( string $input, string $expected ): void {
$this->assertSame( $expected, UrlUtils::removeDotSegments( $input ) );
}
/**
* @covers ::validProtocols
* @covers ::validAbsoluteProtocols
* @covers ::validProtocolsInternal
* @dataProvider UrlUtilsProviders::provideValidProtocols
* @param string $method 'validProtocols' or 'validAbsoluteProtocols'
* @param array|string $validProtocols Value of option passed to UrlUtils
* @param string $expected
*/
public function testValidProtocols( string $method, $validProtocols, string $expected ): void {
if ( !is_array( $validProtocols ) ) {
$this->expectDeprecationAndContinue(
'/Use of \$wgUrlProtocols that is not an array was deprecated in MediaWiki 1\.39/' );
}
$urlUtils = new UrlUtils( [ UrlUtils::VALID_PROTOCOLS => $validProtocols ] );
$this->assertSame( $expected, $urlUtils->$method() );
}
/**
* @covers ::parse
* @dataProvider UrlUtilsProviders::provideParse
* @param string $url
* @param ?array $expected
*/
public function testParse( string $url, ?array $expected ): void {
$urlUtils = new UrlUtils( [ UrlUtils::VALID_PROTOCOLS => [
'//',
'http://',
'https://',
'file://',
'mailto:',
'news:',
] ] );
$actual = $urlUtils->parse( $url );
if ( $expected ) {
ksort( $expected );
}
if ( $actual ) {
ksort( $actual );
}
$this->assertSame( $expected, $actual );
}
/**
* @covers ::expandIRI
*/
public function testExpandIRI(): void {
$this->assertSame( "https://te.wikibooks.org/wiki/ఉబుంటు_వాడుకరి_మార్గదర్శని",
( new UrlUtils )->expandIRI( "https://te.wikibooks.org/wiki/"
. "%E0%B0%89%E0%B0%AC%E0%B1%81%E0%B0%82%E0%B0%9F%E0%B1%81_"
. "%E0%B0%B5%E0%B0%BE%E0%B0%A1%E0%B1%81%E0%B0%95%E0%B0%B0%E0%B0%BF_"
. "%E0%B0%AE%E0%B0%BE%E0%B0%B0%E0%B1%8D%E0%B0%97%E0%B0%A6%E0%B0%B0"
. "%E0%B1%8D%E0%B0%B6%E0%B0%A8%E0%B0%BF" ) );
}
/**
* @covers ::matchesDomainList
* @dataProvider UrlUtilsProviders::provideMatchesDomainList
* @param string $url
* @param array $domains
* @param bool $expected
*/
public function testMatchesDomainList( string $url, array $domains, bool $expected ): void {
$this->assertSame( $expected, ( new UrlUtils )->matchesDomainList( $url, $domains ) );
}
}
|