Comparator.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace MyCLabs\Enum\PHPUnit;
  3. use MyCLabs\Enum\Enum;
  4. use SebastianBergmann\Comparator\ComparisonFailure;
  5. /**
  6. * Use this Comparator to get nice output when using PHPUnit assertEquals() with Enums.
  7. *
  8. * Add this to your PHPUnit bootstrap PHP file:
  9. *
  10. * \SebastianBergmann\Comparator\Factory::getInstance()->register(new \MyCLabs\Enum\PHPUnit\Comparator());
  11. */
  12. final class Comparator extends \SebastianBergmann\Comparator\Comparator
  13. {
  14. public function accepts($expected, $actual)
  15. {
  16. return $expected instanceof Enum && (
  17. $actual instanceof Enum || $actual === null
  18. );
  19. }
  20. /**
  21. * @param Enum $expected
  22. * @param Enum|null $actual
  23. *
  24. * @return void
  25. */
  26. public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false)
  27. {
  28. if ($expected->equals($actual)) {
  29. return;
  30. }
  31. throw new ComparisonFailure(
  32. $expected,
  33. $actual,
  34. $this->formatEnum($expected),
  35. $this->formatEnum($actual),
  36. false,
  37. 'Failed asserting that two Enums are equal.'
  38. );
  39. }
  40. private function formatEnum(Enum $enum = null)
  41. {
  42. if ($enum === null) {
  43. return "null";
  44. }
  45. return get_class($enum)."::{$enum->getKey()}()";
  46. }
  47. }