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