CodesnippetTest.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <?php
  2. namespace Facade\FlareClient\Tests\Stacktrace;
  3. use Facade\FlareClient\Stacktrace\Codesnippet;
  4. use Facade\FlareClient\Tests\TestCase;
  5. class CodesnippetTest extends TestCase
  6. {
  7. /** @test */
  8. public function it_can_get_a_snippet_in_the_middle_of_file()
  9. {
  10. $snippet = (new Codesnippet())
  11. ->surroundingLine(10)
  12. ->snippetLineCount(9)
  13. ->get($this->getTestFilePath('20-lines.txt'));
  14. $this->assertEquals([
  15. 6 => 'Line 6',
  16. 7 => 'Line 7',
  17. 8 => 'Line 8',
  18. 9 => 'Line 9',
  19. 10 => 'Line 10',
  20. 11 => 'Line 11',
  21. 12 => 'Line 12',
  22. 13 => 'Line 13',
  23. 14 => 'Line 14',
  24. ], $snippet);
  25. }
  26. /** @test */
  27. public function it_can_get_the_beginning_of_a_file()
  28. {
  29. $snippet = (new Codesnippet())
  30. ->surroundingLine(1)
  31. ->snippetLineCount(2)
  32. ->get($this->getTestFilePath('20-lines.txt'));
  33. $this->assertEquals([
  34. 1 => 'Line 1',
  35. 2 => 'Line 2',
  36. ], $snippet);
  37. }
  38. /** @test */
  39. public function it_can_get_the_end_of_a_file()
  40. {
  41. $snippet = (new Codesnippet())
  42. ->surroundingLine(20)
  43. ->snippetLineCount(2)
  44. ->get($this->getTestFilePath('20-lines.txt'));
  45. $this->assertEquals([
  46. 19 => 'Line 19',
  47. 20 => 'Line 20',
  48. ], $snippet);
  49. }
  50. /** @test */
  51. public function it_will_get_the_ending_of_the_file_surrounding_lines_is_out_of_bounds()
  52. {
  53. $snippet = (new Codesnippet())
  54. ->surroundingLine(30)
  55. ->snippetLineCount(2)
  56. ->get($this->getTestFilePath('20-lines.txt'));
  57. $this->assertEquals([
  58. 19 => 'Line 19',
  59. 20 => 'Line 20',
  60. ], $snippet);
  61. }
  62. /** @test */
  63. public function it_will_get_the_entire_file_if_the_snippet_line_count_is_very_high()
  64. {
  65. $snippet = (new Codesnippet())
  66. ->surroundingLine(1)
  67. ->snippetLineCount(30)
  68. ->get($this->getTestFilePath('3-lines.txt'));
  69. $this->assertEquals([
  70. 1 => 'Line 1',
  71. 2 => 'Line 2',
  72. 3 => 'Line 3',
  73. ], $snippet);
  74. }
  75. /** @test */
  76. public function it_will_return_an_empty_array_for_a_non_existing_file()
  77. {
  78. $snippet = (new Codesnippet())
  79. ->surroundingLine(1)
  80. ->snippetLineCount(30)
  81. ->get($this->getTestFilePath('this-file-does-not-exist'));
  82. $this->assertEquals([], $snippet);
  83. }
  84. /** @test */
  85. public function it_will_trim_all_spaces_at_the_end_of_a_line()
  86. {
  87. $snippet = (new Codesnippet())
  88. ->surroundingLine(2)
  89. ->snippetLineCount(3)
  90. ->get($this->getTestFilePath('lines-with-spaces.txt'));
  91. $this->assertEquals([
  92. 1 => ' Line 1',
  93. 2 => ' Line 2',
  94. 3 => ' Line 3',
  95. ], $snippet);
  96. }
  97. /** @test */
  98. public function it_will_trim_long_lines()
  99. {
  100. $snippet = (new Codesnippet())
  101. ->surroundingLine(2)
  102. ->snippetLineCount(3)
  103. ->get($this->getTestFilePath('long-line.txt'));
  104. $this->assertCount(1, $snippet);
  105. $this->assertEquals(250, strlen($snippet[1]));
  106. }
  107. private function getTestFilePath(string $fileName): string
  108. {
  109. return __DIR__."/testFiles/{$fileName}";
  110. }
  111. }