Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
79.17% covered (warning)
79.17%
19 / 24
66.67% covered (warning)
66.67%
4 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
VariableAssignment
79.17% covered (warning)
79.17%
19 / 24
66.67% covered (warning)
66.67%
4 / 6
8.58
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 toTypescript
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
2
 toJavascript
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 providesDefinitions
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 needsDefinitions
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 createRandom
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2namespace Apie\TypescriptCodeBuilder\Dto;
3
4use Apie\Core\Attributes\FakeMethod;
5use Apie\TypescriptCodeBuilder\Dto\Expressions\ArrayAccessExpression;
6use Apie\TypescriptCodeBuilder\Dto\Expressions\IdentifierExpression;
7use Apie\TypescriptCodeBuilder\Dto\Expressions\NumberLiteralExpression;
8use Apie\TypescriptCodeBuilder\Dto\Expressions\ObjectExpression;
9use Apie\TypescriptCodeBuilder\Dto\Expressions\StringLiteralExpression;
10use Apie\TypescriptCodeBuilder\Dto\Expressions\TernaryExpression;
11use Apie\TypescriptCodeBuilder\Dto\Expressions\UnaryOperationExpression;
12use Apie\TypescriptCodeBuilder\Enums\VariableDeclarationKind;
13use Apie\TypescriptCodeBuilder\Lists\JavascriptIdentifierList;
14use Apie\TypescriptCodeBuilder\TypescriptFileExpressionInterface;
15use Apie\TypescriptCodeBuilder\TypescriptTypeDeclarationInterface;
16use Apie\TypescriptCodeBuilder\ValueObjects\JavascriptIdentifier;
17use Faker\Generator;
18
19#[FakeMethod('createRandom')]
20class VariableAssignment implements TypescriptFileExpressionInterface
21{
22    public function __construct(
23        public VariableDeclarationKind $kind,
24        public JavascriptIdentifier $name,
25        public TypescriptFileExpressionInterface $expression,
26        public ?TypescriptTypeDeclarationInterface $typehint = null,
27    ) {
28    }
29
30    public function toTypescript(): string
31    {
32        $typehint = $this->typehint ? ': ' . $this->typehint->toTypescript() : '';
33        return $this->kind->value . ' ' . $this->name->toNative() . $typehint . ' = ' . $this->expression->toTypescript() . ';';
34    }
35
36    public function toJavascript(): string
37    {
38        return $this->kind->value . ' ' . $this->name->toNative() . ' = ' . $this->expression->toJavascript() . ';';
39    }
40
41    public function providesDefinitions(): JavascriptIdentifierList
42    {
43        return new JavascriptIdentifierList([$this->name]);
44    }
45
46    public function needsDefinitions(): JavascriptIdentifierList
47    {
48        $definitions = $this->typehint?->needsDefinitions() ?? new JavascriptIdentifierList();
49        foreach ($this->expression->needsDefinitions() as $definition) {
50            $definitions->append($definition);
51        }
52        return $definitions;
53    }
54
55    public static function createRandom(Generator $faker): self
56    {
57        return new VariableAssignment(
58            $faker->fakeClass(VariableDeclarationKind::class),
59            $faker->fakeClass(JavascriptIdentifier::class),
60            $faker->fakeClass(
61                $faker->randomElement([
62                    ArrayAccessExpression::class,
63                    IdentifierExpression::class,
64                    NumberLiteralExpression::class,
65                    StringLiteralExpression::class,
66                    ObjectExpression::class,
67                    TernaryExpression::class,
68                    UnaryOperationExpression::class,
69                ])
70            )
71        );
72    }
73}