ComparisonFailure.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php declare(strict_types=1);
  2. /*
  3. * This file is part of sebastian/comparator.
  4. *
  5. * (c) Sebastian Bergmann <sebastian@phpunit.de>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace SebastianBergmann\Comparator;
  11. use RuntimeException;
  12. use SebastianBergmann\Diff\Differ;
  13. use SebastianBergmann\Diff\Output\UnifiedDiffOutputBuilder;
  14. final class ComparisonFailure extends RuntimeException
  15. {
  16. private mixed $expected;
  17. private mixed $actual;
  18. private string $expectedAsString;
  19. private string $actualAsString;
  20. public function __construct(mixed $expected, mixed $actual, string $expectedAsString, string $actualAsString, string $message = '')
  21. {
  22. parent::__construct($message);
  23. $this->expected = $expected;
  24. $this->actual = $actual;
  25. $this->expectedAsString = $expectedAsString;
  26. $this->actualAsString = $actualAsString;
  27. }
  28. public function getActual(): mixed
  29. {
  30. return $this->actual;
  31. }
  32. public function getExpected(): mixed
  33. {
  34. return $this->expected;
  35. }
  36. public function getActualAsString(): string
  37. {
  38. return $this->actualAsString;
  39. }
  40. public function getExpectedAsString(): string
  41. {
  42. return $this->expectedAsString;
  43. }
  44. public function getDiff(): string
  45. {
  46. if (!$this->actualAsString && !$this->expectedAsString) {
  47. return '';
  48. }
  49. $differ = new Differ(new UnifiedDiffOutputBuilder("\n--- Expected\n+++ Actual\n"));
  50. return $differ->diff($this->expectedAsString, $this->actualAsString);
  51. }
  52. public function toString(): string
  53. {
  54. return $this->getMessage() . $this->getDiff();
  55. }
  56. }