withHeader("Content-Type", $header); $this->assertSame($exp, HTTP::matchType($msg, ...$types)); $msg = (new Response)->withHeader("Content-Type", $header); $this->assertSame($exp, HTTP::matchType($msg, ...$types)); } public function provideMediaTypes(): array { 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], ["application/json ;", ["application/json"], true], ["application/feed+json", ["application/json", "+json"], true], ["application/xhtml+xml", ["application/json", "+json"], false], ]; } /** @dataProvider provideTypedMessages */ public function testCreateResponses(string $type, array $params, ResponseInterface $exp): void { $act = call_user_func(["JKingWeb\\Arsse\\Misc\\HTTP", $type], ...$params); $this->assertMessage($exp, $act); } public function provideTypedMessages(): iterable { return [ ["respEmpty", [422, ['Content-Length' => "0"]], new Response(422, ['Content-Length' => "0"])], ["respText", ["OOK"], new Response(200, ['Content-Type' => "text/plain; charset=UTF-8"], "OOK")], ["respText", ["OOK", 201, ['Content-Type' => "application/octet-stream"]], new Response(201, ['Content-Type' => "application/octet-stream"], "OOK")], ["respJson", [['ook' => "eek"]], new Response(200, ['Content-Type' => "application/json"], '{"ook":"eek"}')], ["respJson", [['ook' => "eek"], 400, ['Content-Type' => "application/feed+json"]], new Response(400, ['Content-Type' => "application/feed+json"], '{"ook":"eek"}')], ["respXml", [""], new Response(200, ['Content-Type' => "application/xml; charset=UTF-8"], "")], ["respXml", ["", 451, ['Content-Type' => "text/plain", 'Vary' => "ETag"]], new Response(451, ['Content-Type' => "text/plain", 'Vary' => "ETag"], "")], ]; } }