packages/sql-faker/tests/Unit/Generation/Lexeme/SpacingConstraintTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\SqlFaker\Generation\Lexeme;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use SqlFaker\Generation\Lexeme\SpacingConstraint;
10
11#[CoversClass(SpacingConstraint::class)]
12
13final class SpacingConstraintTest extends TestCase
14{
15 public function testIntersectRetainsBothCausesOfAContradictionAndCannotBeOverridden(): void
16 {
17 $join = new SpacingConstraint(SpacingConstraint::JOIN, ['function']);
18 $space = new SpacingConstraint(SpacingConstraint::SPACE, ['keyword-phrase']);
19 $both = $join->intersect($space);
20 self::assertSame(0, $both->allowed);
21 self::assertSame(['function', 'keyword-phrase'], $both->rules);
22 self::assertSame(0, $both->intersect(new SpacingConstraint())->allowed);
23 self::assertSame(SpacingConstraint::JOIN, $join->allowed);
24 self::assertSame(['function'], $join->intersect($join)->rules);
25 }
26
27 public function testSeparatorPrefersASpaceWheneverItIsAllowed(): void
28 {
29 self::assertSame(' ', (new SpacingConstraint())->separator());
30 self::assertSame(' ', (new SpacingConstraint(SpacingConstraint::SPACE))->separator());
31 self::assertSame('', (new SpacingConstraint(SpacingConstraint::JOIN))->separator());
32 self::assertNull((new SpacingConstraint(0))->separator());
33 }
34}
35