wiki.techinc.nl/tests/phpunit/includes/libs/http/HttpAcceptNegotiatorTest.php
Timo Tijhof bee9f4db96 Remove various redundant '@license' tags in file headers
Redundant given this is the project-wide license already,
especially in file headers that already include the GPL license
header.

This and other minor fixups based on feedback from Ie0cea0ef5027c7e5.

* Add @file where missing.
* Move @ingroup and @deprecated from file to class doc where needed.

Change-Id: I7067abb7abee1f0c238cb2536e16192e946d8daa
2018-01-12 18:15:11 +00:00

150 lines
4.4 KiB
PHP

<?php
use Wikimedia\Http\HttpAcceptNegotiator;
/**
* @covers Wikimedia\Http\HttpAcceptNegotiator
*
* @author Daniel Kinzler
*/
class HttpAcceptNegotiatorTest extends \PHPUnit_Framework_TestCase {
public function provideGetFirstSupportedValue() {
return [
[ // #0: empty
[], // supported
[], // accepted
null, // default
null, // expected
],
[ // #1: simple
[ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
[ 'text/xzy', 'text/bar' ], // accepted
null, // default
'text/BAR', // expected
],
[ // #2: default
[ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
[ 'text/xzy', 'text/xoo' ], // accepted
'X', // default
'X', // expected
],
[ // #3: preference
[ 'text/foo', 'text/bar', 'application/zuul' ], // supported
[ 'text/xoo', 'text/BAR', 'text/foo' ], // accepted
null, // default
'text/bar', // expected
],
[ // #4: * wildcard
[ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
[ 'text/xoo', '*' ], // accepted
null, // default
'text/foo', // expected
],
[ // #5: */* wildcard
[ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
[ 'text/xoo', '*/*' ], // accepted
null, // default
'text/foo', // expected
],
[ // #6: text/* wildcard
[ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
[ 'application/*', 'text/foo' ], // accepted
null, // default
'application/zuul', // expected
],
];
}
/**
* @dataProvider provideGetFirstSupportedValue
*/
public function testGetFirstSupportedValue( $supported, $accepted, $default, $expected ) {
$negotiator = new HttpAcceptNegotiator( $supported );
$actual = $negotiator->getFirstSupportedValue( $accepted, $default );
$this->assertEquals( $expected, $actual );
}
public function provideGetBestSupportedKey() {
return [
[ // #0: empty
[], // supported
[], // accepted
null, // default
null, // expected
],
[ // #1: simple
[ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
[ 'text/xzy' => 1, 'text/bar' => 0.5 ], // accepted
null, // default
'text/BAR', // expected
],
[ // #2: default
[ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
[ 'text/xzy' => 1, 'text/xoo' => 0.5 ], // accepted
'X', // default
'X', // expected
],
[ // #3: weighted
[ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
[ 'text/foo' => 0.3, 'text/BAR' => 0.8, 'application/zuul' => 0.5 ], // accepted
null, // default
'text/BAR', // expected
],
[ // #4: zero weight
[ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
[ 'text/foo' => 0, 'text/xoo' => 1 ], // accepted
null, // default
null, // expected
],
[ // #5: * wildcard
[ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
[ 'text/xoo' => 0.5, '*' => 0.1 ], // accepted
null, // default
'text/foo', // expected
],
[ // #6: */* wildcard
[ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
[ 'text/xoo' => 0.5, '*/*' => 0.1 ], // accepted
null, // default
'text/foo', // expected
],
[ // #7: text/* wildcard
[ 'text/foo', 'text/BAR', 'application/zuul' ], // supported
[ 'text/foo' => 0.3, 'application/*' => 0.8 ], // accepted
null, // default
'application/zuul', // expected
],
[ // #8: Test specific format preferred over wildcard (T133314)
[ 'application/rdf+xml', 'text/json', 'text/html' ], // supported
[ '*/*' => 1, 'text/html' => 1 ], // accepted
null, // default
'text/html', // expected
],
[ // #9: Test specific format preferred over range (T133314)
[ 'application/rdf+xml', 'text/json', 'text/html' ], // supported
[ 'text/*' => 1, 'text/html' => 1 ], // accepted
null, // default
'text/html', // expected
],
[ // #10: Test range preferred over wildcard (T133314)
[ 'application/rdf+xml', 'text/html' ], // supported
[ '*/*' => 1, 'text/*' => 1 ], // accepted
null, // default
'text/html', // expected
],
];
}
/**
* @dataProvider provideGetBestSupportedKey
*/
public function testGetBestSupportedKey( $supported, $accepted, $default, $expected ) {
$negotiator = new HttpAcceptNegotiator( $supported );
$actual = $negotiator->getBestSupportedKey( $accepted, $default );
$this->assertEquals( $expected, $actual );
}
}