CombatLoggerTest::testCount()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 4
c 1
b 0
f 0
dl 0
loc 7
rs 10
cc 1
nc 1
nop 0
1
<?php
2
declare(strict_types=1);
3
4
namespace HeroesofAbenez\Combat;
5
6
require __DIR__ . "/../../bootstrap.php";
7
8
use Tester\Assert;
9
10
/**
11
 * @author Jakub Konečný
12
 * @testCase
13
 */
14
final class CombatLoggerTest extends \Tester\TestCase
15
{
16
    use \Testbench\TCompiledContainer;
17
18
    protected function setUp(): void
19
    {
20
        $this->refreshContainer();
21
    }
22
23
    public function testInvalidStates(): void
24
    {
25
        /** @var CombatLogger $logger */
26
        $logger = $this->getService(CombatLogger::class);
27
        $logger->setTeams(new Team("Team1"), new Team("Team 2"));
28
        Assert::exception(function () use ($logger) {
29
            $logger->setTeams(new Team("Team1"), new Team("Team 2"));
30
        }, ImmutableException::class);
31
    }
32
33
    public function testTitle(): void
34
    {
35
        $title = "ABC";
36
        /** @var CombatLogger $logger */
37
        $logger = $this->getService(CombatLogger::class);
38
        $logger->setTeams(new Team("Team1"), new Team("Team 2"));
39
        $logger->title = $title;
40
        Assert::same($title, $logger->title);
41
        $log = (string) $logger;
42
        Assert::contains("<title>$title Combat</title>", $log);
43
    }
44
45
    public function testCount(): void
46
    {
47
        /** @var CombatLogger $logger */
48
        $logger = $this->getService(CombatLogger::class);
49
        Assert::count(0, $logger);
50
        $logger->logText("abc");
51
        Assert::count(1, $logger);
52
    }
53
54
    private function generateCharacter(int $id): Character
55
    {
56
        $stats = [
57
            "id" => $id, "name" => "Player $id", "level" => 1, "initiativeFormula" => "1d2+DEX/4", "strength" => 10,
58
            "dexterity" => 10, "constitution" => 10, "intelligence" => 10, "charisma" => 10
59
        ];
60
        return new Character($stats);
61
    }
62
63
    public function testRendering(): void
64
    {
65
        /** @var CombatLogger $logger */
66
        $logger = $this->getService(CombatLogger::class);
67
        $team1 = new Team("Team 1");
68
        $team1[] = $this->generateCharacter(1);
69
        $team2 = new Team("Team 2");
70
        $team2[] = $this->generateCharacter(2);
71
        $logger->setTeams($team1, $team2);
72
        $logger->round = 1;
73
        $logger->logText("abc.abc");
74
        $logger->logText("abc.abc");
75
        $logger->round = 2;
76
        $logger->logText("abc.abc");
77
        $logger->logText("abc.abc");
78
        Assert::type("string", (string) $logger);
79
    }
80
81
    public function testGetIterator(): void
82
    {
83
        /** @var CombatLogger $logger */
84
        $logger = $this->getService(CombatLogger::class);
85
        $logger->round = 1;
86
        for ($i = 1; $i <= 5; $i++) {
87
            $logger->logText("abc");
88
        }
89
        foreach ($logger as $round => $actions) {
90
            Assert::same(1, $round);
91
            Assert::type("array", $actions);
92
            Assert::count(5, $actions);
93
        }
94
    }
95
}
96
97
$test = new CombatLoggerTest();
98
$test->run();
99