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