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