MessageFormatterTest.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. namespace GuzzleHttp\Tests;
  3. use GuzzleHttp\Exception\RequestException;
  4. use GuzzleHttp\MessageFormatter;
  5. use GuzzleHttp\Psr7;
  6. use GuzzleHttp\Psr7\Request;
  7. use GuzzleHttp\Psr7\Response;
  8. use PHPUnit\Framework\TestCase;
  9. /**
  10. * @covers \GuzzleHttp\MessageFormatter
  11. */
  12. class MessageFormatterTest extends TestCase
  13. {
  14. public function testCreatesWithClfByDefault()
  15. {
  16. $f = new MessageFormatter();
  17. self::assertEquals(MessageFormatter::CLF, Helpers::readObjectAttribute($f, 'template'));
  18. $f = new MessageFormatter(null);
  19. self::assertEquals(MessageFormatter::CLF, Helpers::readObjectAttribute($f, 'template'));
  20. }
  21. public function dateProvider()
  22. {
  23. return [
  24. ['{ts}', '/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}/'],
  25. ['{date_iso_8601}', '/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}/'],
  26. ['{date_common_log}', '/^\d\d\/[A-Z][a-z]{2}\/[0-9]{4}/'],
  27. ];
  28. }
  29. /**
  30. * @dataProvider dateProvider
  31. */
  32. public function testFormatsTimestamps(string $format, string $pattern)
  33. {
  34. $f = new MessageFormatter($format);
  35. $request = new Request('GET', '/');
  36. $result = $f->format($request);
  37. if (method_exists($this, 'assertMatchesRegularExpression')) {
  38. // PHPUnit 9
  39. self::assertMatchesRegularExpression($pattern, $result);
  40. } else {
  41. // PHPUnit 8
  42. self::assertRegExp($pattern, $result);
  43. }
  44. }
  45. public function formatProvider()
  46. {
  47. $request = new Request('PUT', '/', ['x-test' => 'abc'], Psr7\Utils::streamFor('foo'));
  48. $response = new Response(200, ['X-Baz' => 'Bar'], Psr7\Utils::streamFor('baz'));
  49. $err = new RequestException('Test', $request, $response);
  50. return [
  51. ['{request}', [$request], Psr7\Message::toString($request)],
  52. ['{response}', [$request, $response], Psr7\Message::toString($response)],
  53. ['{request} {response}', [$request, $response], Psr7\Message::toString($request).' '.Psr7\Message::toString($response)],
  54. // Empty response yields no value
  55. ['{request} {response}', [$request], Psr7\Message::toString($request).' '],
  56. ['{req_headers}', [$request], "PUT / HTTP/1.1\r\nx-test: abc"],
  57. ['{res_headers}', [$request, $response], "HTTP/1.1 200 OK\r\nX-Baz: Bar"],
  58. ['{res_headers}', [$request], 'NULL'],
  59. ['{req_body}', [$request], 'foo'],
  60. ['{res_body}', [$request, $response], 'baz'],
  61. ['{res_body}', [$request], 'NULL'],
  62. ['{method}', [$request], $request->getMethod()],
  63. ['{url}', [$request], $request->getUri()],
  64. ['{target}', [$request], $request->getRequestTarget()],
  65. ['{req_version}', [$request], $request->getProtocolVersion()],
  66. ['{res_version}', [$request, $response], $response->getProtocolVersion()],
  67. ['{res_version}', [$request], 'NULL'],
  68. ['{host}', [$request], $request->getHeaderLine('Host')],
  69. ['{hostname}', [$request, $response], \gethostname()],
  70. ['{hostname}{hostname}', [$request, $response], \gethostname().\gethostname()],
  71. ['{code}', [$request, $response], $response->getStatusCode()],
  72. ['{code}', [$request], 'NULL'],
  73. ['{phrase}', [$request, $response], $response->getReasonPhrase()],
  74. ['{phrase}', [$request], 'NULL'],
  75. ['{error}', [$request, $response, $err], 'Test'],
  76. ['{error}', [$request], 'NULL'],
  77. ['{req_header_x-test}', [$request], 'abc'],
  78. ['{req_header_x-not}', [$request], ''],
  79. ['{res_header_X-Baz}', [$request, $response], 'Bar'],
  80. ['{res_header_x-not}', [$request, $response], ''],
  81. ['{res_header_X-Baz}', [$request], 'NULL'],
  82. ];
  83. }
  84. /**
  85. * @dataProvider formatProvider
  86. */
  87. public function testFormatsMessages(string $template, array $args, $result)
  88. {
  89. $f = new MessageFormatter($template);
  90. self::assertSame((string) $result, $f->format(...$args));
  91. }
  92. }