Passed
Push — master ( e72ba5...492fde )
by Alexander
10:28
created

ProfilerTest::testNestedLevel()   A

Complexity

Conditions 5
Paths 5

Size

Total Lines 33
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 23
c 1
b 0
f 0
dl 0
loc 33
rs 9.2408
cc 5
nc 5
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Profiler\Tests;
6
7
use Psr\Log\NullLogger;
8
use Yiisoft\Profiler\LogTarget;
9
use Yiisoft\Profiler\Profiler;
10
use Yiisoft\Profiler\Target;
11
12
class ProfilerTest extends TestCase
13
{
14
    /**
15
     * @covers \Yiisoft\Profiler\Profiler::setTargets()
16
     * @covers \Yiisoft\Profiler\Profiler::getTargets()
17
     */
18
    public function testSetupTarget(): void
19
    {
20
        $profiler = new Profiler($this->logger);
21
22
        $target = new LogTarget(new NullLogger());
23
24
        $profiler->setTargets([$target]);
25
26
        $this->assertEquals([$target], $profiler->getTargets());
27
        $this->assertSame($target, $profiler->getTargets()[0]);
28
29
        $profiler->setTargets([
30
            [
31
                '__class' => LogTarget::class,
32
                'logger' => new NullLogger(),
33
                'level' => 'test'
34
            ],
35
        ]);
36
37
        $target = $profiler->getTargets()[0];
38
39
        $this->assertInstanceOf(LogTarget::class, $target);
40
        $this->assertEquals('test', $target->getLogLevel());
41
    }
42
43
    /**
44
     * @depends testSetupTarget
45
     *
46
     * @covers \Yiisoft\Profiler\Profiler::addTarget()
47
     */
48
    public function testAddTarget(): void
49
    {
50
        $profiler = new Profiler($this->logger);
51
52
        $target = $this->getMockBuilder(Target::class)->getMockForAbstractClass();
53
        $profiler->setTargets([$target]);
54
55
        $namedTarget = $this->getMockBuilder(Target::class)->getMockForAbstractClass();
56
        $profiler->addTarget($namedTarget, 'test-target');
57
58
        $targets = $profiler->getTargets();
59
60
        $this->assertCount(2, $targets);
61
        $this->assertTrue(isset($targets['test-target']));
62
        $this->assertSame($namedTarget, $targets['test-target']);
63
64
        $namelessTarget = $this->getMockBuilder(Target::class)->getMockForAbstractClass();
65
        $profiler->addTarget($namelessTarget);
66
        $targets = $profiler->getTargets();
67
68
        $this->assertCount(3, $targets);
69
        $this->assertSame($namelessTarget, array_pop($targets));
70
    }
71
72
    public function testEnabled(): void
73
    {
74
        $profiler = new Profiler($this->logger);
75
76
        $profiler->setEnabled(false);
77
78
        $profiler->begin('test');
79
        $profiler->end('test');
80
81
        $this->assertEmpty($profiler->getMessages());
82
83
        $profiler->setEnabled(true);
84
85
        $profiler->begin('test');
86
        $profiler->end('test');
87
88
        $this->assertCount(1, $profiler->getMessages());
89
    }
90
91
    /**
92
     * @covers \Yiisoft\Profiler\Profiler::flush()
93
     */
94
    public function testFlushWithDispatch(): void
95
    {
96
        /* @var $profiler Profiler|\PHPUnit_Framework_MockObject_MockObject */
97
        $profiler = $this->getMockBuilder(Profiler::class)
98
            ->setConstructorArgs([$this->logger])
99
            ->setMethods(['dispatch'])
100
            ->getMock();
101
102
        $message = ['anything'];
103
104
        $profiler->setMessages($message);
105
106
        $profiler->expects($this->once())
107
            ->method('dispatch')
108
            ->with($this->equalTo($message));
109
110
        $profiler->flush();
111
112
        $this->assertEmpty($profiler->getMessages());
113
    }
114
115
    public function testNestedMessages(): void
116
    {
117
        $profiler = new Profiler($this->logger);
118
119
        $profiler->begin('test');
120
        $profiler->begin('test');
121
        $profiler->end('test');
122
        $profiler->end('test');
123
124
        $this->assertCount(2, $profiler->getMessages());
125
    }
126
127
    /**
128
     * @depends testNestedMessages
129
     */
130
    public function testNestedLevel(): void
131
    {
132
        $profiler = new Profiler($this->logger);
133
134
        $profiler->begin('outer');
135
        $profiler->begin('inner');
136
        $profiler->end('inner');
137
        $profiler->end('outer');
138
        $profiler->begin('not-nested');
139
        $profiler->end('not-nested');
140
141
        $outerMessage = null;
142
        $innerMessage = null;
143
        $notNestedMessage = null;
144
145
        foreach ($profiler->getmessages() as $message) {
146
            if ($message['token'] === 'outer') {
147
                $outerMessage = $message;
148
                continue;
149
            }
150
            if ($message['token'] === 'inner') {
151
                $innerMessage = $message;
152
                continue;
153
            }
154
            if ($message['token'] === 'not-nested') {
155
                $notNestedMessage = $message;
156
                continue;
157
            }
158
        }
159
160
        $this->assertSame(0, $outerMessage['nestedLevel']);
161
        $this->assertSame(1, $innerMessage['nestedLevel']);
162
        $this->assertSame(0, $notNestedMessage['nestedLevel']);
163
    }
164
}
165