| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- <?php
- declare(strict_types=1);
- /**
- * This file is part of the Carbon package.
- *
- * (c) Brian Nesbitt <brian@nesbot.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Tests\CommonTraits;
- use Carbon\Carbon;
- use Carbon\CarbonImmutable;
- use Carbon\CarbonInterval;
- use Carbon\CarbonPeriod;
- use Generator;
- use Tests\AbstractTestCaseWithOldNow;
- class MacroContextNestingTest extends AbstractTestCaseWithOldNow
- {
- public static function dataForMacroableClasses(): Generator
- {
- yield [Carbon::class, Carbon::parse('2010-05-23'), null];
- yield [CarbonImmutable::class, CarbonImmutable::parse('2010-05-23'), null];
- yield [CarbonInterval::class, CarbonInterval::make('P1M6D'), (string) (CarbonInterval::second())];
- yield [CarbonPeriod::class, CarbonPeriod::create('2010-08-23', '2010-10-02'), null];
- }
- /**
- * @dataProvider \Tests\CommonTraits\MacroContextNestingTest::dataForMacroableClasses
- *
- * @param string $class
- * @param mixed $sample
- * @param string|null $reference
- */
- public function testMacroContextNesting($class, $sample, $reference)
- {
- $macro1 = 'macro'.(mt_rand(100, 999999) * 2);
- $class::macro($macro1, static function () {
- return self::this()->__toString();
- });
- $macro2 = 'macro'.(mt_rand(100, 999999) * 2 + 1);
- $class::macro($macro2, static function () use ($macro1, $sample) {
- $dates = [self::this()->$macro1()];
- $dates[] = $sample->$macro1();
- $dates[] = self::this()->$macro1();
- return $dates;
- });
- $dates = $class::$macro2();
- $this->assertSame([
- $reference ?: (string) (new $class()),
- (string) $sample,
- $reference ?: (string) (new $class()),
- ], $dates);
- }
- /**
- * @dataProvider \Tests\CommonTraits\MacroContextNestingTest::dataForMacroableClasses
- *
- * @param string $class
- * @param mixed $sample
- */
- public function testMacroContextDetectionNesting($class, $sample)
- {
- $macro1 = 'macro'.(mt_rand(100, 999999) * 2);
- $class::macro($macro1, static function () {
- $context = self::context();
- return $context ? \get_class($context) : 'null';
- });
- $macro2 = 'macro'.(mt_rand(100, 999999) * 2 + 1);
- $class::macro($macro2, static function () use ($macro1, $sample) {
- $dump = [self::$macro1(), self::this()->$macro1()];
- $dump[] = $sample->$macro1();
- $dump[] = self::$macro1();
- return $dump;
- });
- $dump = $class::$macro2();
- $this->assertSame([
- 'null',
- $class,
- $class,
- 'null',
- ], $dump);
- }
- }
|