packages/ztd-query-sqlite/tests/Unit/Sql/Attach/AttachTokensTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Sql\Attach;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use ZtdQuery\Platform\Sqlite\Sql\Attach\AttachTokens;
11use ZtdQuery\Platform\Sqlite\Sql\SqliteLexerProfile;
12use ZtdQuery\Sql\SqlToken;
13use ZtdQuery\Sql\SqlTokenKind;
14use ZtdQuery\Sql\SqlTokenStream;
15
16#[CoversClass(AttachTokens::class)]
17#[UsesClass(SqliteLexerProfile::class)]
18final class AttachTokensTest extends TestCase
19{
20 public function testIsIdentifierSuffixRequiresExactlyOneIdentifier(): void
21 {
22 self::assertTrue(AttachTokens::isIdentifierSuffix(SqlTokenStream::tokenize('db', SqliteLexerProfile::create())->significantTokens(), 0));
23 self::assertTrue(AttachTokens::isIdentifierSuffix(SqlTokenStream::tokenize('"db name"', SqliteLexerProfile::create())->significantTokens(), 0));
24 self::assertFalse(AttachTokens::isIdentifierSuffix(SqlTokenStream::tokenize('db extra', SqliteLexerProfile::create())->significantTokens(), 0));
25 self::assertFalse(AttachTokens::isIdentifierSuffix(SqlTokenStream::tokenize('123', SqliteLexerProfile::create())->significantTokens(), 0));
26 self::assertFalse(AttachTokens::isIdentifierSuffix(SqlTokenStream::tokenize('[db name]', SqliteLexerProfile::create())->significantTokens(), 0));
27 }
28
29 public function testIsSymbolChecksKindAndSpelling(): void
30 {
31 self::assertTrue(AttachTokens::isSymbol(new SqlToken(SqlTokenKind::Symbol, ';', 0, 0, 0), ';'));
32 self::assertFalse(AttachTokens::isSymbol(new SqlToken(SqlTokenKind::Word, ';', 0, 0, 0), ';'));
33 self::assertFalse(AttachTokens::isSymbol(new SqlToken(SqlTokenKind::Symbol, ',', 0, 0, 0), ';'));
34 }
35
36}
37