MessageFormatterTest.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. namespace GuzzleHttp\Tests;
  3. use GuzzleHttp\Exception\RequestException;
  4. use GuzzleHttp\Psr7;
  5. use GuzzleHttp\Psr7\Request;
  6. use GuzzleHttp\Psr7\Response;
  7. use GuzzleHttp\MessageFormatter;
  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. $this->assertEquals(MessageFormatter::CLF, $this->readAttribute($f, 'template'));
  18. $f = new MessageFormatter(null);
  19. $this->assertEquals(MessageFormatter::CLF, $this->readAttribute($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($format, $pattern)
  33. {
  34. $f = new MessageFormatter($format);
  35. $request = new Request('GET', '/');
  36. $result = $f->format($request);
  37. $this->assertRegExp($pattern, $result);
  38. }
  39. public function formatProvider()
  40. {
  41. $request = new Request('PUT', '/', ['x-test' => 'abc'], Psr7\stream_for('foo'));
  42. $response = new Response(200, ['X-Baz' => 'Bar'], Psr7\stream_for('baz'));
  43. $err = new RequestException('Test', $request, $response);
  44. return [
  45. ['{request}', [$request], Psr7\str($request)],
  46. ['{response}', [$request, $response], Psr7\str($response)],
  47. ['{request} {response}', [$request, $response], Psr7\str($request) . ' ' . Psr7\str($response)],
  48. // Empty response yields no value
  49. ['{request} {response}', [$request], Psr7\str($request) . ' '],
  50. ['{req_headers}', [$request], "PUT / HTTP/1.1\r\nx-test: abc"],
  51. ['{res_headers}', [$request, $response], "HTTP/1.1 200 OK\r\nX-Baz: Bar"],
  52. ['{res_headers}', [$request], 'NULL'],
  53. ['{req_body}', [$request], 'foo'],
  54. ['{res_body}', [$request, $response], 'baz'],
  55. ['{res_body}', [$request], 'NULL'],
  56. ['{method}', [$request], $request->getMethod()],
  57. ['{url}', [$request], $request->getUri()],
  58. ['{target}', [$request], $request->getRequestTarget()],
  59. ['{req_version}', [$request], $request->getProtocolVersion()],
  60. ['{res_version}', [$request, $response], $response->getProtocolVersion()],
  61. ['{res_version}', [$request], 'NULL'],
  62. ['{host}', [$request], $request->getHeaderLine('Host')],
  63. ['{hostname}', [$request, $response], gethostname()],
  64. ['{hostname}{hostname}', [$request, $response], gethostname() . gethostname()],
  65. ['{code}', [$request, $response], $response->getStatusCode()],
  66. ['{code}', [$request], 'NULL'],
  67. ['{phrase}', [$request, $response], $response->getReasonPhrase()],
  68. ['{phrase}', [$request], 'NULL'],
  69. ['{error}', [$request, $response, $err], 'Test'],
  70. ['{error}', [$request], 'NULL'],
  71. ['{req_header_x-test}', [$request], 'abc'],
  72. ['{req_header_x-not}', [$request], ''],
  73. ['{res_header_X-Baz}', [$request, $response], 'Bar'],
  74. ['{res_header_x-not}', [$request, $response], ''],
  75. ['{res_header_X-Baz}', [$request], 'NULL'],
  76. ];
  77. }
  78. /**
  79. * @dataProvider formatProvider
  80. */
  81. public function testFormatsMessages($template, $args, $result)
  82. {
  83. $f = new MessageFormatter($template);
  84. $this->assertSame((string) $result, call_user_func_array(array($f, 'format'), $args));
  85. }
  86. }