RelativeDateStringTest.php 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4. * This file is part of the Carbon package.
  5. *
  6. * (c) Brian Nesbitt <brian@nesbot.com>
  7. *
  8. * For the full copyright and license information, please view the LICENSE
  9. * file that was distributed with this source code.
  10. */
  11. namespace Tests\CarbonImmutable;
  12. use Carbon\CarbonImmutable as Carbon;
  13. use Tests\AbstractTestCase;
  14. class RelativeDateStringTest extends AbstractTestCase
  15. {
  16. public $scenarios = [
  17. // ensure regular timestamps are flagged as relative
  18. '2018-01-02 03:04:05' => ['date' => '2018-01-02', 'is_relative' => false],
  19. '1500-01-02 12:00:00' => ['date' => '1500-01-02', 'is_relative' => false],
  20. '1985-12-10' => ['date' => '1985-12-10', 'is_relative' => false],
  21. 'Dec 2017' => ['date' => '2017-12-01', 'is_relative' => false],
  22. '25-Dec-2017' => ['date' => '2017-12-25', 'is_relative' => false],
  23. '25 December 2017' => ['date' => '2017-12-25', 'is_relative' => false],
  24. '25 Dec 2017' => ['date' => '2017-12-25', 'is_relative' => false],
  25. 'Dec 25 2017' => ['date' => '2017-12-25', 'is_relative' => false],
  26. // dates not relative now
  27. 'first day of January 2008' => ['date' => '2008-01-01', 'is_relative' => false],
  28. 'first day of January 1999' => ['date' => '1999-01-01', 'is_relative' => false],
  29. 'last day of January 1999' => ['date' => '1999-01-31', 'is_relative' => false],
  30. 'last monday of January 1999' => ['date' => '1999-01-25', 'is_relative' => false],
  31. 'first day of January 0001' => ['date' => '0001-01-01', 'is_relative' => false],
  32. 'monday december 1750' => ['date' => '1750-12-07', 'is_relative' => false],
  33. 'december 1750' => ['date' => '1750-12-01', 'is_relative' => false],
  34. 'last sunday of January 2005' => ['date' => '2005-01-30', 'is_relative' => false],
  35. 'January 2008' => ['date' => '2008-01-01', 'is_relative' => false],
  36. // dates relative to now
  37. 'first day of next month' => ['date' => '2017-02-01', 'is_relative' => true],
  38. 'sunday noon' => ['date' => '2017-01-01', 'is_relative' => true],
  39. 'sunday midnight' => ['date' => '2017-01-01', 'is_relative' => true],
  40. 'monday december' => ['date' => '2017-12-04', 'is_relative' => true],
  41. 'next saturday' => ['date' => '2017-01-07', 'is_relative' => true],
  42. 'april' => ['date' => '2017-04-01', 'is_relative' => true],
  43. ];
  44. public function testKeywordMatching()
  45. {
  46. foreach ($this->scenarios as $string => $expected) {
  47. $actual = Carbon::hasRelativeKeywords($string);
  48. $this->assertSame(
  49. $expected['is_relative'],
  50. $actual,
  51. "Failed relative keyword matching for scenario: {$string} (expected: {$expected['is_relative']})"
  52. );
  53. }
  54. }
  55. public function testRelativeInputStrings()
  56. {
  57. Carbon::setTestNow('2017-01-01 12:00:00');
  58. foreach ($this->scenarios as $string => $expected) {
  59. $actual = Carbon::parse($string)->format('Y-m-d');
  60. $this->assertSame(
  61. $expected['date'],
  62. $actual,
  63. "Failed relative date scenario: {$string}"
  64. );
  65. }
  66. }
  67. }