packages/sql-faker/tests/Unit/Compiler/Bison/Lexer/BisonTokenTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\SqlFaker\Compiler\Bison\Lexer;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use SqlFaker\Compiler\Bison\Lexer\BisonLexeme;
11use SqlFaker\Compiler\Bison\Lexer\BisonToken;
12
13#[CoversClass(BisonToken::class)]
14#[UsesClass(BisonLexeme::class)]
15final class BisonTokenTest extends TestCase
16{
17    public function testType(): void
18    {
19        $token = new BisonToken(BisonLexeme::Identifier, 'SELECT', 0);
20
21        self::assertSame(BisonLexeme::Identifier, $token->type);
22    }
23
24    public function testValueString(): void
25    {
26        $token = new BisonToken(BisonLexeme::StringLiteral, '"hello"', 5);
27
28        self::assertSame('"hello"', $token->value);
29    }
30
31    public function testValueInt(): void
32    {
33        $token = new BisonToken(BisonLexeme::Number, 42, 10);
34
35        self::assertSame(42, $token->value);
36    }
37
38    public function testOffset(): void
39    {
40        $token = new BisonToken(BisonLexeme::Colon, ':', 99);
41
42        self::assertSame(99, $token->offset);
43    }
44
45    public function testAsStringReadsTextAsItIs(): void
46    {
47        self::assertSame('IDENT', (new BisonToken(BisonLexeme::Identifier, 'IDENT', 0))->asString());
48    }
49
50    public function testAsStringRendersANumberAsItsDigits(): void
51    {
52        self::assertSame('42', (new BisonToken(BisonLexeme::Number, 42, 0))->asString());
53    }
54
55    public function testAsIntReadsANumberAsItIs(): void
56    {
57        self::assertSame(42, (new BisonToken(BisonLexeme::Number, 42, 0))->asInt());
58    }
59
60    public function testAsIntReadsTextThatNamesNoNumberAsZero(): void
61    {
62        self::assertSame(0, (new BisonToken(BisonLexeme::Identifier, 'IDENT', 0))->asInt());
63    }
64}
65