|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
namespace Particletree\Pqp; |
|
4
|
|
|
|
|
5
|
|
|
use PHPUnit_Framework_Testcase; |
|
6
|
|
|
|
|
7
|
|
|
// namespace hack on microtime functionality |
|
8
|
|
|
function microtime() |
|
9
|
|
|
{ |
|
10
|
|
|
return 1450355136.5706; |
|
11
|
|
|
} |
|
12
|
|
|
|
|
13
|
|
|
// namespace hack on included files functionality |
|
14
|
|
|
function get_included_files() |
|
15
|
|
|
{ |
|
16
|
|
|
return array( |
|
17
|
|
|
'index.php', |
|
18
|
|
|
'src/Class.php' |
|
19
|
|
|
); |
|
20
|
|
|
} |
|
21
|
|
|
|
|
22
|
|
|
// namespace hack on filesize |
|
23
|
|
|
function filesize($filename) |
|
24
|
|
|
{ |
|
25
|
|
|
return strlen($filename) * 100; |
|
26
|
|
|
} |
|
27
|
|
|
|
|
28
|
|
|
// namespace hack on memory usage |
|
29
|
|
|
function memory_get_peak_usage() |
|
30
|
|
|
{ |
|
31
|
|
|
return 123456789; |
|
32
|
|
|
} |
|
33
|
|
|
|
|
34
|
|
|
// namespace hack on ini settings |
|
35
|
|
|
function ini_get($setting) |
|
36
|
|
|
{ |
|
37
|
|
|
if ($setting == 'memory_limit') { |
|
38
|
|
|
return '128M'; |
|
39
|
|
|
} |
|
40
|
|
|
return \ini_get($setting); |
|
41
|
|
|
} |
|
42
|
|
|
|
|
43
|
|
|
class PhpQuickProfilerTest extends PHPUnit_Framework_TestCase |
|
44
|
|
|
{ |
|
45
|
|
|
|
|
46
|
|
|
public function testConstruct() |
|
47
|
|
|
{ |
|
48
|
|
|
$startTime = microtime(true); |
|
49
|
|
|
|
|
50
|
|
|
$profiler = new PhpQuickProfiler(); |
|
51
|
|
|
$this->assertAttributeEquals($startTime, 'startTime', $profiler); |
|
52
|
|
|
|
|
53
|
|
|
$profiler = new PhpQuickProfiler($startTime); |
|
54
|
|
|
$this->assertAttributeEquals($startTime, 'startTime', $profiler); |
|
55
|
|
|
} |
|
56
|
|
|
|
|
57
|
|
|
public function testSetConsole() |
|
58
|
|
|
{ |
|
59
|
|
|
$console = new Console(); |
|
60
|
|
|
$profiler = new PhpQuickProfiler(); |
|
61
|
|
|
$profiler->setConsole($console); |
|
62
|
|
|
|
|
63
|
|
|
$this->assertAttributeSame($console, 'console', $profiler); |
|
64
|
|
|
} |
|
65
|
|
|
|
|
66
|
|
|
public function testSetDisplay() |
|
67
|
|
|
{ |
|
68
|
|
|
$display = new Display(); |
|
69
|
|
|
$profiler = new PhpQuickProfiler(); |
|
70
|
|
|
$profiler->setDisplay($display); |
|
71
|
|
|
|
|
72
|
|
|
$this->assertAttributeSame($display, 'display', $profiler); |
|
73
|
|
|
} |
|
74
|
|
|
|
|
75
|
|
View Code Duplication |
public function testGatherFileData() |
|
|
|
|
|
|
76
|
|
|
{ |
|
77
|
|
|
$files = get_included_files(); |
|
78
|
|
|
$profiler = new PhpQuickProfiler(); |
|
79
|
|
|
$gatheredFileData = $profiler->gatherFileData(); |
|
80
|
|
|
|
|
81
|
|
|
foreach ($gatheredFileData as $fileData) { |
|
82
|
|
|
$this->assertArrayHasKey('name', $fileData); |
|
83
|
|
|
$this->assertContains($fileData['name'], $files); |
|
84
|
|
|
$this->assertArrayHasKey('size', $fileData); |
|
85
|
|
|
$this->assertEquals($fileData['size'], filesize($fileData['name'])); |
|
86
|
|
|
} |
|
87
|
|
|
} |
|
88
|
|
|
|
|
89
|
|
View Code Duplication |
public function testGatherMemoryData() |
|
|
|
|
|
|
90
|
|
|
{ |
|
91
|
|
|
$memory_usage = memory_get_peak_usage(); |
|
92
|
|
|
$allowed_limit = ini_get('memory_limit'); |
|
93
|
|
|
$profiler = new PhpQuickProfiler(); |
|
94
|
|
|
$gatheredMemoryData = $profiler->gatherMemoryData(); |
|
95
|
|
|
|
|
96
|
|
|
$this->assertArrayHasKey('used', $gatheredMemoryData); |
|
97
|
|
|
$this->assertEquals($memory_usage, $gatheredMemoryData['used']); |
|
98
|
|
|
$this->assertArrayHasKey('allowed', $gatheredMemoryData); |
|
99
|
|
|
$this->assertEquals($allowed_limit, $gatheredMemoryData['allowed']); |
|
100
|
|
|
} |
|
101
|
|
|
|
|
102
|
|
|
public function testSetProfiledQueries() |
|
103
|
|
|
{ |
|
104
|
|
|
$profiledQueries = array( |
|
105
|
|
|
'sql' => 'SELECT * FROM example', |
|
106
|
|
|
'time' => 25 |
|
107
|
|
|
); |
|
108
|
|
|
$profiler = new PhpQuickProfiler(); |
|
109
|
|
|
$profiler->setProfiledQueries($profiledQueries); |
|
110
|
|
|
|
|
111
|
|
|
$this->assertAttributeEquals($profiledQueries, 'profiledQueries', $profiler); |
|
112
|
|
|
} |
|
113
|
|
|
} |
|
114
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.