packages/sql-formatter/tests/Unit/Core/Syntax/FingerprintTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Core\Syntax;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use SqlFormatter\Core\Syntax\Fingerprint;
10use SqlParser\Lexer\Token;
11use SqlParser\Parser\Node;
12
13#[CoversClass(Fingerprint::class)]
14#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Formatter::class)]
15#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Core\Compact\Settings::class)]
16#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\MySql\Dialect::class)]
17#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\PostgreSql\Dialect::class)]
18#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Platform\Sqlite\Dialect::class)]
19#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFormatter\Facade\DialectFactory::class)]
20final class FingerprintTest extends TestCase
21{
22 public function testOfIgnoresWhitespaceAndPositions(): void
23 {
24 $left = new Node('expr', 2, [new Token(1, 'NUM', '1', 4, ' ')]);
25 $right = new Node('expr', 2, [new Token(1, 'NUM', '1', 12, "\n")]);
26 self::assertSame(Fingerprint::of($left), Fingerprint::of($right));
27 }
28
29 public function testOfDetectsChangedGrammarAndLiteralContent(): void
30 {
31 $left = new Node('expr', 2, [new Token(1, 'NUM', '1', 0)]);
32 self::assertNotSame(Fingerprint::of($left), Fingerprint::of(new Node('expr', 3, $left->children)));
33 self::assertNotSame(Fingerprint::of($left), Fingerprint::of(new Node('expr', 2, [new Token(1, 'NUM', '2', 0)])));
34 }
35}
36