J. King
5 years ago
6 changed files with 67 additions and 12 deletions
@ -0,0 +1,22 @@ |
|||||
|
<?php |
||||
|
/** @license MIT |
||||
|
* Copyright 2017 J. King, Dustin Wilson et al. |
||||
|
* See LICENSE and AUTHORS files for details */ |
||||
|
|
||||
|
declare(strict_types=1); |
||||
|
namespace JKingWeb\Arsse\Misc; |
||||
|
|
||||
|
use Psr\Http\Message\MessageInterface; |
||||
|
|
||||
|
class HTTP { |
||||
|
public static function matchType(MessageInterface $msg, string ...$type): bool { |
||||
|
$header = $msg->getHeaderLine("Content-Type") ?? ""; |
||||
|
foreach ($type as $t) { |
||||
|
$pattern = "/^".preg_quote(trim($t), "/")."($|;|,)/i"; |
||||
|
if (preg_match($pattern, $header)) { |
||||
|
return true; |
||||
|
} |
||||
|
} |
||||
|
return false; |
||||
|
} |
||||
|
} |
@ -0,0 +1,32 @@ |
|||||
|
<?php |
||||
|
/** @license MIT |
||||
|
* Copyright 2017 J. King, Dustin Wilson et al. |
||||
|
* See LICENSE and AUTHORS files for details */ |
||||
|
|
||||
|
declare(strict_types=1); |
||||
|
namespace JKingWeb\Arsse\TestCase\Misc; |
||||
|
|
||||
|
use JKingWeb\Arsse\Misc\HTTP; |
||||
|
use Psr\Http\Message\ResponseInterface; |
||||
|
|
||||
|
/** @covers \JKingWeb\Arsse\Misc\HTTP */ |
||||
|
class TestHTTP extends \JKingWeb\Arsse\Test\AbstractTest { |
||||
|
/** @dataProvider provideMediaTypes */ |
||||
|
public function testMatchMediaType(string $header, array $types, bool $exp) { |
||||
|
$msg = (new \Zend\Diactoros\Request)->withHeader("Content-Type", $header); |
||||
|
$this->assertSame($exp, HTTP::matchType($msg, ...$types)); |
||||
|
$msg = (new \Zend\Diactoros\Response)->withHeader("Content-Type", $header); |
||||
|
$this->assertSame($exp, HTTP::matchType($msg, ...$types)); |
||||
|
} |
||||
|
|
||||
|
public function provideMediaTypes() { |
||||
|
return [ |
||||
|
["application/json", ["application/json"], true], |
||||
|
["APPLICATION/JSON", ["application/json"], true], |
||||
|
["text/JSON", ["application/json", "text/json"], true], |
||||
|
["text/json; charset=utf-8", ["application/json", "text/json"], true], |
||||
|
["", ["application/json"], false], |
||||
|
["", ["application/json", ""], true], |
||||
|
]; |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue