]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blob - tests/phpunit/includes/libs/TimingTest.php
MediaWiki 1.30.2-scripts2
[autoinstalls/mediawiki.git] / tests / phpunit / includes / libs / TimingTest.php
1 <?php
2 /**
3  * This program is free software; you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License as published by
5  * the Free Software Foundation; either version 2 of the License, or
6  * (at your option) any later version.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License along
14  * with this program; if not, write to the Free Software Foundation, Inc.,
15  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16  * http://www.gnu.org/copyleft/gpl.html
17  *
18  * @file
19  * @author Ori Livneh <ori@wikimedia.org>
20  */
21
22 class TimingTest extends PHPUnit_Framework_TestCase {
23
24         /**
25          * @covers Timing::clearMarks
26          * @covers Timing::getEntries
27          */
28         public function testClearMarks() {
29                 $timing = new Timing;
30                 $this->assertCount( 1, $timing->getEntries() );
31
32                 $timing->mark( 'a' );
33                 $timing->mark( 'b' );
34                 $this->assertCount( 3, $timing->getEntries() );
35
36                 $timing->clearMarks( 'a' );
37                 $this->assertNull( $timing->getEntryByName( 'a' ) );
38                 $this->assertNotNull( $timing->getEntryByName( 'b' ) );
39
40                 $timing->clearMarks();
41                 $this->assertCount( 1, $timing->getEntries() );
42         }
43
44         /**
45          * @covers Timing::mark
46          * @covers Timing::getEntryByName
47          */
48         public function testMark() {
49                 $timing = new Timing;
50                 $timing->mark( 'a' );
51
52                 $entry = $timing->getEntryByName( 'a' );
53                 $this->assertEquals( 'a', $entry['name'] );
54                 $this->assertEquals( 'mark', $entry['entryType'] );
55                 $this->assertArrayHasKey( 'startTime', $entry );
56                 $this->assertEquals( 0, $entry['duration'] );
57
58                 usleep( 100 );
59                 $timing->mark( 'a' );
60                 $newEntry = $timing->getEntryByName( 'a' );
61                 $this->assertGreaterThan( $entry['startTime'], $newEntry['startTime'] );
62         }
63
64         /**
65          * @covers Timing::measure
66          */
67         public function testMeasure() {
68                 $timing = new Timing;
69
70                 $timing->mark( 'a' );
71                 usleep( 100 );
72                 $timing->mark( 'b' );
73
74                 $a = $timing->getEntryByName( 'a' );
75                 $b = $timing->getEntryByName( 'b' );
76
77                 $timing->measure( 'a_to_b', 'a', 'b' );
78
79                 $entry = $timing->getEntryByName( 'a_to_b' );
80                 $this->assertEquals( 'a_to_b', $entry['name'] );
81                 $this->assertEquals( 'measure', $entry['entryType'] );
82                 $this->assertEquals( $a['startTime'], $entry['startTime'] );
83                 $this->assertEquals( $b['startTime'] - $a['startTime'], $entry['duration'] );
84         }
85
86         /**
87          * @covers Timing::getEntriesByType
88          */
89         public function testGetEntriesByType() {
90                 $timing = new Timing;
91
92                 $timing->mark( 'mark_a' );
93                 usleep( 100 );
94                 $timing->mark( 'mark_b' );
95                 usleep( 100 );
96                 $timing->mark( 'mark_c' );
97
98                 $timing->measure( 'measure_a', 'mark_a', 'mark_b' );
99                 $timing->measure( 'measure_b', 'mark_b', 'mark_c' );
100
101                 $marks = array_map( function ( $entry ) {
102                         return $entry['name'];
103                 }, $timing->getEntriesByType( 'mark' ) );
104
105                 $this->assertEquals( [ 'requestStart', 'mark_a', 'mark_b', 'mark_c' ], $marks );
106
107                 $measures = array_map( function ( $entry ) {
108                         return $entry['name'];
109                 }, $timing->getEntriesByType( 'measure' ) );
110
111                 $this->assertEquals( [ 'measure_a', 'measure_b' ], $measures );
112         }
113 }