ContextTest.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. /**
  3. * @license Apache 2.0
  4. */
  5. namespace SwaggerTests;
  6. use Swagger\Context;
  7. class ContextTest extends SwaggerTestCase
  8. {
  9. public function testDetect()
  10. {
  11. $context = Context::detect();
  12. $line = __LINE__ - 1;
  13. $this->assertSame('ContextTest', $context->class);
  14. $this->assertSame('\SwaggerTests\ContextTest', $context->fullyQualifiedName($context->class));
  15. $this->assertSame('testDetect', $context->method);
  16. $this->assertSame(__FILE__, $context->filename);
  17. $this->assertSame($line, $context->line);
  18. $this->assertSame('SwaggerTests', $context->namespace);
  19. // $this->assertCount(1, $context->uses); // Context::detect() doesn't pick up USE statements (yet)
  20. }
  21. public function testFullyQualifiedName()
  22. {
  23. $swagger = \Swagger\scan(__DIR__.'/Fixtures/Customer.php');
  24. $context = $swagger->definitions[0]->_context;
  25. // resolve with namespace
  26. $this->assertSame('\FullyQualified', $context->fullyQualifiedName('\FullyQualified'));
  27. $this->assertSame('\SwaggerFixures\Unqualified', $context->fullyQualifiedName('Unqualified'));
  28. $this->assertSame('\SwaggerFixures\Namespace\Qualified', $context->fullyQualifiedName('Namespace\Qualified'));
  29. // respect use statements
  30. $this->assertSame('\Exception', $context->fullyQualifiedName('Exception'));
  31. $this->assertSame('\SwaggerFixures\Customer', $context->fullyQualifiedName('Customer'));
  32. $this->assertSame('\Swagger\Logger', $context->fullyQualifiedName('Logger'));
  33. $this->assertSame('\Swagger\Logger', $context->fullyQualifiedName('lOgGeR')); // php has case-insensitive class names :-(
  34. $this->assertSame('\Swagger\Logger', $context->fullyQualifiedName('SwgLogger'));
  35. $this->assertSame('\Swagger\Annotations\QualifiedAlias', $context->fullyQualifiedName('SWG\QualifiedAlias'));
  36. }
  37. public function testPhpdocContent()
  38. {
  39. $singleLine = new Context(['comment' => <<<END
  40. /**
  41. * A single line.
  42. *
  43. * @SWG\Get(path="api/test1", @SWG\Response(response="200", description="a response"))
  44. */
  45. END
  46. ]);
  47. $this->assertEquals('A single line.', $singleLine->phpdocContent());
  48. $multiline = new Context(['comment' => <<<END
  49. /**
  50. * A description spread across
  51. * multiple lines.
  52. *
  53. * even blank lines
  54. *
  55. * @SWG\Get(path="api/test1", @SWG\Response(response="200", description="a response"))
  56. */
  57. END
  58. ]);
  59. $this->assertEquals("A description spread across\nmultiple lines.\n\neven blank lines", $multiline->phpdocContent());
  60. $escapedLinebreak = new Context(['comment' => <<<END
  61. /**
  62. * A single line spread across \
  63. * multiple lines.
  64. *
  65. * @SWG\Get(path="api/test1", @SWG\Response(response="200", description="a response"))
  66. */
  67. END
  68. ]);
  69. $this->assertEquals("A single line spread across multiple lines.", $escapedLinebreak->phpdocContent());
  70. }
  71. /**
  72. * https://phpdoc.org/docs/latest/guides/docblocks.html
  73. */
  74. public function testPhpdocSummaryAndDescription()
  75. {
  76. $single = new Context(['comment' => '/** This is a single line DocComment. */']);
  77. $this->assertEquals('This is a single line DocComment.', $single->phpdocContent());
  78. $multi = new Context(['comment' => "/**\n * This is a multi-line DocComment.\n */"]);
  79. $this->assertEquals('This is a multi-line DocComment.', $multi->phpdocContent());
  80. $emptyWhiteline = new Context(['comment' => <<<END
  81. /**
  82. * This is a summary
  83. *
  84. * This is a description
  85. */
  86. END
  87. ]);
  88. $this->assertEquals('This is a summary', $emptyWhiteline->phpdocSummary());
  89. $periodNewline = new Context(['comment' => <<<END
  90. /**
  91. * This is a summary.
  92. * This is a description
  93. */
  94. END
  95. ]);
  96. $this->assertEquals('This is a summary.', $periodNewline->phpdocSummary());
  97. $multilineSummary = new Context(['comment' => <<<END
  98. /**
  99. * This is a summary
  100. * but this is part of the summary
  101. */
  102. END
  103. ]);
  104. }
  105. }