Lines 100.00% 11 / 11
Methods 100.00% 2 / 2
Classes 100.00% 1 / 1
Name Lines Methods CRAP
 canEnter 100.00% 8 / 8 100.00% 1 / 1 8
 isTerminal 100.00% 3 / 3 100.00% 1 / 1 3
7enum AppState: string
8{
9    case Declared = 'declared';
10    case Constructing = 'constructing';
11    case Constructed = 'constructed';
12    case Initializing = 'initializing';
13    case Initialized = 'initialized';
14    case Running = 'running';
15    case Disposing = 'disposing';
16    case Failed = 'failed';
17    case Skipped = 'skipped';
18    case Disposed = 'disposed';
19    case Abandoned = 'abandoned';
20
21    public function canEnter(self $next): bool
22    {
23        return \in_array($next, match ($this) {
24            self::Declared => [self::Constructing, self::Skipped, self::Failed, self::Abandoned],
25            self::Constructing => [self::Constructed, self::Failed, self::Skipped, self::Abandoned],
26            self::Constructed => [self::Initializing, self::Skipped, self::Abandoned],
27            self::Initializing => [self::Running, self::Initialized, self::Failed, self::Abandoned],
28            self::Initialized, self::Running => [self::Disposing, self::Abandoned],
29            self::Disposing => [self::Disposed, self::Abandoned],
30            self::Failed, self::Skipped, self::Disposed, self::Abandoned => [],
31        }, true);
32    }
33
34    public function isTerminal(): bool
35    {
36        return match ($this) {
37            self::Failed, self::Skipped, self::Disposed, self::Abandoned => true,
38            default => false,
39        };
40    }
41}