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
|
<?php
namespace MediaWiki\Tests\Rest\HeaderParser;
use MediaWiki\Rest\HeaderParser\IfNoneMatch;
use MediaWikiUnitTestCase;
/**
* @covers \MediaWiki\Rest\HeaderParser\IfNoneMatch
*/
class IfNoneMatchTest extends MediaWikiUnitTestCase {
public static function provideParseHeaderList() {
return [
'empty array' => [
[],
[]
],
'star' => [
[ '*' ],
[ [ 'weak' => true, 'contents' => null, 'whole' => '*' ] ]
],
'etag' => [
[ '"x"' ],
[ [ 'weak' => false, 'contents' => 'x', 'whole' => '"x"' ] ]
],
'star etag' => [
[ '*, "x"' ],
[]
],
'etag star' => [
[ '"x", *' ],
[]
],
'two in a string' => [
[ '"x","y"' ],
[
[ 'weak' => false, 'contents' => 'x', 'whole' => '"x"' ],
[ 'weak' => false, 'contents' => 'y', 'whole' => '"y"' ]
]
],
'two with whitespace' => [
[ "\"x\"\t, \"y\"" ],
[
[ 'weak' => false, 'contents' => 'x', 'whole' => '"x"' ],
[ 'weak' => false, 'contents' => 'y', 'whole' => '"y"' ]
]
],
'two separate headers' => [
[ '"x"', '"y"' ],
[
[ 'weak' => false, 'contents' => 'x', 'whole' => '"x"' ],
[ 'weak' => false, 'contents' => 'y', 'whole' => '"y"' ]
]
],
'trailing comma' => [
[ '"x",' ],
[]
],
'trailing garbage' => [
[ '"x",asdfg' ],
[]
]
];
}
/**
* @dataProvider provideParseHeaderList
* @param array $input
* @param array $expected
*/
public function testParseHeaderList( $input, $expected ) {
$parser = new IfNoneMatch;
$actual = $parser->parseHeaderList( $input );
$this->assertSame( $expected, $actual );
}
public static function provideParseETag() {
return [
'empty' => [
'',
null
],
'strong' => [
'"x"',
[ 'weak' => false, 'contents' => 'x', 'whole' => '"x"' ]
],
'weak' => [
'W/"x"',
[ 'weak' => true, 'contents' => 'x', 'whole' => 'W/"x"' ]
],
'weak with lowercase w' => [
'w/"x"',
null
],
'quoted character outside valid range' => [
'" "',
null
],
'trailing garbage' => [
'"x"a',
null
]
];
}
/**
* @dataProvider provideParseETag
*/
public function testParseETag( $input, $expected ) {
$parser = new IfNoneMatch;
$actual = $parser->parseETag( $input );
$this->assertSame( $expected, $actual );
}
}
|