summaryrefslogtreecommitdiff
path: root/ext/phar/tests/files/pear2coverage.phar.php
blob: 621b0d07f8de1a2b751e4ae3c984dede2e72098b (plain)
ofshex dumpascii
0000 3c 3f 70 68 70 0a 66 75 6e 63 74 69 6f 6e 20 5f 5f 61 75 74 6f 6c 6f 61 64 28 24 63 6c 61 73 73 <?php.function.__autoload($class
0020 29 0a 7b 0a 20 20 20 20 24 63 6c 61 73 73 20 3d 20 73 74 72 5f 72 65 70 6c 61 63 65 28 22 50 45 ).{.....$class.=.str_replace("PE
0040 41 52 32 5c 50 79 72 75 73 5c 44 65 76 65 6c 6f 70 65 72 5c 43 6f 76 65 72 61 67 65 41 6e 61 6c AR2\Pyrus\Developer\CoverageAnal
0060 79 7a 65 72 22 2c 20 22 22 2c 20 24 63 6c 61 73 73 29 3b 0a 20 20 20 20 69 6e 63 6c 75 64 65 20 yzer",."",.$class);.....include.
0080 22 70 68 61 72 3a 2f 2f 22 20 2e 20 5f 5f 46 49 4c 45 5f 5f 20 2e 20 22 2f 22 20 2e 20 73 74 72 "phar://"...__FILE__..."/"...str
00a0 5f 72 65 70 6c 61 63 65 28 22 5c 5c 22 2c 20 22 2f 22 2c 20 24 63 6c 61 73 73 29 20 2e 20 22 2e _replace("\\",."/",.$class)...".
00c0 70 68 70 22 3b 0a 7d 0a 50 68 61 72 3a 3a 77 65 62 50 68 61 72 28 22 70 65 61 72 32 63 6f 76 65 php";.}.Phar::webPhar("pear2cove
00e0 72 61 67 65 2e 70 68 61 72 2e 70 68 70 22 29 3b 0a 65 63 68 6f 20 22 54 68 69 73 20 70 68 61 72 rage.phar.php");.echo."This.phar
0100 20 69 73 20 61 20 77 65 62 20 61 70 70 6c 69 63 61 74 69 6f 6e 2c 20 72 75 6e 20 77 69 74 68 69 .is.a.web.application,.run.withi
0120 6e 20 79 6f 75 72 20 77 65 62 20 62 72 6f 77 73 65 72 20 74 6f 20 75 73 65 5c 6e 22 3b 0a 65 78 n.your.web.browser.to.use\n";.ex
0140 69 74 20 2d 31 3b 0a 5f 5f 48 41 4c 54 5f 43 4f 4d 50 49 4c 45 52 28 29 3b 20 3f 3e 0d 0a bd 01 it.-1;.__HALT_COMPILER();.?>....
0160 00 00 0a 00 00 00 11 00 00 00 01 00 00 00 00 00 00 00 00 00 12 00 00 00 57 65 62 2f 43 6f 6e 74 ........................Web/Cont
0180 72 6f 6c 6c 65 72 2e 70 68 70 93 09 00 00 9b 30 e2 49 93 09 00 00 ba 8e 9e d5 b6 01 00 00 00 00 roller.php.....0.I..............
01a0 00 00 0c 00 00 00 57 65 62 2f 56 69 65 77 2e 70 68 70 53 3a 00 00 9b 30 e2 49 53 3a 00 00 4c 65 ......Web/View.phpS:...0.IS:..Le
01c0 04 16 b6 01 00 00 00 00 00 00 12 00 00 00 57 65 62 2f 41 67 67 72 65 67 61 74 6f 72 2e 70 68 70 ..............Web/Aggregator.php
01e0 10 13 00 00 9b 30 e2 49 10 13 00 00 dd ba 2e 62 b6 01 00 00 00 00 00 00 11 00 00 00 57 65 62 2f .....0.I.......b............Web/
0200 45 78 63 65 70 74 69 6f 6e 2e 70 68 70 68 00 00 00 9b 30 e2 49 68 00 00 00 05 1c 70 5a b6 01 00 Exception.phph....0.Ih.....pZ...
0220 00 00 00 00 00 0e 00 00 00 53 6f 75 72 63 65 46 69 6c 65 2e 70 68 70 3a 08 00 00 9b 30 e2 49 3a .........SourceFile.php:....0.I:
0240 08 00 00 7e 97 88 30 b6 01 00 00 00 00 00 00 0e 00 00 00 41 67 67 72 65 67 61 74 6f 72 2e 70 68 ...~..0............Aggregator.ph
0260 70 ac 16 00 00 9b 30 e2 49 ac 16 00 00 f6 33 6e 5c b6 01 00 00 00 00 00 00 0d 00 00 00 45 78 63 p.....0.I.....3n\............Exc
0280 65 70 74 69 6f 6e 2e 70 68 70 64 00 00 00 9b 30 e2 49 64 00 00 00 40 0d 95 94 b6 01 00 00 00 00 eption.phpd....0.Id...@.........
02a0 00 00 0a 00 00 00 53 71 6c 69 74 65 2e 70 68 70 30 58 00 00 9b 30 e2 49 30 58 00 00 b1 7b f7 2c ......Sqlite.php0X...0.I0X...{.,
02c0 b6 01 00 00 00 00 00 00 16 00 00 00 53 6f 75 72 63 65 46 69 6c 65 2f 50 65 72 54 65 73 74 2e 70 ............SourceFile/PerTest.p
02e0 68 70 85 04 00 00 9b 30 e2 49 85 04 00 00 f3 bd a4 52 b6 01 00 00 00 00 00 00 09 00 00 00 69 6e hp.....0.I.......R............in
0300 64 65 78 2e 70 68 70 46 01 00 00 9b 30 e2 49 46 01 00 00 6b 21 c2 5f b6 01 00 00 00 00 00 00 3c dex.phpF....0.IF...k!._........<
0320 3f 70 68 70 0a 6e 61 6d 65 73 70 61 63 65 20 50 45 41 52 32 5c 50 79 72 75 73 5c 44 65 76 65 6c ?php.namespace.PEAR2\Pyrus\Devel
0340 6f 70 65 72 5c 43 6f 76 65 72 61 67 65 41 6e 61 6c 79 7a 65 72 5c 57 65 62 20 7b 0a 75 73 65 20 oper\CoverageAnalyzer\Web.{.use.
0360 50 45 41 52 32 5c 50 79 72 75 73 5c 44 65 76 65 6c 6f 70 65 72 5c 43 6f 76 65 72 61 67 65 41 6e PEAR2\Pyrus\Developer\CoverageAn
0380 61 6c 79 7a 65 72 5c 53 71 6c 69 74 65 3b 0a 63 6c 61 73 73 20 43 6f 6e 74 72 6f 6c 6c 65 72 20 alyzer\Sqlite;.class.Controller.
03a0 7b 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 24 76 69 65 77 3b 0a 20 20 20 20 70 72 6f 74 65 {.....protected.$view;.....prote
03c0 63 74 65 64 20 24 73 71 6c 69 74 65 3b 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 24 72 6f 6f cted.$sqlite;.....protected.$roo
03e0 74 75 72 6c 3b 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 5f 5f 63 6f 6e 73 74 72 75 63 74 28 turl;......function.__construct(
0400 56 69 65 77 20 24 76 69 65 77 2c 20 24 72 6f 6f 74 75 72 6c 29 0a 20 20 20 20 7b 0a 20 20 20 20 View.$view,.$rooturl).....{.....
0420 20 20 20 20 24 74 68 69 73 2d 3e 76 69 65 77 20 3d 20 24 76 69 65 77 3b 0a 20 20 20 20 20 20 20 ....$this->view.=.$view;........
0440 20 24 76 69 65 77 2d 3e 73 65 74 43 6f 6e 74 72 6f 6c 6c 65 72 28 24 74 68 69 73 29 3b 0a 20 20 .$view->setController($this);...
0460 20 20 20 20 20 20 24 74 68 69 73 2d 3e 72 6f 6f 74 75 72 6c 20 3d 20 24 72 6f 6f 74 75 72 6c 3b ......$this->rooturl.=.$rooturl;
0480 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 6f 75 74 65 28 29 0a 20 20 20 .....}......function.route()....
04a0 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 69 73 73 65 74 28 24 5f 53 45 53 53 49 4f 4e 5b .{.........if.(!isset($_SESSION[
04c0 27 66 75 6c 6c 70 61 74 68 27 5d 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 'fullpath'])).{.............if.(
04e0 69 73 73 65 74 28 24 5f 50 4f 53 54 5b 27 73 65 74 64 61 74 61 62 61 73 65 27 5d 29 29 20 7b 0a isset($_POST['setdatabase'])).{.
0500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 69 6c 65 5f 65 78 69 73 74 73 28 ................if.(file_exists(
0520 24 5f 50 4f 53 54 5b 27 73 65 74 64 61 74 61 62 61 73 65 27 5d 29 29 20 7b 0a 20 20 20 20 20 20 $_POST['setdatabase'])).{.......
0540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 20 3d 20 6e 65 ..............$this->sqlite.=.ne
0560 77 20 5c 53 71 6c 69 74 65 33 28 24 5f 50 4f 53 54 5b 27 73 65 74 64 61 74 61 62 61 73 65 27 5d w.\Sqlite3($_POST['setdatabase']
0580 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 5f 53 45 53 53 49 4f 4e );.....................$_SESSION
05a0 5b 27 66 75 6c 6c 70 61 74 68 27 5d 20 3d 20 24 5f 50 4f 53 54 5b 27 73 65 74 64 61 74 61 62 61 ['fullpath'].=.$_POST['setdataba
05c0 73 65 27 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e se'];.....................return
05e0 20 24 74 68 69 73 2d 3e 76 69 65 77 2d 3e 54 4f 43 28 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 29 .$this->view->TOC($this->sqlite)
0600 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ;.................}.............
0620 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 67 65 74 44 }.............return.$this->getD
0640 61 74 61 62 61 73 65 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 atabase();.........}.else.{.....
0660 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 20 3d 20 6e 65 77 20 5c 53 71 6c ........$this->sqlite.=.new.\Sql
0680 69 74 65 33 28 24 5f 50 4f 53 54 5b 27 73 65 74 64 61 74 61 62 61 73 65 27 5d 29 3b 0a 20 20 20 ite3($_POST['setdatabase']);....
06a0 20 20 20 20 20 20 20 20 20 69 66 20 28 69 73 73 65 74 28 24 5f 47 45 54 5b 27 74 65 73 74 27 5d .........if.(isset($_GET['test']
06c0 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 24 5f 47 45 54 5b 27 )).{.................if.($_GET['
06e0 74 65 73 74 27 5d 20 3d 3d 3d 20 27 54 4f 43 27 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 test'].===.'TOC').{.............
0700 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 76 69 65 77 2d 3e 74 65 73 74 ........return.$this->view->test
0720 54 4f 43 28 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 TOC($this->sqlite);.............
0740 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 73 73 65 74 28 ....}.................if.(isset(
0760 24 5f 47 45 54 5b 27 66 69 6c 65 27 5d 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 $_GET['file'])).{...............
0780 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 76 69 65 77 2d 3e 66 69 6c 65 43 6f ......return.$this->view->fileCo
07a0 76 65 72 61 67 65 28 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2c 20 24 5f 47 45 54 5b 27 66 69 6c verage($this->sqlite,.$_GET['fil
07c0 65 27 5d 2c 20 24 5f 47 45 54 5b 27 74 65 73 74 27 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 e'],.$_GET['test']);............
07e0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 .....}.................return.$t
0800 68 69 73 2d 3e 76 69 65 77 2d 3e 74 65 73 74 54 4f 43 28 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 his->view->testTOC($this->sqlite
0820 2c 20 24 5f 47 45 54 5b 27 74 65 73 74 27 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a ,.$_GET['test']);.............}.
0840 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 73 73 65 74 28 24 5f 47 45 54 5b 27 66 69 6c ............if.(isset($_GET['fil
0860 65 27 5d 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 73 73 65 e'])).{.................if.(isse
0880 74 28 24 5f 47 45 54 5b 27 6c 69 6e 65 27 5d 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 t($_GET['line'])).{.............
08a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 76 69 65 77 2d 3e 66 69 6c 65 ........return.$this->view->file
08c0 4c 69 6e 65 54 4f 43 28 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2c 20 24 5f 47 45 54 5b 27 66 69 LineTOC($this->sqlite,.$_GET['fi
08e0 6c 65 27 5d 2c 20 24 5f 47 45 54 5b 27 6c 69 6e 65 27 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 le'],.$_GET['line']);...........
0900 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 ......}.................return.$
0920 74 68 69 73 2d 3e 76 69 65 77 2d 3e 66 69 6c 65 43 6f 76 65 72 61 67 65 28 24 74 68 69 73 2d 3e this->view->fileCoverage($this->
0940 73 71 6c 69 74 65 2c 20 24 5f 47 45 54 5b 27 66 69 6c 65 27 5d 29 3b 0a 20 20 20 20 20 20 20 20 sqlite,.$_GET['file']);.........
0960 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e ....}.............return.$this->
0980 76 69 65 77 2d 3e 54 4f 43 28 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 29 3b 0a 20 20 20 20 20 20 view->TOC($this->sqlite);.......
09a0 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 67 65 74 46 69 6c 65 4c ..}.....}......function.getFileL
09c0 69 6e 6b 28 24 66 69 6c 65 2c 20 24 74 65 73 74 20 3d 20 6e 75 6c 6c 2c 20 24 6c 69 6e 65 20 3d ink($file,.$test.=.null,.$line.=
09e0 20 6e 75 6c 6c 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 24 6c 69 6e 65 29 20 .null).....{.........if.($line).
0a00 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 72 6f 6f 74 {.............return.$this->root
0a20 75 72 6c 20 2e 20 27 3f 66 69 6c 65 3d 27 20 2e 20 75 72 6c 65 6e 63 6f 64 65 28 24 66 69 6c 65 url...'?file='...urlencode($file
0a40 29 20 2e 20 27 26 6c 69 6e 65 3d 27 20 2e 20 24 6c 69 6e 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a )...'&line='...$line;.........}.
0a60 20 20 20 20 20 20 20 20 69 66 20 28 24 74 65 73 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 ........if.($test).{............
0a80 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 72 6f 6f 74 75 72 6c 20 2e 20 27 3f 66 69 6c 65 3d .return.$this->rooturl...'?file=
0aa0 27 20 2e 20 75 72 6c 65 6e 63 6f 64 65 28 24 66 69 6c 65 29 20 2e 20 27 26 74 65 73 74 3d 27 20 '...urlencode($file)...'&test='.
0ac0 2e 20 24 74 65 73 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 ..$test;.........}.........retur
0ae0 6e 20 24 74 68 69 73 2d 3e 72 6f 6f 74 75 72 6c 20 2e 20 27 3f 66 69 6c 65 3d 27 20 2e 20 75 72 n.$this->rooturl...'?file='...ur
0b00 6c 65 6e 63 6f 64 65 28 24 66 69 6c 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 lencode($file);.....}......funct
0b20 69 6f 6e 20 67 65 74 54 4f 43 4c 69 6e 6b 28 24 74 65 73 74 20 3d 20 66 61 6c 73 65 29 0a 20 20 ion.getTOCLink($test.=.false)...
0b40 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 24 74 65 73 74 20 3d 3d 3d 20 66 61 6c 73 65 29 ..{.........if.($test.===.false)
0b60 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 72 6f 6f .{.............return.$this->roo
0b80 74 75 72 6c 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 28 24 74 65 73 turl;.........}.........if.($tes
0ba0 74 20 3d 3d 3d 20 74 72 75 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e t.===.true).{.............return
0bc0 20 24 74 68 69 73 2d 3e 72 6f 6f 74 75 72 6c 20 2e 20 27 3f 74 65 73 74 3d 54 4f 43 27 3b 0a 20 .$this->rooturl...'?test=TOC';..
0be0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 28 24 74 65 73 74 29 20 7b 0a 20 20 .......}.........if.($test).{...
0c00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 72 6f 6f 74 75 72 6c 20 ..........return.$this->rooturl.
0c20 2e 20 27 3f 74 65 73 74 3d 27 20 2e 20 75 72 6c 65 6e 63 6f 64 65 28 24 74 65 73 74 29 3b 0a 20 ..'?test='...urlencode($test);..
0c40 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 67 65 74 .......}.....}......function.get
0c60 44 61 74 61 62 61 73 65 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e Database().....{.........$this->
0c80 73 71 6c 69 74 65 20 3d 20 24 74 68 69 73 2d 3e 76 69 65 77 2d 3e 67 65 74 44 61 74 61 62 61 73 sqlite.=.$this->view->getDatabas
0ca0 65 28 29 3b 0a 20 20 20 20 7d 0a 7d 0a 7d 0a 3f 3e 0a 3c 3f 70 68 70 0a 6e 61 6d 65 73 70 61 63 e();.....}.}.}.?>.<?php.namespac
0cc0 65 20 50 45 41 52 32 5c 50 79 72 75 73 5c 44 65 76 65 6c 6f 70 65 72 5c 43 6f 76 65 72 61 67 65 e.PEAR2\Pyrus\Developer\Coverage
0ce0 41 6e 61 6c 79 7a 65 72 5c 57 65 62 20 7b 0a 2f 2a 2a 0a 20 2a 20 54 61 6b 65 73 20 61 20 73 6f Analyzer\Web.{./**..*.Takes.a.so
0d00 75 72 63 65 20 66 69 6c 65 20 61 6e 64 20 6f 75 74 70 75 74 73 20 48 54 4d 4c 20 73 6f 75 72 63 urce.file.and.outputs.HTML.sourc
0d20 65 20 68 69 67 68 6c 69 67 68 74 69 6e 67 20 73 68 6f 77 69 6e 67 20 74 68 65 0a 20 2a 20 6e 75 e.highlighting.showing.the..*.nu
0d40 6d 62 65 72 20 6f 66 20 68 69 74 73 20 6f 6e 20 65 61 63 68 20 6c 69 6e 65 2c 20 68 69 67 68 6c mber.of.hits.on.each.line,.highl
0d60 69 67 68 74 73 20 75 6e 2d 65 78 65 63 75 74 65 64 20 6c 69 6e 65 73 20 69 6e 20 72 65 64 0a 20 ights.un-executed.lines.in.red..
0d80 2a 2f 0a 63 6c 61 73 73 20 56 69 65 77 0a 7b 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 24 73 */.class.View.{.....protected.$s
0da0 61 76 65 50 61 74 68 3b 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 24 74 65 73 74 50 61 74 68 avePath;.....protected.$testPath
0dc0 3b 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 24 73 6f 75 72 63 65 50 61 74 68 3b 0a 20 20 20 ;.....protected.$sourcePath;....
0de0 20 70 72 6f 74 65 63 74 65 64 20 24 73 6f 75 72 63 65 3b 0a 20 20 20 20 70 72 6f 74 65 63 74 65 .protected.$source;.....protecte
0e00 64 20 24 63 6f 6e 74 72 6f 6c 6c 65 72 3b 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 67 65 74 d.$controller;......function.get
0e20 44 61 74 61 62 61 73 65 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 Database().....{.........$output
0e40 20 3d 20 6e 65 77 20 5c 58 4d 4c 57 72 69 74 65 72 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 .=.new.\XMLWriter;.........if.(!
0e60 24 6f 75 74 70 75 74 2d 3e 6f 70 65 6e 55 72 69 28 27 70 68 70 3a 2f 2f 6f 75 74 70 75 74 27 29 $output->openUri('php://output')
0e80 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 ).{.............throw.new.Except
0ea0 69 6f 6e 28 27 43 61 6e 6e 6f 74 20 6f 70 65 6e 20 6f 75 74 70 75 74 20 2d 20 74 68 69 73 20 73 ion('Cannot.open.output.-.this.s
0ec0 68 6f 75 6c 64 20 6e 65 76 65 72 20 68 61 70 70 65 6e 27 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a hould.never.happen');.........}.
0ee0 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 68 ........$output->startElement('h
0f00 74 6d 6c 27 29 3b 0a 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c tml');..........$output->startEl
0f20 65 6d 65 6e 74 28 27 68 65 61 64 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 ement('head');...........$output
0f40 2d 3e 77 72 69 74 65 45 6c 65 6d 65 6e 74 28 27 74 69 74 6c 65 27 2c 20 27 45 6e 74 65 72 20 61 ->writeElement('title',.'Enter.a
0f60 20 70 61 74 68 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 27 29 3b 0a 20 20 20 20 20 20 20 .path.to.the.database');........
0f80 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 ..$output->endElement();........
0fa0 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 62 6f 64 79 27 29 3b ..$output->startElement('body');
0fc0 0a 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 45 6c 65 6d 65 6e 74 ...........$output->writeElement
0fe0 28 27 68 32 27 2c 20 27 50 6c 65 61 73 65 20 65 6e 74 65 72 20 74 68 65 20 70 61 74 68 20 74 6f ('h2',.'Please.enter.the.path.to
1000 20 61 20 63 6f 76 65 72 61 67 65 20 64 61 74 61 62 61 73 65 27 29 3b 0a 20 20 20 20 20 20 20 20 .a.coverage.database');.........
1020 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 66 6f 72 6d 27 29 3b ..$output->startElement('form');
1040 0a 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 ............$output->writeAttrib
1060 75 74 65 28 27 6e 61 6d 65 27 2c 20 27 67 65 74 64 61 74 61 62 61 73 65 27 29 3b 0a 20 20 20 20 ute('name',.'getdatabase');.....
1080 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 .......$output->writeAttribute('
10a0 6d 65 74 68 6f 64 27 2c 20 27 50 4f 53 54 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 method',.'POST');............$ou
10c0 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 61 63 74 69 6f 6e 27 2c 20 24 tput->writeAttribute('action',.$
10e0 74 68 69 73 2d 3e 63 6f 6e 74 72 6f 6c 6c 65 72 2d 3e 67 65 74 54 4f 43 4c 69 6e 6b 28 29 29 3b this->controller->getTOCLink());
1100 0a 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e ............$output->startElemen
1120 74 28 27 69 6e 70 75 74 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d t('input');.............$output-
1140 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 74 79 70 65 27 2c 20 27 74 65 78 74 27 29 3b >writeAttribute('type',.'text');
1160 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 .............$output->writeAttri
1180 62 75 74 65 28 27 6e 61 6d 65 27 2c 20 27 73 65 74 64 61 74 61 62 61 73 65 27 29 3b 0a 20 20 20 bute('name',.'setdatabase');....
11a0 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 ........$output->endElement();..
11c0 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 ..........$output->startElement(
11e0 27 69 6e 70 75 74 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 'input');.............$output->w
1200 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 74 79 70 65 27 2c 20 27 73 75 62 6d 69 74 27 29 3b riteAttribute('type',.'submit');
1220 0a 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 ............$output->endElement(
1240 29 3b 0a 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 );...........$output->endElement
1260 28 29 3b 0a 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 ();..........$output->endElement
1280 28 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 ();.........$output->endElement(
12a0 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 44 6f 63 75 6d 65 6e 74 28 );.........$output->endDocument(
12c0 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 73 65 74 43 6f 6e 74 72 6f );.....}......function.setContro
12e0 6c 6c 65 72 28 24 63 6f 6e 74 72 6f 6c 6c 65 72 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 ller($controller).....{.........
1300 24 74 68 69 73 2d 3e 63 6f 6e 74 72 6f 6c 6c 65 72 20 3d 20 24 63 6f 6e 74 72 6f 6c 6c 65 72 3b $this->controller.=.$controller;
1320 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 54 4f 43 28 24 73 71 6c 69 74 65 .....}......function.TOC($sqlite
1340 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 63 6f 76 65 72 61 67 65 20 3d 20 24 73 71 6c ).....{.........$coverage.=.$sql
1360 69 74 65 2d 3e 72 65 74 72 69 65 76 65 50 72 6f 6a 65 63 74 43 6f 76 65 72 61 67 65 28 29 3b 0a ite->retrieveProjectCoverage();.
1380 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 72 65 6e 64 65 72 53 75 6d 6d 61 72 79 28 24 73 71 ........$this->renderSummary($sq
13a0 6c 69 74 65 2c 20 24 73 71 6c 69 74 65 2d 3e 72 65 74 72 69 65 76 65 50 61 74 68 73 28 29 2c 20 lite,.$sqlite->retrievePaths(),.
13c0 66 61 6c 73 65 2c 20 24 63 6f 76 65 72 61 67 65 5b 31 5d 2c 20 24 63 6f 76 65 72 65 64 5b 30 5d false,.$coverage[1],.$covered[0]
13e0 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 74 65 73 74 54 4f 43 28 24 );.....}......function.testTOC($
1400 73 71 6c 69 74 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 72 65 6e sqlite).....{.........$this->ren
1420 64 65 72 54 65 73 74 53 75 6d 6d 61 72 79 28 24 73 71 6c 69 74 65 29 3b 0a 20 20 20 20 7d 0a 0a derTestSummary($sqlite);.....}..
1440 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 66 69 6c 65 4c 69 6e 65 54 4f 43 28 24 73 71 6c 69 74 65 ....function.fileLineTOC($sqlite
1460 2c 20 24 66 69 6c 65 2c 20 24 6c 69 6e 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 0a 20 ,.$file,.$line).....{...........
1480 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 66 69 6c 65 43 6f 76 65 72 61 67 65 28 ...}......function.fileCoverage(
14a0 24 73 71 6c 69 74 65 2c 20 24 66 69 6c 65 2c 20 24 74 65 73 74 20 3d 20 6e 75 6c 6c 29 0a 20 20 $sqlite,.$file,.$test.=.null)...
14c0 20 20 7b 0a 20 20 20 20 20 20 20 20 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e ..{..............}......function
14e0 20 6d 61 6e 67 6c 65 46 69 6c 65 28 24 70 61 74 68 2c 20 24 69 73 74 65 73 74 20 3d 20 66 61 6c .mangleFile($path,.$istest.=.fal
1500 73 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e se).....{.........return.$this->
1520 63 6f 6e 74 72 6f 6c 6c 65 72 2d 3e 67 65 74 46 69 6c 65 4c 69 6e 6b 28 24 70 61 74 68 2c 20 24 controller->getFileLink($path,.$
1540 69 73 74 65 73 74 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6d 61 6e istest);.....}......function.man
1560 67 6c 65 54 65 73 74 46 69 6c 65 28 24 70 61 74 68 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 gleTestFile($path).....{........
1580 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 63 6f 6e 74 72 6f 6c 6c 65 72 2d 3e 67 65 74 54 4f .return.$this->controller->getTO
15a0 43 6c 69 6e 6b 28 24 70 61 74 68 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f Clink($path);.....}......functio
15c0 6e 20 67 65 74 4c 69 6e 65 4c 69 6e 6b 28 24 6e 61 6d 65 2c 20 24 6c 69 6e 65 29 0a 20 20 20 20 n.getLineLink($name,.$line).....
15e0 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 63 6f 6e 74 72 6f 6c 6c {.........return.$this->controll
1600 65 72 2d 3e 67 65 74 46 69 6c 65 4c 69 6e 6b 28 24 6e 61 6d 65 2c 20 6e 75 6c 6c 2c 20 24 6c 69 er->getFileLink($name,.null,.$li
1620 6e 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 6e 64 65 72 4c ne);.....}......function.renderL
1640 69 6e 65 53 75 6d 6d 61 72 79 28 24 6e 61 6d 65 2c 20 24 6c 69 6e 65 2c 20 24 74 65 73 74 70 61 ineSummary($name,.$line,.$testpa
1660 74 68 2c 20 24 74 65 73 74 73 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 th,.$tests).....{.........$outpu
1680 74 20 3d 20 6e 65 77 20 5c 58 4d 4c 57 72 69 74 65 72 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 t.=.new.\XMLWriter;.........if.(
16a0 21 24 6f 75 74 70 75 74 2d 3e 6f 70 65 6e 55 72 69 28 24 74 68 69 73 2d 3e 67 65 74 4c 69 6e 65 !$output->openUri($this->getLine
16c0 50 61 74 68 28 24 6e 61 6d 65 2c 20 24 6c 69 6e 65 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 Path($name,.$line))).{..........
16e0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 43 61 6e 6e 6f 74 20 72 ...throw.new.Exception('Cannot.r
1700 65 6e 64 65 72 20 27 20 2e 20 24 6e 61 6d 65 20 2e 20 27 20 6c 69 6e 65 20 27 20 2e 20 24 6c 69 ender.'...$name...'.line.'...$li
1720 6e 65 20 2e 20 27 2c 20 6f 70 65 6e 69 6e 67 20 58 4d 4c 20 66 61 69 6c 65 64 27 29 3b 0a 20 20 ne...',.opening.XML.failed');...
1740 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 65 74 49 6e 64 65 ......}.........$output->setInde
1760 6e 74 53 74 72 69 6e 67 28 27 20 27 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e ntString('.');.........$output->
1780 73 65 74 49 6e 64 65 6e 74 28 74 72 75 65 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 setIndent(true);.........$output
17a0 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 68 74 6d 6c 27 29 3b 0a 20 20 20 20 20 20 20 20 ->startElement('html');.........
17c0 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 68 65 61 64 27 29 3b 0a 20 $output->startElement('head');..
17e0 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 45 6c 65 6d 65 6e 74 28 27 74 69 .......$output->writeElement('ti
1800 74 6c 65 27 2c 20 27 54 65 73 74 73 20 63 6f 76 65 72 69 6e 67 20 6c 69 6e 65 20 27 20 2e 20 24 tle',.'Tests.covering.line.'...$
1820 6c 69 6e 65 20 2e 20 27 20 6f 66 20 27 20 2e 20 24 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 line...'.of.'...$name);.........
1840 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 6c 69 6e 6b 27 29 3b 0a 20 $output->startElement('link');..
1860 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 .......$output->writeAttribute('
1880 68 72 65 66 27 2c 20 27 63 6f 76 65 72 2e 63 73 73 27 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 href',.'cover.css');.........$ou
18a0 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 72 65 6c 27 2c 20 27 73 74 79 tput->writeAttribute('rel',.'sty
18c0 6c 65 73 68 65 65 74 27 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 lesheet');.........$output->writ
18e0 65 41 74 74 72 69 62 75 74 65 28 27 74 79 70 65 27 2c 20 27 74 65 78 74 2f 63 73 73 27 29 3b 0a eAttribute('type',.'text/css');.
1900 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 ........$output->endElement();..
1920 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 .......$output->endElement();...
1940 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 62 6f 64 ......$output->startElement('bod
1960 79 27 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 45 6c 65 6d 65 y');.........$output->writeEleme
1980 6e 74 28 27 68 32 27 2c 20 27 54 65 73 74 73 20 63 6f 76 65 72 69 6e 67 20 6c 69 6e 65 20 27 20 nt('h2',.'Tests.covering.line.'.
19a0 2e 20 24 6c 69 6e 65 20 2e 20 27 20 6f 66 20 27 20 2e 20 24 6e 61 6d 65 29 3b 0a 20 20 20 20 20 ..$line...'.of.'...$name);......
19c0 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 70 27 29 3b 0a 20 ...$output->startElement('p');..
19e0 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 61 27 .......$output->startElement('a'
1a00 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 );.........$output->writeAttribu
1a20 74 65 28 27 68 72 65 66 27 2c 20 27 69 6e 64 65 78 2e 68 74 6d 6c 27 29 3b 0a 20 20 20 20 20 20 te('href',.'index.html');.......
1a40 20 20 24 6f 75 74 70 75 74 2d 3e 74 65 78 74 28 27 41 67 67 72 65 67 61 74 65 20 43 6f 64 65 20 ..$output->text('Aggregate.Code.
1a60 43 6f 76 65 72 61 67 65 20 66 6f 72 20 61 6c 6c 20 74 65 73 74 73 27 29 3b 0a 20 20 20 20 20 20 Coverage.for.all.tests');.......
1a80 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 ..$output->endElement();........
1aa0 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 .$output->endElement();.........
1ac0 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 70 27 29 3b 0a 20 20 20 20 $output->startElement('p');.....
1ae0 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 61 27 29 3b 0a ....$output->startElement('a');.
1b00 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 ........$output->writeAttribute(
1b20 27 68 72 65 66 27 2c 20 24 74 68 69 73 2d 3e 6d 61 6e 67 6c 65 46 69 6c 65 28 24 6e 61 6d 65 29 'href',.$this->mangleFile($name)
1b40 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 74 65 78 74 28 27 46 69 6c 65 20 27 );.........$output->text('File.'
1b60 20 2e 20 24 6e 61 6d 65 20 2e 20 27 20 63 6f 64 65 20 63 6f 76 65 72 61 67 65 27 29 3b 0a 20 20 ...$name...'.code.coverage');...
1b80 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 ......$output->endElement();....
1ba0 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 .....$output->endElement();.....
1bc0 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 75 6c 27 29 3b ....$output->startElement('ul');
1be0 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 24 74 65 73 74 73 20 61 73 20 24 74 65 73 .........foreach.($tests.as.$tes
1c00 74 66 69 6c 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 tfile).{.............$output->st
1c20 61 72 74 45 6c 65 6d 65 6e 74 28 27 6c 69 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f artElement('li');.............$o
1c40 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 61 27 29 3b 0a 20 20 20 20 20 20 utput->startElement('a');.......
1c60 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 68 ......$output->writeAttribute('h
1c80 72 65 66 27 2c 20 24 74 68 69 73 2d 3e 6d 61 6e 67 6c 65 54 65 73 74 46 69 6c 65 28 24 74 65 73 ref',.$this->mangleTestFile($tes
1ca0 74 66 69 6c 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 74 65 tfile));.............$output->te
1cc0 78 74 28 73 74 72 5f 72 65 70 6c 61 63 65 28 24 74 65 73 74 70 61 74 68 20 2e 20 27 2f 27 2c 20 xt(str_replace($testpath...'/',.
1ce0 27 27 2c 20 24 74 65 73 74 66 69 6c 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 '',.$testfile));.............$ou
1d00 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 tput->endElement();.............
1d20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 7d $output->endElement();.........}
1d40 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a .........$output->endElement();.
1d60 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 ........$output->endElement();..
1d80 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 44 6f 63 75 6d 65 6e 74 28 29 3b 0a 20 .......$output->endDocument();..
1da0 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 50 45 41 52 ...}....../**......*.@param.PEAR
1dc0 32 5c 50 79 72 75 73 5c 44 65 76 65 6c 6f 70 65 72 5c 43 6f 64 65 43 6f 76 65 72 61 67 65 5c 53 2\Pyrus\Developer\CodeCoverage\S
1de0 6f 75 72 63 65 46 69 6c 65 20 24 73 6f 75 72 63 65 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 ourceFile.$source......*.@param.
1e00 73 74 72 69 6e 67 20 24 69 73 74 65 73 74 20 70 61 74 68 20 74 6f 20 74 65 73 74 20 66 69 6c 65 string.$istest.path.to.test.file
1e20 20 74 68 69 73 20 69 73 20 63 6f 76 65 72 69 6e 67 2c 20 6f 72 20 66 61 6c 73 65 20 66 6f 72 20 .this.is.covering,.or.false.for.
1e40 61 67 67 72 65 67 61 74 65 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 aggregate......*/.....function.r
1e60 65 6e 64 65 72 28 53 6f 75 72 63 65 46 69 6c 65 20 24 73 6f 75 72 63 65 2c 20 24 69 73 74 65 73 ender(SourceFile.$source,.$istes
1e80 74 20 3d 20 66 61 6c 73 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 t.=.false).....{.........$output
1ea0 20 3d 20 6e 65 77 20 5c 58 4d 4c 57 72 69 74 65 72 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 .=.new.\XMLWriter;.........if.(!
1ec0 24 6f 75 74 70 75 74 2d 3e 6f 70 65 6e 55 72 69 28 24 74 68 69 73 2d 3e 6d 61 6e 67 6c 65 50 61 $output->openUri($this->manglePa
1ee0 74 68 28 24 73 6f 75 72 63 65 2d 3e 6e 61 6d 65 28 29 2c 20 24 69 73 74 65 73 74 29 29 29 20 7b th($source->name(),.$istest))).{
1f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e .............throw.new.Exception
1f20 28 27 43 61 6e 6e 6f 74 20 72 65 6e 64 65 72 20 27 20 2e 20 24 73 6f 75 72 63 65 2d 3e 6e 61 6d ('Cannot.render.'...$source->nam
1f40 65 28 29 20 2e 20 27 2c 20 6f 70 65 6e 69 6e 67 20 58 4d 4c 20 66 61 69 6c 65 64 27 29 3b 0a 20 e()...',.opening.XML.failed');..
1f60 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 65 74 49 6e 64 .......}.........$output->setInd
1f80 65 6e 74 28 66 61 6c 73 65 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 ent(false);.........$output->sta
1fa0 72 74 45 6c 65 6d 65 6e 74 28 27 68 74 6d 6c 27 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 rtElement('html');.........$outp
1fc0 75 74 2d 3e 74 65 78 74 28 22 5c 6e 20 22 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 ut->text("\n.");.........$output
1fe0 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 68 65 61 64 27 29 3b 0a 20 20 20 20 20 20 20 20 ->startElement('head');.........
2000 24 6f 75 74 70 75 74 2d 3e 74 65 78 74 28 22 5c 6e 20 20 22 29 3b 0a 20 20 20 20 20 20 20 20 69 $output->text("\n..");.........i
2020 66 20 28 24 69 73 74 65 73 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 f.($istest).{.............$outpu
2040 74 2d 3e 77 72 69 74 65 45 6c 65 6d 65 6e 74 28 27 74 69 74 6c 65 27 2c 20 27 43 6f 64 65 20 43 t->writeElement('title',.'Code.C
2060 6f 76 65 72 61 67 65 20 66 6f 72 20 27 20 2e 20 24 73 6f 75 72 63 65 2d 3e 73 68 6f 72 74 4e 61 overage.for.'...$source->shortNa
2080 6d 65 28 29 20 2e 20 27 20 69 6e 20 27 20 2e 20 24 69 73 74 65 73 74 29 3b 0a 20 20 20 20 20 20 me()...'.in.'...$istest);.......
20a0 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e ..}.else.{.............$output->
20c0 77 72 69 74 65 45 6c 65 6d 65 6e 74 28 27 74 69 74 6c 65 27 2c 20 27 43 6f 64 65 20 43 6f 76 65 writeElement('title',.'Code.Cove
20e0 72 61 67 65 20 66 6f 72 20 27 20 2e 20 24 73 6f 75 72 63 65 2d 3e 73 68 6f 72 74 4e 61 6d 65 28 rage.for.'...$source->shortName(
2100 29 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 74 ));.........}.........$output->t
2120 65 78 74 28 22 5c 6e 20 20 22 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 ext("\n..");.........$output->st
2140 61 72 74 45 6c 65 6d 65 6e 74 28 27 6c 69 6e 6b 27 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 artElement('link');.........$out
2160 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 68 72 65 66 27 2c 20 27 63 6f 76 put->writeAttribute('href',.'cov
2180 65 72 2e 63 73 73 27 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 er.css');.........$output->write
21a0 41 74 74 72 69 62 75 74 65 28 27 72 65 6c 27 2c 20 27 73 74 79 6c 65 73 68 65 65 74 27 29 3b 0a Attribute('rel',.'stylesheet');.
21c0 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 ........$output->writeAttribute(
21e0 27 74 79 70 65 27 2c 20 27 74 65 78 74 2f 63 73 73 27 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 'type',.'text/css');.........$ou
2200 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 tput->endElement();.........$out
2220 70 75 74 2d 3e 74 65 78 74 28 22 5c 6e 20 20 22 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 put->text("\n..");.........$outp
2240 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 ut->endElement();.........$outpu
2260 74 2d 3e 74 65 78 74 28 22 5c 6e 20 22 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d t->text("\n.");.........$output-
2280 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 62 6f 64 79 27 29 3b 0a 20 20 20 20 20 20 20 20 24 >startElement('body');.........$
22a0 6f 75 74 70 75 74 2d 3e 74 65 78 74 28 22 5c 6e 20 22 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 output->text("\n.");.........if.
22c0 28 24 69 73 74 65 73 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d ($istest).{.............$output-
22e0 3e 77 72 69 74 65 45 6c 65 6d 65 6e 74 28 27 68 32 27 2c 20 27 43 6f 64 65 20 43 6f 76 65 72 61 >writeElement('h2',.'Code.Covera
2300 67 65 20 66 6f 72 20 27 20 2e 20 24 73 6f 75 72 63 65 2d 3e 73 68 6f 72 74 4e 61 6d 65 28 29 20 ge.for.'...$source->shortName().
2320 2e 20 27 20 69 6e 20 27 20 2e 20 24 69 73 74 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 20 65 ..'.in.'...$istest);.........}.e
2340 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 lse.{.............$output->write
2360 45 6c 65 6d 65 6e 74 28 27 68 32 27 2c 20 27 43 6f 64 65 20 43 6f 76 65 72 61 67 65 20 66 6f 72 Element('h2',.'Code.Coverage.for
2380 20 27 20 2e 20 24 73 6f 75 72 63 65 2d 3e 73 68 6f 72 74 4e 61 6d 65 28 29 29 3b 0a 20 20 20 20 .'...$source->shortName());.....
23a0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 74 65 78 74 28 22 5c 6e 20 ....}.........$output->text("\n.
23c0 22 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 45 6c 65 6d 65 6e ");.........$output->writeElemen
23e0 74 28 27 68 33 27 2c 20 27 43 6f 76 65 72 61 67 65 3a 20 27 20 2e 20 24 73 6f 75 72 63 65 2d 3e t('h3',.'Coverage:.'...$source->
2400 63 6f 76 65 72 61 67 65 50 65 72 63 65 6e 74 61 67 65 28 29 20 2e 20 27 25 27 29 3b 0a 20 20 20 coveragePercentage()...'%');....
2420 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 74 65 78 74 28 22 5c 6e 20 22 29 3b 0a 20 20 20 20 20 .....$output->text("\n.");......
2440 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 70 27 29 3b 0a 20 ...$output->startElement('p');..
2460 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 61 27 .......$output->startElement('a'
2480 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 );.........$output->writeAttribu
24a0 74 65 28 27 68 72 65 66 27 2c 20 27 69 6e 64 65 78 2e 68 74 6d 6c 27 29 3b 0a 20 20 20 20 20 20 te('href',.'index.html');.......
24c0 20 20 24 6f 75 74 70 75 74 2d 3e 74 65 78 74 28 27 41 67 67 72 65 67 61 74 65 20 43 6f 64 65 20 ..$output->text('Aggregate.Code.
24e0 43 6f 76 65 72 61 67 65 20 66 6f 72 20 61 6c 6c 20 74 65 73 74 73 27 29 3b 0a 20 20 20 20 20 20 Coverage.for.all.tests');.......
2500 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 ..$output->endElement();........
2520 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 .$output->endElement();.........
2540 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 70 72 65 27 29 3b 0a 20 20 $output->startElement('pre');...
2560 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 24 73 6f 75 72 63 65 2d 3e 73 6f 75 72 63 65 28 29 ......foreach.($source->source()
2580 20 61 73 20 24 6e 75 6d 20 3d 3e 20 24 6c 69 6e 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 .as.$num.=>.$line).{............
25a0 20 24 63 6f 76 65 72 61 67 65 20 3d 20 24 73 6f 75 72 63 65 2d 3e 63 6f 76 65 72 61 67 65 28 24 .$coverage.=.$source->coverage($
25c0 6e 75 6d 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 num);..............$output->star
25e0 74 45 6c 65 6d 65 6e 74 28 27 73 70 61 6e 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f tElement('span');.............$o
2600 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 63 6c 61 73 73 27 2c 20 27 utput->writeAttribute('class',.'
2620 6c 6e 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 74 65 78 74 28 ln');.............$output->text(
2640 73 74 72 5f 70 61 64 28 24 6e 75 6d 2c 20 38 2c 20 27 20 27 2c 20 53 54 52 5f 50 41 44 5f 4c 45 str_pad($num,.8,.'.',.STR_PAD_LE
2660 46 54 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c FT));.............$output->endEl
2680 65 6d 65 6e 74 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 24 63 6f 76 65 72 ement();..............if.($cover
26a0 61 67 65 20 3d 3d 3d 20 66 61 6c 73 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 age.===.false).{................
26c0 20 24 6f 75 74 70 75 74 2d 3e 74 65 78 74 28 73 74 72 5f 70 61 64 28 27 3a 20 27 2c 20 31 33 2c .$output->text(str_pad(':.',.13,
26e0 20 27 20 27 2c 20 53 54 52 5f 50 41 44 5f 4c 45 46 54 29 20 2e 20 24 6c 69 6e 65 29 3b 0a 20 20 .'.',.STR_PAD_LEFT)...$line);...
2700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 ..............continue;.........
2720 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 ....}..............$output->star
2740 74 45 6c 65 6d 65 6e 74 28 27 73 70 61 6e 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 tElement('span');.............if
2760 20 28 24 63 6f 76 65 72 61 67 65 20 3c 20 31 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 .($coverage.<.1).{..............
2780 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 63 6c 61 73 ...$output->writeAttribute('clas
27a0 73 27 2c 20 27 6e 63 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 s',.'nc');.................$outp
27c0 75 74 2d 3e 74 65 78 74 28 27 20 20 20 20 20 20 20 20 20 20 20 27 29 3b 0a 20 20 20 20 20 20 20 ut->text('...........');........
27e0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6f .....}.else.{.................$o
2800 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 63 6c 61 73 73 27 2c 20 27 utput->writeAttribute('class',.'
2820 63 76 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 24 69 73 74 65 cv');.................if.(!$iste
2840 73 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 st).{.....................$outpu
2860 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 61 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 t->startElement('a');...........
2880 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 ..........$output->writeAttribut
28a0 65 28 27 68 72 65 66 27 2c 20 24 74 68 69 73 2d 3e 67 65 74 4c 69 6e 65 4c 69 6e 6b 28 24 73 6f e('href',.$this->getLineLink($so
28c0 75 72 63 65 2d 3e 6e 61 6d 65 28 29 2c 20 24 6e 75 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 urce->name(),.$num));...........
28e0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d ......}.................$output-
2900 3e 74 65 78 74 28 73 74 72 5f 70 61 64 28 24 63 6f 76 65 72 61 67 65 2c 20 31 30 2c 20 27 20 27 >text(str_pad($coverage,.10,.'.'
2920 2c 20 53 54 52 5f 50 41 44 5f 4c 45 46 54 29 20 2e 20 27 20 27 29 3b 0a 20 20 20 20 20 20 20 20 ,.STR_PAD_LEFT)...'.');.........
2940 20 20 20 20 20 20 20 20 69 66 20 28 21 24 69 73 74 65 73 74 29 20 7b 0a 20 20 20 20 20 20 20 20 ........if.(!$istest).{.........
2960 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 ............$output->endElement(
2980 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 72 65 );.....................$this->re
29a0 6e 64 65 72 4c 69 6e 65 53 75 6d 6d 61 72 79 28 24 73 6f 75 72 63 65 2d 3e 6e 61 6d 65 28 29 2c nderLineSummary($source->name(),
29c0 20 24 6e 75 6d 2c 20 24 73 6f 75 72 63 65 2d 3e 74 65 73 74 70 61 74 68 28 29 2c 0a 20 20 20 20 .$num,.$source->testpath(),.....
29e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
2a00 20 20 20 20 20 20 20 20 20 24 73 6f 75 72 63 65 2d 3e 67 65 74 4c 69 6e 65 4c 69 6e 6b 73 28 24 .........$source->getLineLinks($
2a20 6e 75 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 num));.................}........
2a40 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 74 65 78 .....}..............$output->tex
2a60 74 28 27 3a 20 27 20 2e 20 20 24 6c 69 6e 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f t(':.'....$line);.............$o
2a80 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 utput->endElement();.........}..
2aa0 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 .......$output->endElement();...
2ac0 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 74 65 78 74 28 22 5c 6e 20 22 29 3b 0a 20 20 20 20 ......$output->text("\n.");.....
2ae0 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 ....$output->endElement();......
2b00 20 20 20 24 6f 75 74 70 75 74 2d 3e 74 65 78 74 28 22 5c 6e 20 22 29 3b 0a 20 20 20 20 20 20 20 ...$output->text("\n.");........
2b20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 .$output->endElement();.........
2b40 24 6f 75 74 70 75 74 2d 3e 65 6e 64 44 6f 63 75 6d 65 6e 74 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 $output->endDocument();.....}...
2b60 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 6e 64 65 72 53 75 6d 6d 61 72 79 28 41 67 67 72 65 67 ...function.renderSummary(Aggreg
2b80 61 74 6f 72 20 24 61 67 67 2c 20 61 72 72 61 79 20 24 72 65 73 75 6c 74 73 2c 20 24 69 73 74 65 ator.$agg,.array.$results,.$iste
2ba0 73 74 20 3d 20 66 61 6c 73 65 2c 20 24 74 6f 74 61 6c 20 3d 20 31 2c 20 24 63 6f 76 65 72 65 64 st.=.false,.$total.=.1,.$covered
2bc0 20 3d 20 31 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 20 3d 20 6e 65 .=.1).....{.........$output.=.ne
2be0 77 20 5c 58 4d 4c 57 72 69 74 65 72 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 24 6f 75 74 70 w.\XMLWriter;.........if.(!$outp
2c00 75 74 2d 3e 6f 70 65 6e 55 72 69 28 27 70 68 70 3a 2f 2f 6f 75 74 70 75 74 27 29 29 20 7b 0a 20 ut->openUri('php://output')).{..
2c20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 ...........throw.new.Exception('
2c40 43 61 6e 6e 6f 74 20 72 65 6e 64 65 72 20 74 65 73 74 20 73 75 6d 6d 61 72 79 2c 20 6f 70 65 6e Cannot.render.test.summary,.open
2c60 69 6e 67 20 58 4d 4c 20 66 61 69 6c 65 64 27 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ing.XML.failed');.........}.....
2c80 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 65 74 49 6e 64 65 6e 74 53 74 72 69 6e 67 28 27 20 27 ....$output->setIndentString('.'
2ca0 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 65 74 49 6e 64 65 6e 74 28 74 72 );.........$output->setIndent(tr
2cc0 75 65 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 ue);.........$output->startEleme
2ce0 6e 74 28 27 68 74 6d 6c 27 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 nt('html');.........$output->sta
2d00 72 74 45 6c 65 6d 65 6e 74 28 27 68 65 61 64 27 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 24 rtElement('head');.........if.($
2d20 69 73 74 65 73 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 istest).{.............$output->w
2d40 72 69 74 65 45 6c 65 6d 65 6e 74 28 27 74 69 74 6c 65 27 2c 20 27 43 6f 64 65 20 43 6f 76 65 72 riteElement('title',.'Code.Cover
2d60 61 67 65 20 53 75 6d 6d 61 72 79 20 5b 27 20 2e 20 24 69 73 74 65 73 74 20 2e 20 27 5d 27 29 3b age.Summary.['...$istest...']');
2d80 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f .........}.else.{.............$o
2da0 75 74 70 75 74 2d 3e 77 72 69 74 65 45 6c 65 6d 65 6e 74 28 27 74 69 74 6c 65 27 2c 20 27 43 6f utput->writeElement('title',.'Co
2dc0 64 65 20 43 6f 76 65 72 61 67 65 20 53 75 6d 6d 61 72 79 27 29 3b 0a 20 20 20 20 20 20 20 20 7d de.Coverage.Summary');.........}
2de0 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 .........$output->startElement('
2e00 6c 69 6e 6b 27 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 link');.........$output->writeAt
2e20 74 72 69 62 75 74 65 28 27 68 72 65 66 27 2c 20 27 63 6f 76 65 72 2e 63 73 73 27 29 3b 0a 20 20 tribute('href',.'cover.css');...
2e40 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 72 ......$output->writeAttribute('r
2e60 65 6c 27 2c 20 27 73 74 79 6c 65 73 68 65 65 74 27 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 el',.'stylesheet');.........$out
2e80 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 74 79 70 65 27 2c 20 27 74 65 78 put->writeAttribute('type',.'tex
2ea0 74 2f 63 73 73 27 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 t/css');.........$output->endEle
2ec0 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d ment();.........$output->endElem
2ee0 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 ent();.........$output->startEle
2f00 6d 65 6e 74 28 27 62 6f 64 79 27 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 24 69 73 74 65 73 ment('body');.........if.($istes
2f20 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 45 t).{.............$output->writeE
2f40 6c 65 6d 65 6e 74 28 27 68 32 27 2c 20 27 43 6f 64 65 20 43 6f 76 65 72 61 67 65 20 46 69 6c 65 lement('h2',.'Code.Coverage.File
2f60 73 20 66 6f 72 20 74 65 73 74 20 27 20 2e 20 24 69 73 74 65 73 74 29 3b 0a 20 20 20 20 20 20 20 s.for.test.'...$istest);........
2f80 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 .}.else.{.............$output->w
2fa0 72 69 74 65 45 6c 65 6d 65 6e 74 28 27 68 32 27 2c 20 27 43 6f 64 65 20 43 6f 76 65 72 61 67 65 riteElement('h2',.'Code.Coverage
2fc0 20 46 69 6c 65 73 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 .Files');.............$output->w
2fe0 72 69 74 65 45 6c 65 6d 65 6e 74 28 27 68 33 27 2c 20 27 54 6f 74 61 6c 20 6c 69 6e 65 73 3a 20 riteElement('h3',.'Total.lines:.
3000 27 20 2e 20 24 74 6f 74 61 6c 20 2e 20 27 2c 20 63 6f 76 65 72 65 64 20 6c 69 6e 65 73 3a 20 27 '...$total...',.covered.lines:.'
3020 20 2e 20 24 63 6f 76 65 72 65 64 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 70 65 72 63 65 ...$covered);.............$perce
3040 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 24 74 6f 74 61 6c 20 3e nt.=.0;.............if.($total.>
3060 20 30 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70 65 72 63 65 6e 74 20 3d .0).{.................$percent.=
3080 20 72 6f 75 6e 64 28 28 24 63 6f 76 65 72 65 64 20 2f 20 24 74 6f 74 61 6c 29 20 2a 20 31 30 30 .round(($covered./.$total).*.100
30a0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 );.............}.............$ou
30c0 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 70 27 29 3b 0a 20 20 20 20 20 20 20 tput->startElement('p');........
30e0 20 20 20 20 20 69 66 20 28 24 70 65 72 63 65 6e 74 20 3c 20 35 30 29 20 7b 0a 20 20 20 20 20 20 .....if.($percent.<.50).{.......
3100 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 ..........$output->writeAttribut
3120 65 28 27 63 6c 61 73 73 27 2c 20 27 62 61 64 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d e('class',.'bad');.............}
3140 20 65 6c 73 65 69 66 20 28 24 70 65 72 63 65 6e 74 20 3c 20 37 35 29 20 7b 0a 20 20 20 20 20 20 .elseif.($percent.<.75).{.......
3160 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 ..........$output->writeAttribut
3180 65 28 27 63 6c 61 73 73 27 2c 20 27 6f 6b 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 e('class',.'ok');.............}.
31a0 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e else.{.................$output->
31c0 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 63 6c 61 73 73 27 2c 20 27 67 6f 6f 64 27 29 3b writeAttribute('class',.'good');
31e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 .............}.............$outp
3200 75 74 2d 3e 74 65 78 74 28 24 70 65 72 63 65 6e 74 20 2e 20 27 25 20 63 6f 64 65 20 63 6f 76 65 ut->text($percent...'%.code.cove
3220 72 61 67 65 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 rage');.............$output->end
3240 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 24 6f 75 Element();.........}.........$ou
3260 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 70 27 29 3b 0a 20 20 20 20 20 20 20 tput->startElement('p');........
3280 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 61 27 29 3b 0a 20 20 20 .$output->startElement('a');....
32a0 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 68 72 .....$output->writeAttribute('hr
32c0 65 66 27 2c 20 24 74 68 69 73 2d 3e 63 6f 6e 74 72 6f 6c 6c 65 72 2d 3e 67 65 74 54 4f 43 4c 69 ef',.$this->controller->getTOCLi
32e0 6e 6b 28 74 72 75 65 29 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 74 65 78 74 nk(true));.........$output->text
3300 28 27 43 6f 64 65 20 43 6f 76 65 72 61 67 65 20 70 65 72 20 50 48 50 54 20 74 65 73 74 27 29 3b ('Code.Coverage.per.PHPT.test');
3320 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a .........$output->endElement();.
3340 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 ........$output->endElement();..
3360 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 75 6c .......$output->startElement('ul
3380 27 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 24 72 65 73 75 6c 74 73 20 61 73 ');.........foreach.($results.as
33a0 20 24 69 20 3d 3e 20 24 6e 61 6d 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 73 6f 75 .$i.=>.$name).{.............$sou
33c0 72 63 65 20 3d 20 6e 65 77 20 53 6f 75 72 63 65 46 69 6c 65 28 24 6e 61 6d 65 2c 20 24 61 67 67 rce.=.new.SourceFile($name,.$agg
33e0 2c 20 24 74 68 69 73 2d 3e 74 65 73 74 50 61 74 68 2c 20 24 74 68 69 73 2d 3e 73 6f 75 72 63 65 ,.$this->testPath,.$this->source
3400 50 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 Path);.............$output->star
3420 74 45 6c 65 6d 65 6e 74 28 27 6c 69 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 70 65 72 tElement('li');.............$per
3440 63 65 6e 74 20 3d 20 24 73 6f 75 72 63 65 2d 3e 63 6f 76 65 72 61 67 65 50 65 72 63 65 6e 74 61 cent.=.$source->coveragePercenta
3460 67 65 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 ge();.............$output->start
3480 45 6c 65 6d 65 6e 74 28 27 73 70 61 6e 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 Element('span');.............if.
34a0 28 24 70 65 72 63 65 6e 74 20 3c 20 35 30 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ($percent.<.50).{...............
34c0 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 63 6c 61 73 73 ..$output->writeAttribute('class
34e0 27 2c 20 27 62 61 64 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 ',.'bad');.............}.elseif.
3500 28 24 70 65 72 63 65 6e 74 20 3c 20 37 35 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ($percent.<.75).{...............
3520 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 63 6c 61 73 73 ..$output->writeAttribute('class
3540 27 2c 20 27 6f 6b 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 ',.'ok');.............}.else.{..
3560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 ...............$output->writeAtt
3580 72 69 62 75 74 65 28 27 63 6c 61 73 73 27 2c 20 27 67 6f 6f 64 27 29 3b 0a 20 20 20 20 20 20 20 ribute('class',.'good');........
35a0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 74 65 78 74 .....}.............$output->text
35c0 28 27 20 43 6f 76 65 72 61 67 65 3a 20 27 20 2e 20 73 74 72 5f 70 61 64 28 24 70 65 72 63 65 6e ('.Coverage:.'...str_pad($percen
35e0 74 20 2e 20 27 25 27 2c 20 34 2c 20 27 20 27 2c 20 53 54 52 5f 50 41 44 5f 4c 45 46 54 29 29 3b t...'%',.4,.'.',.STR_PAD_LEFT));
3600 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 .............$output->endElement
3620 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c ();.............$output->startEl
3640 65 6d 65 6e 74 28 27 61 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d ement('a');.............$output-
3660 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 68 72 65 66 27 2c 20 24 74 68 69 73 2d 3e 6d >writeAttribute('href',.$this->m
3680 61 6e 67 6c 65 46 69 6c 65 28 24 6e 61 6d 65 2c 20 24 69 73 74 65 73 74 29 29 3b 0a 20 20 20 20 angleFile($name,.$istest));.....
36a0 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 74 65 78 74 28 24 73 6f 75 72 63 65 2d 3e 73 ........$output->text($source->s
36c0 68 6f 72 74 4e 61 6d 65 28 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 hortName());.............$output
36e0 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 ->endElement();.............$out
3700 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 put->endElement();.........}....
3720 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 .....$output->endElement();.....
3740 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 ....$output->endElement();......
3760 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 44 6f 63 75 6d 65 6e 74 28 29 3b 0a 20 20 20 20 7d ...$output->endDocument();.....}
3780 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 6e 64 65 72 54 65 73 74 53 75 6d 6d 61 72 79 ......function.renderTestSummary
37a0 28 41 67 67 72 65 67 61 74 6f 72 20 24 61 67 67 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 (Aggregator.$agg).....{.........
37c0 24 6f 75 74 70 75 74 20 3d 20 6e 65 77 20 5c 58 4d 4c 57 72 69 74 65 72 3b 0a 20 20 20 20 20 20 $output.=.new.\XMLWriter;.......
37e0 20 20 69 66 20 28 21 24 6f 75 74 70 75 74 2d 3e 6f 70 65 6e 55 72 69 28 27 70 68 70 3a 2f 2f 6f ..if.(!$output->openUri('php://o
3800 75 74 70 75 74 27 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 utput')).{.................throw
3820 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 43 61 6e 6e 6f 74 20 72 65 6e 64 65 72 20 74 65 .new.Exception('Cannot.render.te
3840 73 74 73 20 73 75 6d 6d 61 72 79 2c 20 6f 70 65 6e 69 6e 67 20 58 4d 4c 20 66 61 69 6c 65 64 27 sts.summary,.opening.XML.failed'
3860 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 65 );.........}.........$output->se
3880 74 49 6e 64 65 6e 74 53 74 72 69 6e 67 28 27 20 27 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 tIndentString('.');.........$out
38a0 70 75 74 2d 3e 73 65 74 49 6e 64 65 6e 74 28 74 72 75 65 29 3b 0a 20 20 20 20 20 20 20 20 24 6f put->setIndent(true);.........$o
38c0 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 68 74 6d 6c 27 29 3b 0a 20 20 20 utput->startElement('html');....
38e0 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 68 65 61 64 .....$output->startElement('head
3900 27 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 45 6c 65 6d 65 6e ');.........$output->writeElemen
3920 74 28 27 74 69 74 6c 65 27 2c 20 27 54 65 73 74 20 53 75 6d 6d 61 72 79 27 29 3b 0a 20 20 20 20 t('title',.'Test.Summary');.....
3940 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 6c 69 6e 6b 27 ....$output->startElement('link'
3960 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 );.........$output->writeAttribu
3980 74 65 28 27 68 72 65 66 27 2c 20 27 63 6f 76 65 72 2e 63 73 73 27 29 3b 0a 20 20 20 20 20 20 20 te('href',.'cover.css');........
39a0 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 72 65 6c 27 2c 20 .$output->writeAttribute('rel',.
39c0 27 73 74 79 6c 65 73 68 65 65 74 27 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 'stylesheet');.........$output->
39e0 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 74 79 70 65 27 2c 20 27 74 65 78 74 2f 63 73 73 writeAttribute('type',.'text/css
3a00 27 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 ');.........$output->endElement(
3a20 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 );.........$output->endElement()
3a40 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 ;.........$output->startElement(
3a60 27 62 6f 64 79 27 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 45 'body');.........$output->writeE
3a80 6c 65 6d 65 6e 74 28 27 68 32 27 2c 20 27 54 65 73 74 73 20 45 78 65 63 75 74 65 64 2c 20 63 6c lement('h2',.'Tests.Executed,.cl
3aa0 69 63 6b 20 66 6f 72 20 63 6f 64 65 20 63 6f 76 65 72 61 67 65 20 73 75 6d 6d 61 72 79 27 29 3b ick.for.code.coverage.summary');
3ac0 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 .........$output->startElement('
3ae0 70 27 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 p');.........$output->startEleme
3b00 6e 74 28 27 61 27 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 nt('a');.........$output->writeA
3b20 74 74 72 69 62 75 74 65 28 27 68 72 65 66 27 2c 20 24 74 68 69 73 2d 3e 63 6f 6e 74 72 6f 6c 6c ttribute('href',.$this->controll
3b40 65 72 2d 3e 67 65 74 54 4f 43 6c 69 6e 6b 28 29 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 er->getTOClink());.........$outp
3b60 75 74 2d 3e 74 65 78 74 28 27 41 67 67 72 65 67 61 74 65 20 43 6f 64 65 20 43 6f 76 65 72 61 67 ut->text('Aggregate.Code.Coverag
3b80 65 20 66 6f 72 20 61 6c 6c 20 74 65 73 74 73 27 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 e.for.all.tests');.........$outp
3ba0 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 ut->endElement();.........$outpu
3bc0 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 t->endElement();.........$output
3be0 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 75 6c 27 29 3b 0a 20 20 20 20 20 20 20 20 66 6f ->startElement('ul');.........fo
3c00 72 65 61 63 68 20 28 24 61 67 67 2d 3e 72 65 74 72 69 65 76 65 54 65 73 74 50 61 74 68 73 28 29 reach.($agg->retrieveTestPaths()
3c20 20 61 73 20 24 74 65 73 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 .as.$test).{.............$output
3c40 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 6c 69 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 ->startElement('li');...........
3c60 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 61 27 29 3b 0a 20 20 ..$output->startElement('a');...
3c80 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 ..........$output->writeAttribut
3ca0 65 28 27 68 72 65 66 27 2c 20 24 74 68 69 73 2d 3e 6d 61 6e 67 6c 65 54 65 73 74 46 69 6c 65 28 e('href',.$this->mangleTestFile(
3cc0 24 74 65 73 74 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 74 65 $test));.............$output->te
3ce0 78 74 28 73 74 72 5f 72 65 70 6c 61 63 65 28 24 61 67 67 2d 3e 74 65 73 74 70 61 74 68 20 2e 20 xt(str_replace($agg->testpath...
3d00 27 2f 27 2c 20 27 27 2c 20 24 74 65 73 74 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f '/',.'',.$test));.............$o
3d20 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 utput->endElement();............
3d40 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 .$output->endElement();.........
3d60 7d 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b }.........$output->endElement();
3d80 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a .........$output->endElement();.
3da0 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 44 6f 63 75 6d 65 6e 74 28 29 3b 0a ........$output->endDocument();.
3dc0 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 6e 64 65 72 54 65 73 74 43 6f ....}......function.renderTestCo
3de0 76 65 72 61 67 65 28 41 67 67 72 65 67 61 74 6f 72 20 24 61 67 67 2c 20 24 74 65 73 74 70 61 74 verage(Aggregator.$agg,.$testpat
3e00 68 2c 20 24 74 65 73 74 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 72 65 6c 74 65 73 74 h,.$test).....{.........$reltest
3e20 20 3d 20 73 74 72 5f 72 65 70 6c 61 63 65 28 24 74 65 73 74 70 61 74 68 20 2e 20 27 2f 27 2c 20 .=.str_replace($testpath...'/',.
3e40 27 27 2c 20 24 74 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 20 3d 20 6e 65 '',.$test);.........$output.=.ne
3e60 77 20 5c 58 4d 4c 57 72 69 74 65 72 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 24 6f 75 74 70 w.\XMLWriter;.........if.(!$outp
3e80 75 74 2d 3e 6f 70 65 6e 55 72 69 28 27 70 68 70 3a 2f 2f 6f 75 74 70 75 74 27 29 29 20 7b 0a 20 ut->openUri('php://output')).{..
3ea0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 ...........throw.new.Exception('
3ec0 43 61 6e 6e 6f 74 20 72 65 6e 64 65 72 20 74 65 73 74 20 27 20 2e 20 24 72 65 6c 74 65 73 74 20 Cannot.render.test.'...$reltest.
3ee0 2e 20 27 20 63 6f 76 65 72 61 67 65 2c 20 6f 70 65 6e 69 6e 67 20 58 4d 4c 20 66 61 69 6c 65 64 ..'.coverage,.opening.XML.failed
3f00 27 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 ');.........}.............$outpu
3f20 74 2d 3e 73 65 74 49 6e 64 65 6e 74 53 74 72 69 6e 67 28 27 20 27 29 3b 0a 20 20 20 20 20 20 20 t->setIndentString('.');........
3f40 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 65 74 49 6e 64 65 6e 74 28 74 72 75 65 29 3b 0a 20 .....$output->setIndent(true);..
3f60 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 ...........$output->startElement
3f80 28 27 68 74 6d 6c 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 ('html');.............$output->s
3fa0 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 68 65 61 64 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 tartElement('head');............
3fc0 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 45 6c 65 6d 65 6e 74 28 27 74 69 74 6c 65 27 2c 20 .$output->writeElement('title',.
3fe0 27 43 6f 64 65 20 43 6f 76 65 72 61 67 65 20 53 75 6d 6d 61 72 79 20 66 6f 72 20 74 65 73 74 20 'Code.Coverage.Summary.for.test.
4000 27 20 2e 20 24 72 65 6c 74 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 '...$reltest);.............$outp
4020 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 6c 69 6e 6b 27 29 3b 0a 20 20 20 20 20 20 ut->startElement('link');.......
4040 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 68 ......$output->writeAttribute('h
4060 72 65 66 27 2c 20 27 63 6f 76 65 72 2e 63 73 73 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ref',.'cover.css');.............
4080 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 72 65 6c 27 2c 20 27 $output->writeAttribute('rel',.'
40a0 73 74 79 6c 65 73 68 65 65 74 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 stylesheet');.............$outpu
40c0 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 74 79 70 65 27 2c 20 27 74 65 78 74 2f t->writeAttribute('type',.'text/
40e0 63 73 73 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 css');.............$output->endE
4100 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 lement();.............$output->e
4120 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 ndElement();.............$output
4140 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 62 6f 64 79 27 29 3b 0a 20 20 20 20 20 20 20 20 ->startElement('body');.........
4160 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 45 6c 65 6d 65 6e 74 28 27 68 32 27 2c 20 ....$output->writeElement('h2',.
4180 27 43 6f 64 65 20 43 6f 76 65 72 61 67 65 20 46 69 6c 65 73 20 66 6f 72 20 74 65 73 74 20 27 20 'Code.Coverage.Files.for.test.'.
41a0 2e 20 24 72 65 6c 74 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 ..$reltest);.............$output
41c0 2d 3e 73 74 61 72 74 45 6c 65 6d 65 6e 74 28 27 75 6c 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 ->startElement('ul');...........
41e0 20 20 24 70 61 74 68 73 20 3d 20 24 61 67 67 2d 3e 72 65 74 72 69 65 76 65 50 61 74 68 73 46 6f ..$paths.=.$agg->retrievePathsFo
4200 72 54 65 73 74 28 24 74 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 rTest($test);.............foreac
4220 68 20 28 24 70 61 74 68 73 20 61 73 20 24 6e 61 6d 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 h.($paths.as.$name).{...........
4240 20 20 20 20 20 20 65 63 68 6f 20 27 2e 27 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ......echo.'.';.................
4260 24 73 6f 75 72 63 65 20 3d 20 6e 65 77 20 53 6f 75 72 63 65 46 69 6c 65 5c 50 65 72 54 65 73 74 $source.=.new.SourceFile\PerTest
4280 28 24 6e 61 6d 65 2c 20 24 61 67 67 2c 20 24 74 65 73 74 70 61 74 68 2c 20 24 62 61 73 65 50 61 ($name,.$agg,.$testpath,.$basePa
42a0 74 68 2c 20 24 74 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 74 68 69 th,.$test);.................$thi
42c0 73 2d 3e 72 65 6e 64 65 72 28 24 73 6f 75 72 63 65 2c 20 24 72 65 6c 74 65 73 74 29 3b 0a 20 20 s->render($source,.$reltest);...
42e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c 65 6d ..............$output->startElem
4300 65 6e 74 28 27 6c 69 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70 65 72 63 ent('li');.................$perc
4320 65 6e 74 20 3d 20 24 73 6f 75 72 63 65 2d 3e 63 6f 76 65 72 61 67 65 50 65 72 63 65 6e 74 61 67 ent.=.$source->coveragePercentag
4340 65 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 e();.................$output->st
4360 61 72 74 45 6c 65 6d 65 6e 74 28 27 73 70 61 6e 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 artElement('span');.............
4380 20 20 20 20 69 66 20 28 24 70 65 72 63 65 6e 74 20 3c 20 35 30 29 20 7b 0a 20 20 20 20 20 20 20 ....if.($percent.<.50).{........
43a0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 .............$output->writeAttri
43c0 62 75 74 65 28 27 63 6c 61 73 73 27 2c 20 27 62 61 64 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 bute('class',.'bad');...........
43e0 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 28 24 70 65 72 63 65 6e 74 20 3c 20 37 35 29 20 7b ......}.elseif.($percent.<.75).{
4400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 .....................$output->wr
4420 69 74 65 41 74 74 72 69 62 75 74 65 28 27 63 6c 61 73 73 27 2c 20 27 6f 6b 27 29 3b 0a 20 20 20 iteAttribute('class',.'ok');....
4440 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 .............}.else.{...........
4460 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 ..........$output->writeAttribut
4480 65 28 27 63 6c 61 73 73 27 2c 20 27 67 6f 6f 64 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 e('class',.'good');.............
44a0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 74 ....}.................$output->t
44c0 65 78 74 28 27 20 43 6f 76 65 72 61 67 65 3a 20 27 20 2e 20 73 74 72 5f 70 61 64 28 24 73 6f 75 ext('.Coverage:.'...str_pad($sou
44e0 72 63 65 2d 3e 63 6f 76 65 72 61 67 65 50 65 72 63 65 6e 74 61 67 65 28 29 20 2e 20 27 25 27 2c rce->coveragePercentage()...'%',
4500 20 34 2c 20 27 20 27 2c 20 53 54 52 5f 50 41 44 5f 4c 45 46 54 29 29 3b 0a 20 20 20 20 20 20 20 .4,.'.',.STR_PAD_LEFT));........
4520 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a .........$output->endElement();.
4540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 73 74 61 72 74 45 6c ................$output->startEl
4560 65 6d 65 6e 74 28 27 61 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 ement('a');.................$out
4580 70 75 74 2d 3e 77 72 69 74 65 41 74 74 72 69 62 75 74 65 28 27 68 72 65 66 27 2c 20 24 74 68 69 put->writeAttribute('href',.$thi
45a0 73 2d 3e 6d 61 6e 67 6c 65 46 69 6c 65 28 24 6e 61 6d 65 2c 20 24 72 65 6c 74 65 73 74 29 29 3b s->mangleFile($name,.$reltest));
45c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 74 65 78 74 28 24 .................$output->text($
45e0 73 6f 75 72 63 65 2d 3e 73 68 6f 72 74 4e 61 6d 65 28 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 source->shortName());...........
4600 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 ......$output->endElement();....
4620 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 .............$output->endElement
4640 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 63 ();.............}.............ec
4660 68 6f 20 22 64 6f 6e 65 5c 6e 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 70 75 74 ho."done\n";.............$output
4680 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 75 74 ->endElement();.............$out
46a0 70 75 74 2d 3e 65 6e 64 45 6c 65 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 put->endElement();.............$
46c0 6f 75 74 70 75 74 2d 3e 65 6e 64 44 6f 63 75 6d 65 6e 74 28 29 3b 0a 20 20 20 20 20 20 20 20 7d output->endDocument();.........}
46e0 0a 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 64 6f 6e 65 5c 6e 22 3b 0a 20 20 20 20 7d 0a 7d 0a .........echo."done\n";.....}.}.
4700 7d 0a 3f 3e 0a 3c 3f 70 68 70 0a 6e 61 6d 65 73 70 61 63 65 20 50 45 41 52 32 5c 50 79 72 75 73 }.?>.<?php.namespace.PEAR2\Pyrus
4720 5c 44 65 76 65 6c 6f 70 65 72 5c 43 6f 76 65 72 61 67 65 41 6e 61 6c 79 7a 65 72 5c 57 65 62 20 \Developer\CoverageAnalyzer\Web.
4740 7b 0a 75 73 65 20 50 45 41 52 32 5c 50 79 72 75 73 5c 44 65 76 65 6c 6f 70 65 72 5c 43 6f 76 65 {.use.PEAR2\Pyrus\Developer\Cove
4760 72 61 67 65 41 6e 61 6c 79 7a 65 72 3b 0a 63 6c 61 73 73 20 41 67 67 72 65 67 61 74 6f 72 20 65 rageAnalyzer;.class.Aggregator.e
4780 78 74 65 6e 64 73 20 43 6f 76 65 72 61 67 65 41 6e 61 6c 79 7a 65 72 5c 41 67 67 72 65 67 61 74 xtends.CoverageAnalyzer\Aggregat
47a0 6f 72 3b 0a 7b 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 24 63 6f 64 65 70 61 74 68 3b 0a 20 or;.{.....protected.$codepath;..
47c0 20 20 20 70 72 6f 74 65 63 74 65 64 20 24 74 65 73 74 70 61 74 68 3b 0a 20 20 20 20 70 72 6f 74 ...protected.$testpath;.....prot
47e0 65 63 74 65 64 20 24 73 71 6c 69 74 65 3b 0a 20 20 20 20 70 75 62 6c 69 63 20 24 74 6f 74 61 6c ected.$sqlite;.....public.$total
4800 6c 69 6e 65 73 20 3d 20 30 3b 0a 20 20 20 20 70 75 62 6c 69 63 20 24 74 6f 74 61 6c 63 6f 76 65 lines.=.0;.....public.$totalcove
4820 72 65 64 6c 69 6e 65 73 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 40 76 redlines.=.0;....../**......*.@v
4840 61 72 20 73 74 72 69 6e 67 20 24 74 65 73 74 70 61 74 68 20 4c 6f 63 61 74 69 6f 6e 20 6f 66 20 ar.string.$testpath.Location.of.
4860 2e 70 68 70 74 20 66 69 6c 65 73 0a 20 20 20 20 20 2a 20 40 76 61 72 20 73 74 72 69 6e 67 20 24 .phpt.files......*.@var.string.$
4880 63 6f 64 65 70 61 74 68 20 4c 6f 63 61 74 69 6f 6e 20 6f 66 20 63 6f 64 65 20 77 68 6f 73 65 20 codepath.Location.of.code.whose.
48a0 63 6f 76 65 72 61 67 65 20 77 65 20 61 72 65 20 74 65 73 74 69 6e 67 0a 20 20 20 20 20 2a 2f 0a coverage.we.are.testing......*/.
48c0 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 5f 5f 63 6f 6e 73 74 72 75 63 74 28 24 74 65 73 74 70 61 ....function.__construct($testpa
48e0 74 68 2c 20 24 63 6f 64 65 70 61 74 68 2c 20 24 64 62 20 3d 20 27 3a 6d 65 6d 6f 72 79 3a 27 29 th,.$codepath,.$db.=.':memory:')
4900 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 6e 65 77 63 6f 64 65 70 61 74 68 20 3d 20 72 65 .....{.........$newcodepath.=.re
4920 61 6c 70 61 74 68 28 24 63 6f 64 65 70 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 alpath($codepath);.........if.(!
4940 24 6e 65 77 63 6f 64 65 70 61 74 68 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 $newcodepath).{.............if.(
4960 21 73 74 72 70 6f 73 28 24 63 6f 64 65 70 61 74 68 2c 20 27 3a 2f 2f 27 29 20 7c 7c 20 21 66 69 !strpos($codepath,.'://').||.!fi
4980 6c 65 5f 65 78 69 73 74 73 28 24 63 6f 64 65 70 61 74 68 29 29 20 7b 0a 20 20 20 20 20 20 20 20 le_exists($codepath)).{.........
49a0 20 20 20 20 20 20 20 20 2f 2f 20 73 74 72 65 61 6d 20 77 72 61 70 70 65 72 20 6e 6f 74 20 66 6f ........//.stream.wrapper.not.fo
49c0 75 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 und.................throw.new.Ex
49e0 63 65 70 74 69 6f 6e 28 27 43 61 6e 20 6e 6f 74 20 66 69 6e 64 20 63 6f 64 65 20 70 61 74 68 20 ception('Can.not.find.code.path.
4a00 24 63 6f 64 65 70 61 74 68 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 $codepath');.............}......
4a20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 63 6f 64 65 70 61 74 ...}.else.{.............$codepat
4a40 68 20 3d 20 24 6e 65 77 63 6f 64 65 70 61 74 68 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 h.=.$newcodepath;.........}.....
4a60 20 20 20 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 20 3d 20 6e 65 77 20 53 71 6c 69 74 65 28 24 ....$this->sqlite.=.new.Sqlite($
4a80 63 6f 64 65 70 61 74 68 2c 20 24 64 62 29 3b 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 63 codepath,.$db);.........$this->c
4aa0 6f 64 65 70 61 74 68 20 3d 20 24 63 6f 64 65 70 61 74 68 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 odepath.=.$codepath;.....}......
4ac0 66 75 6e 63 74 69 6f 6e 20 72 65 74 72 69 65 76 65 4c 69 6e 65 4c 69 6e 6b 73 28 24 66 69 6c 65 function.retrieveLineLinks($file
4ae0 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 73 71 ).....{.........return.$this->sq
4b00 6c 69 74 65 2d 3e 72 65 74 72 69 65 76 65 4c 69 6e 65 4c 69 6e 6b 73 28 24 66 69 6c 65 29 3b 0a lite->retrieveLineLinks($file);.
4b20 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 72 69 65 76 65 50 61 74 68 ....}......function.retrievePath
4b40 73 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e s().....{.........return.$this->
4b60 73 71 6c 69 74 65 2d 3e 72 65 74 72 69 65 76 65 50 61 74 68 73 28 29 3b 0a 20 20 20 20 7d 0a 0a sqlite->retrievePaths();.....}..
4b80 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 72 69 65 76 65 50 61 74 68 73 46 6f 72 54 65 73 ....function.retrievePathsForTes
4ba0 74 28 24 74 65 73 74 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 t($test).....{.........return.$t
4bc0 68 69 73 2d 3e 73 71 6c 69 74 65 2d 3e 72 65 74 72 69 65 76 65 50 61 74 68 73 46 6f 72 54 65 73 his->sqlite->retrievePathsForTes
4be0 74 28 24 74 65 73 74 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 t($test);.....}......function.re
4c00 74 72 69 65 76 65 54 65 73 74 50 61 74 68 73 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 trieveTestPaths().....{.........
4c20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2d 3e 72 65 74 72 69 65 76 65 54 65 return.$this->sqlite->retrieveTe
4c40 73 74 50 61 74 68 73 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 63 stPaths();.....}......function.c
4c60 6f 76 65 72 61 67 65 50 65 72 63 65 6e 74 61 67 65 28 24 73 6f 75 72 63 65 66 69 6c 65 2c 20 24 overagePercentage($sourcefile,.$
4c80 74 65 73 74 66 69 6c 65 20 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 testfile.=.null).....{.........r
4ca0 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2d 3e 63 6f 76 65 72 61 67 65 50 65 72 eturn.$this->sqlite->coveragePer
4cc0 63 65 6e 74 61 67 65 28 24 73 6f 75 72 63 65 66 69 6c 65 2c 20 24 74 65 73 74 66 69 6c 65 29 3b centage($sourcefile,.$testfile);
4ce0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 63 6f 76 65 72 61 67 65 49 6e 66 .....}......function.coverageInf
4d00 6f 28 24 70 61 74 68 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 o($path).....{.........return.$t
4d20 68 69 73 2d 3e 73 71 6c 69 74 65 2d 3e 72 65 74 72 69 65 76 65 50 61 74 68 43 6f 76 65 72 61 67 his->sqlite->retrievePathCoverag
4d40 65 28 24 70 61 74 68 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 63 6f e($path);.....}......function.co
4d60 76 65 72 61 67 65 49 6e 66 6f 42 79 54 65 73 74 28 24 70 61 74 68 2c 20 24 74 65 73 74 29 0a 20 verageInfoByTest($path,.$test)..
4d80 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 ...{.........return.$this->sqlit
4da0 65 2d 3e 72 65 74 72 69 65 76 65 50 61 74 68 43 6f 76 65 72 61 67 65 42 79 54 65 73 74 28 24 70 e->retrievePathCoverageByTest($p
4dc0 61 74 68 2c 20 24 74 65 73 74 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e ath,.$test);.....}......function
4de0 20 72 65 74 72 69 65 76 65 43 6f 76 65 72 61 67 65 28 24 70 61 74 68 29 0a 20 20 20 20 7b 0a 20 .retrieveCoverage($path).....{..
4e00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2d 3e 72 65 74 .......return.$this->sqlite->ret
4e20 72 69 65 76 65 43 6f 76 65 72 61 67 65 28 24 70 61 74 68 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 rieveCoverage($path);.....}.....
4e40 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 72 69 65 76 65 43 6f 76 65 72 61 67 65 42 79 54 65 73 74 .function.retrieveCoverageByTest
4e60 28 24 70 61 74 68 2c 20 24 74 65 73 74 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 ($path,.$test).....{.........ret
4e80 75 72 6e 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2d 3e 72 65 74 72 69 65 76 65 43 6f 76 65 72 urn.$this->sqlite->retrieveCover
4ea0 61 67 65 42 79 54 65 73 74 28 24 70 61 74 68 2c 20 24 74 65 73 74 29 3b 0a 20 20 20 20 7d 0a 0a ageByTest($path,.$test);.....}..
4ec0 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 72 69 65 76 65 58 64 65 62 75 67 28 24 70 61 74 ....function.retrieveXdebug($pat
4ee0 68 2c 20 24 74 65 73 74 69 64 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 73 6f 75 72 63 h,.$testid).....{.........$sourc
4f00 65 20 3d 20 27 24 78 64 65 62 75 67 20 3d 20 27 20 2e 20 66 69 6c 65 5f 67 65 74 5f 63 6f 6e 74 e.=.'$xdebug.=.'...file_get_cont
4f20 65 6e 74 73 28 24 70 61 74 68 29 20 2e 20 22 3b 5c 6e 22 3b 0a 20 20 20 20 20 20 20 20 65 76 61 ents($path)...";\n";.........eva
4f40 6c 28 24 73 6f 75 72 63 65 29 3b 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 l($source);.........$this->sqlit
4f60 65 2d 3e 61 64 64 43 6f 76 65 72 61 67 65 28 73 74 72 5f 72 65 70 6c 61 63 65 28 27 2e 78 64 65 e->addCoverage(str_replace('.xde
4f80 62 75 67 27 2c 20 27 2e 70 68 70 74 27 2c 20 24 70 61 74 68 29 2c 20 24 74 65 73 74 69 64 2c 20 bug',.'.phpt',.$path),.$testid,.
4fa0 24 78 64 65 62 75 67 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 73 63 $xdebug);.....}......function.sc
4fc0 61 6e 28 24 74 65 73 74 70 61 74 68 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 61 20 3d an($testpath).....{.........$a.=
4fe0 20 24 74 65 73 74 70 61 74 68 3b 0a 20 20 20 20 20 20 20 20 24 74 65 73 74 70 61 74 68 20 3d 20 .$testpath;.........$testpath.=.
5000 72 65 61 6c 70 61 74 68 28 24 74 65 73 74 70 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 realpath($testpath);.........if.
5020 28 21 24 74 65 73 74 70 61 74 68 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 (!$testpath).{.............throw
5040 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 55 6e 61 62 6c 65 20 74 6f 20 70 72 6f 63 65 73 .new.Exception('Unable.to.proces
5060 73 20 70 61 74 68 27 20 2e 20 24 61 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 s.path'...$a);.........}........
5080 20 24 74 65 73 74 70 61 74 68 20 3d 20 73 74 72 5f 72 65 70 6c 61 63 65 28 27 5c 5c 27 2c 20 27 .$testpath.=.str_replace('\\',.'
50a0 2f 27 2c 20 24 74 65 73 74 70 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 74 /',.$testpath);.........$this->t
50c0 65 73 74 70 61 74 68 20 3d 20 24 74 65 73 74 70 61 74 68 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f estpath.=.$testpath;..........//
50e0 20 66 69 72 73 74 20 67 65 74 20 61 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 64 69 72 65 63 74 6f .first.get.a.list.of.all.directo
5100 72 69 65 73 0a 20 20 20 20 20 20 20 20 24 64 69 72 73 20 3d 20 24 67 6c 6f 62 64 69 72 73 20 3d ries.........$dirs.=.$globdirs.=
5120 20 61 72 72 61 79 28 29 3b 0a 20 20 20 20 20 20 20 20 24 69 6e 64 65 78 20 3d 20 30 3b 0a 20 20 .array();.........$index.=.0;...
5140 20 20 20 20 20 20 24 64 69 72 20 3d 20 24 74 65 73 74 70 61 74 68 3b 0a 20 20 20 20 20 20 20 20 ......$dir.=.$testpath;.........
5160 64 6f 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 67 6c 6f 62 64 69 72 73 20 3d 20 67 6c 6f do.{.............$globdirs.=.glo
5180 62 28 24 64 69 72 20 2e 20 27 2f 2a 27 2c 20 47 4c 4f 42 5f 4f 4e 4c 59 44 49 52 29 3b 0a 20 20 b($dir...'/*',.GLOB_ONLYDIR);...
51a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 24 67 6c 6f 62 64 69 72 73 29 20 7b 0a 20 20 20 20 20 ..........if.($globdirs).{......
51c0 20 20 20 20 20 20 20 20 20 20 20 24 64 69 72 73 20 3d 20 61 72 72 61 79 5f 6d 65 72 67 65 28 24 ...........$dirs.=.array_merge($
51e0 64 69 72 73 2c 20 24 67 6c 6f 62 64 69 72 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 dirs,.$globdirs);...............
5200 20 20 24 64 69 72 20 3d 20 24 64 69 72 73 5b 24 69 6e 64 65 78 2b 2b 5d 3b 0a 20 20 20 20 20 20 ..$dir.=.$dirs[$index++];.......
5220 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 ......}.else.{.................w
5240 68 69 6c 65 20 28 21 69 73 73 65 74 28 24 64 69 72 73 5b 24 69 6e 64 65 78 2b 2b 5d 29 20 26 26 hile.(!isset($dirs[$index++]).&&
5260 20 24 69 6e 64 65 78 20 3c 3d 20 63 6f 75 6e 74 28 24 64 69 72 73 29 29 3b 0a 20 20 20 20 20 20 .$index.<=.count($dirs));.......
5280 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 73 73 65 74 28 24 64 69 72 73 5b 24 69 6e 64 65 78 ..........if.(isset($dirs[$index
52a0 5d 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64 69 72 20 3d ])).{.....................$dir.=
52c0 20 24 64 69 72 73 5b 24 69 6e 64 65 78 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .$dirs[$index];.................
52e0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c 65 20 }.............}.........}.while.
5300 28 24 69 6e 64 65 78 20 3c 3d 20 63 6f 75 6e 74 28 24 64 69 72 73 29 29 3b 0a 0a 20 20 20 20 20 ($index.<=.count($dirs));.......
5320 20 20 20 2f 2f 20 74 68 65 6e 20 66 69 6e 64 20 61 6c 6c 20 63 6f 64 65 20 63 6f 76 65 72 61 67 ...//.then.find.all.code.coverag
5340 65 20 66 69 6c 65 73 0a 20 20 20 20 20 20 20 20 24 78 64 65 62 75 67 73 20 3d 20 61 72 72 61 79 e.files.........$xdebugs.=.array
5360 28 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 24 64 69 72 73 20 61 73 20 24 64 ();.........foreach.($dirs.as.$d
5380 69 72 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 67 6c 6f 62 62 69 65 20 3d 20 67 6c 6f ir).{.............$globbie.=.glo
53a0 62 28 24 64 69 72 20 2e 20 27 2f 2a 2e 78 64 65 62 75 67 27 29 3b 0a 20 20 20 20 20 20 20 20 20 b($dir...'/*.xdebug');..........
53c0 20 20 20 24 78 64 65 62 75 67 73 20 3d 20 61 72 72 61 79 5f 6d 65 72 67 65 28 24 78 64 65 62 75 ...$xdebugs.=.array_merge($xdebu
53e0 67 73 2c 20 24 67 6c 6f 62 62 69 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 gs,.$globbie);.........}........
5400 20 24 78 64 65 62 75 67 73 20 3d 20 61 72 72 61 79 5f 75 6e 69 71 75 65 28 24 78 64 65 62 75 67 .$xdebugs.=.array_unique($xdebug
5420 73 29 3b 0a 20 20 20 20 20 20 20 20 24 6d 6f 64 69 66 69 65 64 20 3d 20 61 72 72 61 79 28 29 3b s);.........$modified.=.array();
5440 0a 20 20 20 20 20 20 20 20 24 75 6e 6d 6f 64 69 66 69 65 64 20 3d 20 61 72 72 61 79 28 29 3b 0a .........$unmodified.=.array();.
5460 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 24 78 64 65 62 75 67 73 20 61 73 20 24 70 61 ........foreach.($xdebugs.as.$pa
5480 74 68 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 24 74 68 69 73 2d 3e 73 71 6c th).{.............if.($this->sql
54a0 69 74 65 2d 3e 75 6e 43 68 61 6e 67 65 64 58 64 65 62 75 67 28 24 70 61 74 68 29 29 20 7b 0a 20 ite->unChangedXdebug($path)).{..
54c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75 6e 6d 6f 64 69 66 69 65 64 5b 24 70 61 74 68 ...............$unmodified[$path
54e0 5d 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e ].=.true;.................contin
5500 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6d ue;.............}.............$m
5520 6f 64 69 66 69 65 64 5b 5d 20 3d 20 24 70 61 74 68 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 odified[].=.$path;.........}....
5540 20 20 20 20 20 24 78 64 65 62 75 67 73 20 3d 20 24 6d 6f 64 69 66 69 65 64 3b 0a 20 20 20 20 20 .....$xdebugs.=.$modified;......
5560 20 20 20 73 6f 72 74 28 24 78 64 65 62 75 67 73 29 3b 0a 20 20 20 20 20 20 20 20 2f 2f 20 69 6e ...sort($xdebugs);.........//.in
5580 64 65 78 20 66 72 6f 6d 20 31 0a 20 20 20 20 20 20 20 20 61 72 72 61 79 5f 75 6e 73 68 69 66 74 dex.from.1.........array_unshift
55a0 28 24 78 64 65 62 75 67 73 2c 20 27 27 29 3b 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74 28 24 78 ($xdebugs,.'');.........unset($x
55c0 64 65 62 75 67 73 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 24 74 65 73 74 20 3d 20 61 72 72 61 debugs[0]);.........$test.=.arra
55e0 79 5f 66 6c 69 70 28 24 78 64 65 62 75 67 73 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 y_flip($xdebugs);.........foreac
5600 68 20 28 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2d 3e 72 65 74 72 69 65 76 65 54 65 73 74 50 61 h.($this->sqlite->retrieveTestPa
5620 74 68 73 28 29 20 61 73 20 24 70 61 74 68 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 78 ths().as.$path).{.............$x
5640 64 65 62 75 67 70 61 74 68 20 3d 20 73 74 72 5f 72 65 70 6c 61 63 65 28 27 2e 70 68 70 74 27 2c debugpath.=.str_replace('.phpt',
5660 20 27 2e 78 64 65 62 75 67 27 2c 20 24 70 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 .'.xdebug',.$path);.............
5680 69 66 20 28 69 73 73 65 74 28 24 74 65 73 74 5b 24 78 64 65 62 75 67 70 61 74 68 5d 29 20 7c 7c if.(isset($test[$xdebugpath]).||
56a0 20 69 73 73 65 74 28 24 75 6e 6d 6f 64 69 66 69 65 64 5b 24 78 64 65 62 75 67 70 61 74 68 5d 29 .isset($unmodified[$xdebugpath])
56c0 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 ).{.................continue;...
56e0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6d 6f 76 ..........}.............//.remov
5700 65 20 6f 75 74 64 61 74 65 64 20 74 65 73 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 63 68 e.outdated.tests.............ech
5720 6f 20 22 52 65 6d 6f 76 69 6e 67 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 24 78 64 65 62 75 67 o."Removing.results.from.$xdebug
5740 70 61 74 68 5c 6e 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 73 71 6c 69 path\n";.............$this->sqli
5760 74 65 2d 3e 72 65 6d 6f 76 65 4f 6c 64 54 65 73 74 28 24 70 61 74 68 2c 20 24 78 64 65 62 75 67 te->removeOldTest($path,.$xdebug
5780 70 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 path);.........}.........return.
57a0 24 78 64 65 62 75 67 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 $xdebugs;.....}......function.re
57c0 6e 64 65 72 28 24 74 6f 50 61 74 68 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 64 65 63 nder($toPath).....{.........$dec
57e0 6f 72 61 74 6f 72 20 3d 20 6e 65 77 20 44 65 66 61 75 6c 74 53 6f 75 72 63 65 44 65 63 6f 72 61 orator.=.new.DefaultSourceDecora
5800 74 6f 72 28 24 74 6f 50 61 74 68 2c 20 24 74 68 69 73 2d 3e 74 65 73 74 70 61 74 68 2c 20 24 74 tor($toPath,.$this->testpath,.$t
5820 68 69 73 2d 3e 63 6f 64 65 70 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 47 65 his->codepath);.........echo."Ge
5840 6e 65 72 61 74 69 6e 67 20 70 72 6f 6a 65 63 74 20 63 6f 76 65 72 61 67 65 20 64 61 74 61 2e 2e nerating.project.coverage.data..
5860 2e 22 3b 0a 20 20 20 20 20 20 20 20 24 63 6f 76 65 72 61 67 65 20 3d 20 24 74 68 69 73 2d 3e 73 .";.........$coverage.=.$this->s
5880 71 6c 69 74 65 2d 3e 72 65 74 72 69 65 76 65 50 72 6f 6a 65 63 74 43 6f 76 65 72 61 67 65 28 29 qlite->retrieveProjectCoverage()
58a0 3b 0a 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 64 6f 6e 65 5c 6e 22 3b 0a 20 20 20 20 20 20 20 ;.........echo."done\n";........
58c0 20 24 64 65 63 6f 72 61 74 6f 72 2d 3e 72 65 6e 64 65 72 53 75 6d 6d 61 72 79 28 24 74 68 69 73 .$decorator->renderSummary($this
58e0 2c 20 24 74 68 69 73 2d 3e 72 65 74 72 69 65 76 65 50 61 74 68 73 28 29 2c 20 24 74 68 69 73 2d ,.$this->retrievePaths(),.$this-
5900 3e 63 6f 64 65 70 61 74 68 2c 20 66 61 6c 73 65 2c 20 24 63 6f 76 65 72 61 67 65 5b 31 5d 2c 20 >codepath,.false,.$coverage[1],.
5920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
5940 20 20 20 24 63 6f 76 65 72 61 67 65 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 24 61 20 3d 20 24 ...$coverage[0]);.........$a.=.$
5960 74 68 69 73 2d 3e 63 6f 64 65 70 61 74 68 3b 0a 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 5b 53 this->codepath;.........echo."[S
5980 74 65 70 20 32 20 6f 66 20 32 5d 20 52 65 6e 64 65 72 69 6e 67 20 70 65 72 2d 74 65 73 74 20 63 tep.2.of.2].Rendering.per-test.c
59a0 6f 76 65 72 61 67 65 2e 2e 2e 22 3b 0a 20 20 20 20 20 20 20 20 24 64 65 63 6f 72 61 74 6f 72 2d overage...";.........$decorator-
59c0 3e 72 65 6e 64 65 72 54 65 73 74 43 6f 76 65 72 61 67 65 28 24 74 68 69 73 2c 20 24 74 68 69 73 >renderTestCoverage($this,.$this
59e0 2d 3e 74 65 73 74 70 61 74 68 2c 20 24 61 29 3b 0a 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 64 ->testpath,.$a);.........echo."d
5a00 6f 6e 65 5c 6e 22 3b 0a 20 20 20 20 7d 0a 7d 0a 7d 0a 3f 3e 0a 3c 3f 70 68 70 0a 6e 61 6d 65 73 one\n";.....}.}.}.?>.<?php.names
5a20 70 61 63 65 20 50 45 41 52 32 5c 50 79 72 75 73 5c 44 65 76 65 6c 6f 70 65 72 5c 43 6f 76 65 72 pace.PEAR2\Pyrus\Developer\Cover
5a40 61 67 65 41 6e 61 6c 79 7a 65 72 5c 57 65 62 20 7b 0a 63 6c 61 73 73 20 45 78 63 65 70 74 69 6f ageAnalyzer\Web.{.class.Exceptio
5a60 6e 20 65 78 74 65 6e 64 73 20 5c 45 78 63 65 70 74 69 6f 6e 20 7b 7d 0a 7d 0a 3f 3e 0a 3c 3f 70 n.extends.\Exception.{}.}.?>.<?p
5a80 68 70 0a 6e 61 6d 65 73 70 61 63 65 20 50 45 41 52 32 5c 50 79 72 75 73 5c 44 65 76 65 6c 6f 70 hp.namespace.PEAR2\Pyrus\Develop
5aa0 65 72 5c 43 6f 76 65 72 61 67 65 41 6e 61 6c 79 7a 65 72 20 7b 0a 63 6c 61 73 73 20 53 6f 75 72 er\CoverageAnalyzer.{.class.Sour
5ac0 63 65 46 69 6c 65 0a 7b 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 24 73 6f 75 72 63 65 3b 0a ceFile.{.....protected.$source;.
5ae0 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 24 70 61 74 68 3b 0a 20 20 20 20 70 72 6f 74 65 63 74 ....protected.$path;.....protect
5b00 65 64 20 24 73 6f 75 72 63 65 70 61 74 68 3b 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 24 63 ed.$sourcepath;.....protected.$c
5b20 6f 76 65 72 61 67 65 3b 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 24 61 67 67 72 65 67 61 74 overage;.....protected.$aggregat
5b40 6f 72 3b 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 24 74 65 73 74 70 61 74 68 3b 0a 20 20 20 or;.....protected.$testpath;....
5b60 20 70 72 6f 74 65 63 74 65 64 20 24 6c 69 6e 65 6c 69 6e 6b 73 3b 0a 0a 20 20 20 20 66 75 6e 63 .protected.$linelinks;......func
5b80 74 69 6f 6e 20 5f 5f 63 6f 6e 73 74 72 75 63 74 28 24 70 61 74 68 2c 20 41 67 67 72 65 67 61 74 tion.__construct($path,.Aggregat
5ba0 6f 72 20 24 61 67 67 2c 20 24 74 65 73 74 70 61 74 68 2c 20 24 73 6f 75 72 63 65 70 61 74 68 29 or.$agg,.$testpath,.$sourcepath)
5bc0 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 73 6f 75 72 63 65 20 3d 20 66 .....{.........$this->source.=.f
5be0 69 6c 65 28 24 70 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 70 61 74 68 20 ile($path);.........$this->path.
5c00 3d 20 24 70 61 74 68 3b 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 73 6f 75 72 63 65 70 61 =.$path;.........$this->sourcepa
5c20 74 68 20 3d 20 24 73 6f 75 72 63 65 70 61 74 68 3b 0a 0a 20 20 20 20 20 20 20 20 61 72 72 61 79 th.=.$sourcepath;..........array
5c40 5f 75 6e 73 68 69 66 74 28 24 74 68 69 73 2d 3e 73 6f 75 72 63 65 2c 20 27 27 29 3b 0a 20 20 20 _unshift($this->source,.'');....
5c60 20 20 20 20 20 75 6e 73 65 74 28 24 74 68 69 73 2d 3e 73 6f 75 72 63 65 5b 30 5d 29 3b 20 2f 2f .....unset($this->source[0]);.//
5c80 20 6d 61 6b 65 20 73 6f 75 72 63 65 20 61 72 72 61 79 20 69 6e 64 65 78 65 64 20 62 79 20 6c 69 .make.source.array.indexed.by.li
5ca0 6e 65 20 6e 75 6d 62 65 72 0a 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 61 67 67 72 65 67 ne.number..........$this->aggreg
5cc0 61 74 6f 72 20 3d 20 24 61 67 67 3b 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 74 65 73 74 ator.=.$agg;.........$this->test
5ce0 70 61 74 68 20 3d 20 24 74 65 73 74 70 61 74 68 3b 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d path.=.$testpath;.........$this-
5d00 3e 73 65 74 43 6f 76 65 72 61 67 65 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 >setCoverage();.....}......funct
5d20 69 6f 6e 20 73 65 74 43 6f 76 65 72 61 67 65 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 ion.setCoverage().....{.........
5d40 24 74 68 69 73 2d 3e 63 6f 76 65 72 61 67 65 20 3d 20 24 74 68 69 73 2d 3e 61 67 67 72 65 67 61 $this->coverage.=.$this->aggrega
5d60 74 6f 72 2d 3e 72 65 74 72 69 65 76 65 43 6f 76 65 72 61 67 65 28 24 74 68 69 73 2d 3e 70 61 74 tor->retrieveCoverage($this->pat
5d80 68 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 61 67 67 72 65 67 61 74 h);.....}......function.aggregat
5da0 6f 72 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d or().....{.........return.$this-
5dc0 3e 61 67 67 72 65 67 61 74 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e >aggregator;.....}......function
5de0 20 74 65 73 74 70 61 74 68 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .testpath().....{.........return
5e00 20 24 74 68 69 73 2d 3e 74 65 73 74 70 61 74 68 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e .$this->testpath;.....}......fun
5e20 63 74 69 6f 6e 20 72 65 6e 64 65 72 28 41 62 73 74 72 61 63 74 53 6f 75 72 63 65 44 65 63 6f 72 ction.render(AbstractSourceDecor
5e40 61 74 6f 72 20 24 64 65 63 6f 72 61 74 6f 72 20 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 7b 0a 20 20 ator.$decorator.=.null).....{...
5e60 20 20 20 20 20 20 69 66 20 28 24 64 65 63 6f 72 61 74 6f 72 20 3d 3d 3d 20 6e 75 6c 6c 29 20 7b ......if.($decorator.===.null).{
5e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 64 65 63 6f 72 61 74 6f 72 20 3d 20 6e 65 77 20 44 65 .............$decorator.=.new.De
5ea0 66 61 75 6c 74 53 6f 75 72 63 65 44 65 63 6f 72 61 74 6f 72 28 27 2e 27 29 3b 0a 20 20 20 20 20 faultSourceDecorator('.');......
5ec0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 64 65 63 6f 72 61 74 6f 72 2d 3e ...}.........return.$decorator->
5ee0 72 65 6e 64 65 72 28 24 74 68 69 73 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 render($this);.....}......functi
5f00 6f 6e 20 63 6f 76 65 72 61 67 65 28 24 6c 69 6e 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 on.coverage($line).....{........
5f20 20 69 66 20 28 21 69 73 73 65 74 28 24 74 68 69 73 2d 3e 63 6f 76 65 72 61 67 65 5b 24 6c 69 6e .if.(!isset($this->coverage[$lin
5f40 65 5d 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b e])).{.............return.false;
5f60 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d .........}.........return.$this-
5f80 3e 63 6f 76 65 72 61 67 65 5b 24 6c 69 6e 65 5d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e >coverage[$line];.....}......fun
5fa0 63 74 69 6f 6e 20 63 6f 76 65 72 61 67 65 50 65 72 63 65 6e 74 61 67 65 28 29 0a 20 20 20 20 7b ction.coveragePercentage().....{
5fc0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 61 67 67 72 65 67 61 74 6f .........return.$this->aggregato
5fe0 72 2d 3e 63 6f 76 65 72 61 67 65 50 65 72 63 65 6e 74 61 67 65 28 24 74 68 69 73 2d 3e 70 61 74 r->coveragePercentage($this->pat
6000 68 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 28 29 0a 20 h);.....}......function.name()..
6020 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 70 61 74 68 3b ...{.........return.$this->path;
6040 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 72 74 4e 61 6d 65 28 29 .....}......function.shortName()
6060 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 74 72 5f 72 65 70 6c 61 63 .....{.........return.str_replac
6080 65 28 24 74 68 69 73 2d 3e 73 6f 75 72 63 65 70 61 74 68 20 2e 20 44 49 52 45 43 54 4f 52 59 5f e($this->sourcepath...DIRECTORY_
60a0 53 45 50 41 52 41 54 4f 52 2c 20 27 27 2c 20 24 74 68 69 73 2d 3e 70 61 74 68 29 3b 0a 20 20 20 SEPARATOR,.'',.$this->path);....
60c0 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 73 6f 75 72 63 65 28 29 0a 20 20 20 20 7b 0a .}......function.source().....{.
60e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 73 6f 75 72 63 65 3b 0a 20 20 ........return.$this->source;...
6100 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 63 6f 76 65 72 65 64 4c 69 6e 65 73 28 29 ..}......function.coveredLines()
6120 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 69 6e 66 6f 20 3d 20 24 74 68 69 73 2d 3e 61 67 .....{.........$info.=.$this->ag
6140 67 72 65 67 61 74 6f 72 2d 3e 63 6f 76 65 72 61 67 65 49 6e 66 6f 28 24 74 68 69 73 2d 3e 70 61 gregator->coverageInfo($this->pa
6160 74 68 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 69 6e 66 6f 5b 30 5d 3b 0a 20 20 th);.........return.$info[0];...
6180 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 67 65 74 4c 69 6e 65 4c 69 6e 6b 73 28 24 ..}......function.getLineLinks($
61a0 6c 69 6e 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 69 73 73 65 74 28 24 line).....{.........if.(!isset($
61c0 74 68 69 73 2d 3e 6c 69 6e 65 6c 69 6e 6b 73 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 this->linelinks)).{.............
61e0 24 74 68 69 73 2d 3e 6c 69 6e 65 6c 69 6e 6b 73 20 3d 20 24 74 68 69 73 2d 3e 61 67 67 72 65 67 $this->linelinks.=.$this->aggreg
6200 61 74 6f 72 2d 3e 72 65 74 72 69 65 76 65 4c 69 6e 65 4c 69 6e 6b 73 28 24 74 68 69 73 2d 3e 70 ator->retrieveLineLinks($this->p
6220 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 73 73 65 ath);.........}.........if.(isse
6240 74 28 24 74 68 69 73 2d 3e 6c 69 6e 65 6c 69 6e 6b 73 5b 24 6c 69 6e 65 5d 29 29 20 7b 0a 20 20 t($this->linelinks[$line])).{...
6260 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 6c 69 6e 65 6c 69 6e 6b ..........return.$this->linelink
6280 73 5b 24 6c 69 6e 65 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 s[$line];.........}.........retu
62a0 72 6e 20 66 61 6c 73 65 3b 0a 20 20 20 20 7d 0a 7d 0a 7d 0a 3f 3e 0a 3c 3f 70 68 70 0a 6e 61 6d rn.false;.....}.}.}.?>.<?php.nam
62c0 65 73 70 61 63 65 20 50 45 41 52 32 5c 50 79 72 75 73 5c 44 65 76 65 6c 6f 70 65 72 5c 43 6f 76 espace.PEAR2\Pyrus\Developer\Cov
62e0 65 72 61 67 65 41 6e 61 6c 79 7a 65 72 20 7b 0a 63 6c 61 73 73 20 41 67 67 72 65 67 61 74 6f 72 erageAnalyzer.{.class.Aggregator
6300 0a 7b 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 24 63 6f 64 65 70 61 74 68 3b 0a 20 20 20 20 .{.....protected.$codepath;.....
6320 70 72 6f 74 65 63 74 65 64 20 24 74 65 73 74 70 61 74 68 3b 0a 20 20 20 20 70 72 6f 74 65 63 74 protected.$testpath;.....protect
6340 65 64 20 24 73 71 6c 69 74 65 3b 0a 20 20 20 20 70 75 62 6c 69 63 20 24 74 6f 74 61 6c 6c 69 6e ed.$sqlite;.....public.$totallin
6360 65 73 20 3d 20 30 3b 0a 20 20 20 20 70 75 62 6c 69 63 20 24 74 6f 74 61 6c 63 6f 76 65 72 65 64 es.=.0;.....public.$totalcovered
6380 6c 69 6e 65 73 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 40 76 61 72 20 lines.=.0;....../**......*.@var.
63a0 73 74 72 69 6e 67 20 24 74 65 73 74 70 61 74 68 20 4c 6f 63 61 74 69 6f 6e 20 6f 66 20 2e 70 68 string.$testpath.Location.of..ph
63c0 70 74 20 66 69 6c 65 73 0a 20 20 20 20 20 2a 20 40 76 61 72 20 73 74 72 69 6e 67 20 24 63 6f 64 pt.files......*.@var.string.$cod
63e0 65 70 61 74 68 20 4c 6f 63 61 74 69 6f 6e 20 6f 66 20 63 6f 64 65 20 77 68 6f 73 65 20 63 6f 76 epath.Location.of.code.whose.cov
6400 65 72 61 67 65 20 77 65 20 61 72 65 20 74 65 73 74 69 6e 67 0a 20 20 20 20 20 2a 2f 0a 20 20 20 erage.we.are.testing......*/....
6420 20 66 75 6e 63 74 69 6f 6e 20 5f 5f 63 6f 6e 73 74 72 75 63 74 28 24 74 65 73 74 70 61 74 68 2c .function.__construct($testpath,
6440 20 24 63 6f 64 65 70 61 74 68 2c 20 24 64 62 20 3d 20 27 3a 6d 65 6d 6f 72 79 3a 27 29 0a 20 20 .$codepath,.$db.=.':memory:')...
6460 20 20 7b 0a 20 20 20 20 20 20 20 20 24 6e 65 77 63 6f 64 65 70 61 74 68 20 3d 20 72 65 61 6c 70 ..{.........$newcodepath.=.realp
6480 61 74 68 28 24 63 6f 64 65 70 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 24 6e 65 ath($codepath);.........if.(!$ne
64a0 77 63 6f 64 65 70 61 74 68 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 73 74 wcodepath).{.............if.(!st
64c0 72 70 6f 73 28 24 63 6f 64 65 70 61 74 68 2c 20 27 3a 2f 2f 27 29 20 7c 7c 20 21 66 69 6c 65 5f rpos($codepath,.'://').||.!file_
64e0 65 78 69 73 74 73 28 24 63 6f 64 65 70 61 74 68 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 exists($codepath)).{............
6500 20 20 20 20 20 2f 2f 20 73 74 72 65 61 6d 20 77 72 61 70 70 65 72 20 6e 6f 74 20 66 6f 75 6e 64 .....//.stream.wrapper.not.found
6520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 .................throw.new.Excep
6540 74 69 6f 6e 28 27 43 61 6e 20 6e 6f 74 20 66 69 6e 64 20 63 6f 64 65 20 70 61 74 68 20 24 63 6f tion('Can.not.find.code.path.$co
6560 64 65 70 61 74 68 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 depath');.............}.........
6580 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 63 6f 64 65 70 61 74 68 20 3d }.else.{.............$codepath.=
65a0 20 24 6e 65 77 63 6f 64 65 70 61 74 68 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 .$newcodepath;.........}........
65c0 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 20 3d 20 6e 65 77 20 53 71 6c 69 74 65 28 24 64 62 2c .$this->sqlite.=.new.Sqlite($db,
65e0 20 24 63 6f 64 65 70 61 74 68 2c 20 24 74 65 73 74 70 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 .$codepath,.$testpath);.........
6600 24 74 68 69 73 2d 3e 63 6f 64 65 70 61 74 68 20 3d 20 24 63 6f 64 65 70 61 74 68 3b 0a 20 20 20 $this->codepath.=.$codepath;....
6620 20 20 20 20 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2d 3e 62 65 67 69 6e 28 29 3b 0a 20 20 20 .....$this->sqlite->begin();....
6640 20 20 20 20 20 65 63 68 6f 20 22 53 63 61 6e 6e 69 6e 67 20 66 6f 72 20 78 64 65 62 75 67 20 63 .....echo."Scanning.for.xdebug.c
6660 6f 76 65 72 61 67 65 20 66 69 6c 65 73 2e 2e 2e 22 3b 0a 20 20 20 20 20 20 20 20 24 66 69 6c 65 overage.files...";.........$file
6680 73 20 3d 20 24 74 68 69 73 2d 3e 73 63 61 6e 28 24 74 65 73 74 70 61 74 68 29 3b 0a 20 20 20 20 s.=.$this->scan($testpath);.....
66a0 20 20 20 20 65 63 68 6f 20 22 64 6f 6e 65 5c 6e 22 3b 0a 20 20 20 20 20 20 20 20 24 69 6e 66 6f ....echo."done\n";.........$info
66c0 73 74 72 69 6e 67 20 3d 20 27 27 3b 0a 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 50 61 72 73 69 string.=.'';.........echo."Parsi
66e0 6e 67 20 78 64 65 62 75 67 20 72 65 73 75 6c 74 73 5c 6e 22 3b 0a 20 20 20 20 20 20 20 20 69 66 ng.xdebug.results\n";.........if
6700 20 28 63 6f 75 6e 74 28 24 66 69 6c 65 73 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 .(count($files)).{.............f
6720 6f 72 65 61 63 68 20 28 24 66 69 6c 65 73 20 61 73 20 24 74 65 73 74 69 64 20 3d 3e 20 24 78 64 oreach.($files.as.$testid.=>.$xd
6740 65 62 75 67 66 69 6c 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 ebugfile).{.................if.(
6760 21 66 69 6c 65 5f 65 78 69 73 74 73 28 73 74 72 5f 72 65 70 6c 61 63 65 28 27 2e 78 64 65 62 75 !file_exists(str_replace('.xdebu
6780 67 27 2c 20 27 2e 70 68 70 74 27 2c 20 24 78 64 65 62 75 67 66 69 6c 65 29 29 29 20 7b 0a 20 20 g',.'.phpt',.$xdebugfile))).{...
67a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 5c 6e 57 41 52 4e 49 4e ..................echo."\nWARNIN
67c0 47 3a 20 6f 75 74 64 61 74 65 64 20 2e 78 64 65 62 75 67 20 66 69 6c 65 20 24 78 64 65 62 75 67 G:.outdated..xdebug.file.$xdebug
67e0 66 69 6c 65 2c 20 64 65 6c 65 74 65 20 74 68 69 73 20 72 65 6c 69 63 5c 6e 22 3b 0a 20 20 20 20 file,.delete.this.relic\n";.....
6800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 ................continue;.......
6820 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 69 64 20 ..........}.................$id.
6840 3d 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2d 3e 61 64 64 54 65 73 74 28 73 74 72 5f 72 65 70 =.$this->sqlite->addTest(str_rep
6860 6c 61 63 65 28 27 2e 78 64 65 62 75 67 27 2c 20 27 2e 70 68 70 74 27 2c 20 24 78 64 65 62 75 67 lace('.xdebug',.'.phpt',.$xdebug
6880 66 69 6c 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 63 68 6f 20 27 28 27 file));.................echo.'('
68a0 20 2e 20 24 74 65 73 74 69 64 20 2e 20 27 20 6f 66 20 27 20 2e 20 63 6f 75 6e 74 28 24 66 69 6c ...$testid...'.of.'...count($fil
68c0 65 73 29 20 2e 20 27 29 20 27 20 2e 20 24 78 64 65 62 75 67 66 69 6c 65 3b 0a 20 20 20 20 20 20 es)...').'...$xdebugfile;.......
68e0 20 20 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 72 65 74 72 69 65 76 65 58 64 65 62 75 67 28 ..........$this->retrieveXdebug(
6900 24 78 64 65 62 75 67 66 69 6c 65 2c 20 24 69 64 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 $xdebugfile,.$id);..............
6920 20 20 20 65 63 68 6f 20 22 64 6f 6e 65 5c 6e 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a ...echo."done\n";.............}.
6940 20 20 20 20 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 64 6f 6e 65 5c 6e 22 3b 0a 20 20 20 20 20 ............echo."done\n";......
6960 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2d 3e 75 70 64 61 74 65 54 6f 74 61 .......$this->sqlite->updateTota
6980 6c 43 6f 76 65 72 61 67 65 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e lCoverage();.............$this->
69a0 73 71 6c 69 74 65 2d 3e 63 6f 6d 6d 69 74 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 sqlite->commit();.........}.else
69c0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 64 6f 6e 65 20 28 6e 6f 20 6d 6f .{.............echo."done.(no.mo
69e0 64 69 66 69 65 64 20 78 64 65 62 75 67 20 66 69 6c 65 73 29 5c 6e 22 3b 0a 20 20 20 20 20 20 20 dified.xdebug.files)\n";........
6a00 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 72 69 65 76 65 4c .}.....}......function.retrieveL
6a20 69 6e 65 4c 69 6e 6b 73 28 24 66 69 6c 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 ineLinks($file).....{.........re
6a40 74 75 72 6e 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2d 3e 72 65 74 72 69 65 76 65 4c 69 6e 65 turn.$this->sqlite->retrieveLine
6a60 4c 69 6e 6b 73 28 24 66 69 6c 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f Links($file);.....}......functio
6a80 6e 20 72 65 74 72 69 65 76 65 50 61 74 68 73 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 n.retrievePaths().....{.........
6aa0 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2d 3e 72 65 74 72 69 65 76 65 50 61 return.$this->sqlite->retrievePa
6ac0 74 68 73 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 72 69 ths();.....}......function.retri
6ae0 65 76 65 50 61 74 68 73 46 6f 72 54 65 73 74 28 24 74 65 73 74 29 0a 20 20 20 20 7b 0a 20 20 20 evePathsForTest($test).....{....
6b00 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2d 3e 72 65 74 72 69 .....return.$this->sqlite->retri
6b20 65 76 65 50 61 74 68 73 46 6f 72 54 65 73 74 28 24 74 65 73 74 29 3b 0a 20 20 20 20 7d 0a 0a 20 evePathsForTest($test);.....}...
6b40 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 72 69 65 76 65 54 65 73 74 50 61 74 68 73 28 29 0a ...function.retrieveTestPaths().
6b60 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 73 71 6c 69 ....{.........return.$this->sqli
6b80 74 65 2d 3e 72 65 74 72 69 65 76 65 54 65 73 74 50 61 74 68 73 28 29 3b 0a 20 20 20 20 7d 0a 0a te->retrieveTestPaths();.....}..
6ba0 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 63 6f 76 65 72 61 67 65 50 65 72 63 65 6e 74 61 67 65 28 ....function.coveragePercentage(
6bc0 24 73 6f 75 72 63 65 66 69 6c 65 2c 20 24 74 65 73 74 66 69 6c 65 20 3d 20 6e 75 6c 6c 29 0a 20 $sourcefile,.$testfile.=.null)..
6be0 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 ...{.........return.$this->sqlit
6c00 65 2d 3e 63 6f 76 65 72 61 67 65 50 65 72 63 65 6e 74 61 67 65 28 24 73 6f 75 72 63 65 66 69 6c e->coveragePercentage($sourcefil
6c20 65 2c 20 24 74 65 73 74 66 69 6c 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 e,.$testfile);.....}......functi
6c40 6f 6e 20 63 6f 76 65 72 61 67 65 49 6e 66 6f 28 24 70 61 74 68 29 0a 20 20 20 20 7b 0a 20 20 20 on.coverageInfo($path).....{....
6c60 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2d 3e 72 65 74 72 69 .....return.$this->sqlite->retri
6c80 65 76 65 50 61 74 68 43 6f 76 65 72 61 67 65 28 24 70 61 74 68 29 3b 0a 20 20 20 20 7d 0a 0a 20 evePathCoverage($path);.....}...
6ca0 20 20 20 66 75 6e 63 74 69 6f 6e 20 63 6f 76 65 72 61 67 65 49 6e 66 6f 42 79 54 65 73 74 28 24 ...function.coverageInfoByTest($
6cc0 70 61 74 68 2c 20 24 74 65 73 74 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 path,.$test).....{.........retur
6ce0 6e 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2d 3e 72 65 74 72 69 65 76 65 50 61 74 68 43 6f 76 n.$this->sqlite->retrievePathCov
6d00 65 72 61 67 65 42 79 54 65 73 74 28 24 70 61 74 68 2c 20 24 74 65 73 74 29 3b 0a 20 20 20 20 7d erageByTest($path,.$test);.....}
6d20 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 72 69 65 76 65 43 6f 76 65 72 61 67 65 28 ......function.retrieveCoverage(
6d40 24 70 61 74 68 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 $path).....{.........return.$thi
6d60 73 2d 3e 73 71 6c 69 74 65 2d 3e 72 65 74 72 69 65 76 65 43 6f 76 65 72 61 67 65 28 24 70 61 74 s->sqlite->retrieveCoverage($pat
6d80 68 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 72 69 65 76 65 h);.....}......function.retrieve
6da0 43 6f 76 65 72 61 67 65 42 79 54 65 73 74 28 24 70 61 74 68 2c 20 24 74 65 73 74 29 0a 20 20 20 CoverageByTest($path,.$test)....
6dc0 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2d .{.........return.$this->sqlite-
6de0 3e 72 65 74 72 69 65 76 65 43 6f 76 65 72 61 67 65 42 79 54 65 73 74 28 24 70 61 74 68 2c 20 24 >retrieveCoverageByTest($path,.$
6e00 74 65 73 74 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 72 69 test);.....}......function.retri
6e20 65 76 65 58 64 65 62 75 67 28 24 70 61 74 68 2c 20 24 74 65 73 74 69 64 29 0a 20 20 20 20 7b 0a eveXdebug($path,.$testid).....{.
6e40 20 20 20 20 20 20 20 20 24 73 6f 75 72 63 65 20 3d 20 27 24 78 64 65 62 75 67 20 3d 20 27 20 2e ........$source.=.'$xdebug.=.'..
6e60 20 66 69 6c 65 5f 67 65 74 5f 63 6f 6e 74 65 6e 74 73 28 24 70 61 74 68 29 20 2e 20 22 3b 5c 6e .file_get_contents($path)...";\n
6e80 22 3b 0a 20 20 20 20 20 20 20 20 65 76 61 6c 28 24 73 6f 75 72 63 65 29 3b 0a 20 20 20 20 20 20 ";.........eval($source);.......
6ea0 20 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2d 3e 61 64 64 43 6f 76 65 72 61 67 65 28 73 74 72 ..$this->sqlite->addCoverage(str
6ec0 5f 72 65 70 6c 61 63 65 28 27 2e 78 64 65 62 75 67 27 2c 20 27 2e 70 68 70 74 27 2c 20 24 70 61 _replace('.xdebug',.'.phpt',.$pa
6ee0 74 68 29 2c 20 24 74 65 73 74 69 64 2c 20 24 78 64 65 62 75 67 29 3b 0a 20 20 20 20 7d 0a 0a 20 th),.$testid,.$xdebug);.....}...
6f00 20 20 20 66 75 6e 63 74 69 6f 6e 20 73 63 61 6e 28 24 74 65 73 74 70 61 74 68 29 0a 20 20 20 20 ...function.scan($testpath).....
6f20 7b 0a 20 20 20 20 20 20 20 20 24 61 20 3d 20 24 74 65 73 74 70 61 74 68 3b 0a 20 20 20 20 20 20 {.........$a.=.$testpath;.......
6f40 20 20 24 74 65 73 74 70 61 74 68 20 3d 20 72 65 61 6c 70 61 74 68 28 24 74 65 73 74 70 61 74 68 ..$testpath.=.realpath($testpath
6f60 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 24 74 65 73 74 70 61 74 68 29 20 7b 0a 20 20 20 );.........if.(!$testpath).{....
6f80 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 55 6e .........throw.new.Exception('Un
6fa0 61 62 6c 65 20 74 6f 20 70 72 6f 63 65 73 73 20 70 61 74 68 27 20 2e 20 24 61 29 3b 0a 20 20 20 able.to.process.path'...$a);....
6fc0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 24 74 65 73 74 70 61 74 68 20 3d 20 73 74 72 5f 72 .....}.........$testpath.=.str_r
6fe0 65 70 6c 61 63 65 28 27 5c 5c 27 2c 20 27 2f 27 2c 20 24 74 65 73 74 70 61 74 68 29 3b 0a 20 20 eplace('\\',.'/',.$testpath);...
7000 20 20 20 20 20 20 24 74 68 69 73 2d 3e 74 65 73 74 70 61 74 68 20 3d 20 24 74 65 73 74 70 61 74 ......$this->testpath.=.$testpat
7020 68 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 66 69 72 73 74 20 67 65 74 20 61 20 6c 69 73 74 20 h;..........//.first.get.a.list.
7040 6f 66 20 61 6c 6c 20 64 69 72 65 63 74 6f 72 69 65 73 0a 20 20 20 20 20 20 20 20 24 64 69 72 73 of.all.directories.........$dirs
7060 20 3d 20 24 67 6c 6f 62 64 69 72 73 20 3d 20 61 72 72 61 79 28 29 3b 0a 20 20 20 20 20 20 20 20 .=.$globdirs.=.array();.........
7080 24 69 6e 64 65 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 24 64 69 72 20 3d 20 24 74 65 73 74 $index.=.0;.........$dir.=.$test
70a0 70 61 74 68 3b 0a 20 20 20 20 20 20 20 20 64 6f 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 path;.........do.{.............$
70c0 67 6c 6f 62 64 69 72 73 20 3d 20 67 6c 6f 62 28 24 64 69 72 20 2e 20 27 2f 2a 27 2c 20 47 4c 4f globdirs.=.glob($dir...'/*',.GLO
70e0 42 5f 4f 4e 4c 59 44 49 52 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 24 67 6c 6f B_ONLYDIR);.............if.($glo
7100 62 64 69 72 73 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64 69 72 73 20 3d bdirs).{.................$dirs.=
7120 20 61 72 72 61 79 5f 6d 65 72 67 65 28 24 64 69 72 73 2c 20 24 67 6c 6f 62 64 69 72 73 29 3b 0a .array_merge($dirs,.$globdirs);.
7140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64 69 72 20 3d 20 24 64 69 72 73 5b 24 69 6e ................$dir.=.$dirs[$in
7160 64 65 78 2b 2b 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 dex++];.............}.else.{....
7180 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 21 69 73 73 65 74 28 24 64 69 72 73 .............while.(!isset($dirs
71a0 5b 24 69 6e 64 65 78 2b 2b 5d 29 20 26 26 20 24 69 6e 64 65 78 20 3c 3d 20 63 6f 75 6e 74 28 24 [$index++]).&&.$index.<=.count($
71c0 64 69 72 73 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 73 73 65 dirs));.................if.(isse
71e0 74 28 24 64 69 72 73 5b 24 69 6e 64 65 78 5d 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 t($dirs[$index])).{.............
7200 20 20 20 20 20 20 20 20 24 64 69 72 20 3d 20 24 64 69 72 73 5b 24 69 6e 64 65 78 5d 3b 0a 20 20 ........$dir.=.$dirs[$index];...
7220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 ..............}.............}...
7240 20 20 20 20 20 20 7d 20 77 68 69 6c 65 20 28 24 69 6e 64 65 78 20 3c 3d 20 63 6f 75 6e 74 28 24 ......}.while.($index.<=.count($
7260 64 69 72 73 29 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 74 68 65 6e 20 66 69 6e 64 20 61 6c dirs));..........//.then.find.al
7280 6c 20 63 6f 64 65 20 63 6f 76 65 72 61 67 65 20 66 69 6c 65 73 0a 20 20 20 20 20 20 20 20 24 78 l.code.coverage.files.........$x
72a0 64 65 62 75 67 73 20 3d 20 61 72 72 61 79 28 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 debugs.=.array();.........foreac
72c0 68 20 28 24 64 69 72 73 20 61 73 20 24 64 69 72 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 h.($dirs.as.$dir).{.............
72e0 24 67 6c 6f 62 62 69 65 20 3d 20 67 6c 6f 62 28 24 64 69 72 20 2e 20 27 2f 2a 2e 78 64 65 62 75 $globbie.=.glob($dir...'/*.xdebu
7300 67 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 78 64 65 62 75 67 73 20 3d 20 61 72 72 61 g');.............$xdebugs.=.arra
7320 79 5f 6d 65 72 67 65 28 24 78 64 65 62 75 67 73 2c 20 24 67 6c 6f 62 62 69 65 29 3b 0a 20 20 20 y_merge($xdebugs,.$globbie);....
7340 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 24 78 64 65 62 75 67 73 20 3d 20 61 72 72 61 79 5f .....}.........$xdebugs.=.array_
7360 75 6e 69 71 75 65 28 24 78 64 65 62 75 67 73 29 3b 0a 20 20 20 20 20 20 20 20 24 6d 6f 64 69 66 unique($xdebugs);.........$modif
7380 69 65 64 20 3d 20 61 72 72 61 79 28 29 3b 0a 20 20 20 20 20 20 20 20 24 75 6e 6d 6f 64 69 66 69 ied.=.array();.........$unmodifi
73a0 65 64 20 3d 20 61 72 72 61 79 28 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 24 ed.=.array();.........foreach.($
73c0 78 64 65 62 75 67 73 20 61 73 20 24 70 61 74 68 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 xdebugs.as.$path).{.............
73e0 69 66 20 28 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2d 3e 75 6e 43 68 61 6e 67 65 64 58 64 65 62 if.($this->sqlite->unChangedXdeb
7400 75 67 28 24 70 61 74 68 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75 6e ug($path)).{.................$un
7420 6d 6f 64 69 66 69 65 64 5b 24 70 61 74 68 5d 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 modified[$path].=.true;.........
7440 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a ........continue;.............}.
7460 20 20 20 20 20 20 20 20 20 20 20 20 24 6d 6f 64 69 66 69 65 64 5b 5d 20 3d 20 24 70 61 74 68 3b ............$modified[].=.$path;
7480 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 24 78 64 65 62 75 67 73 20 3d 20 24 6d .........}.........$xdebugs.=.$m
74a0 6f 64 69 66 69 65 64 3b 0a 20 20 20 20 20 20 20 20 73 6f 72 74 28 24 78 64 65 62 75 67 73 29 3b odified;.........sort($xdebugs);
74c0 0a 20 20 20 20 20 20 20 20 2f 2f 20 69 6e 64 65 78 20 66 72 6f 6d 20 31 0a 20 20 20 20 20 20 20 .........//.index.from.1........
74e0 20 61 72 72 61 79 5f 75 6e 73 68 69 66 74 28 24 78 64 65 62 75 67 73 2c 20 27 27 29 3b 0a 20 20 .array_unshift($xdebugs,.'');...
7500 20 20 20 20 20 20 75 6e 73 65 74 28 24 78 64 65 62 75 67 73 5b 30 5d 29 3b 0a 20 20 20 20 20 20 ......unset($xdebugs[0]);.......
7520 20 20 24 74 65 73 74 20 3d 20 61 72 72 61 79 5f 66 6c 69 70 28 24 78 64 65 62 75 67 73 29 3b 0a ..$test.=.array_flip($xdebugs);.
7540 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2d 3e ........foreach.($this->sqlite->
7560 72 65 74 72 69 65 76 65 54 65 73 74 50 61 74 68 73 28 29 20 61 73 20 24 70 61 74 68 29 20 7b 0a retrieveTestPaths().as.$path).{.
7580 20 20 20 20 20 20 20 20 20 20 20 20 24 78 64 65 62 75 67 70 61 74 68 20 3d 20 73 74 72 5f 72 65 ............$xdebugpath.=.str_re
75a0 70 6c 61 63 65 28 27 2e 70 68 70 74 27 2c 20 27 2e 78 64 65 62 75 67 27 2c 20 24 70 61 74 68 29 place('.phpt',.'.xdebug',.$path)
75c0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 73 73 65 74 28 24 74 65 73 74 5b 24 78 ;.............if.(isset($test[$x
75e0 64 65 62 75 67 70 61 74 68 5d 29 20 7c 7c 20 69 73 73 65 74 28 24 75 6e 6d 6f 64 69 66 69 65 64 debugpath]).||.isset($unmodified
7600 5b 24 78 64 65 62 75 67 70 61 74 68 5d 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 [$xdebugpath])).{...............
7620 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 ..continue;.............}.......
7640 20 20 20 20 20 20 2f 2f 20 72 65 6d 6f 76 65 20 6f 75 74 64 61 74 65 64 20 74 65 73 74 73 0a 20 ......//.remove.outdated.tests..
7660 20 20 20 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 52 65 6d 6f 76 69 6e 67 20 72 65 73 75 6c 74 ...........echo."Removing.result
7680 73 20 66 72 6f 6d 20 24 78 64 65 62 75 67 70 61 74 68 5c 6e 22 3b 0a 20 20 20 20 20 20 20 20 20 s.from.$xdebugpath\n";..........
76a0 20 20 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2d 3e 72 65 6d 6f 76 65 4f 6c 64 54 65 73 74 28 ...$this->sqlite->removeOldTest(
76c0 24 70 61 74 68 2c 20 24 78 64 65 62 75 67 70 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 $path,.$xdebugpath);.........}..
76e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 78 64 65 62 75 67 73 3b 0a 20 20 20 20 7d 0a 0a 20 .......return.$xdebugs;.....}...
7700 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 6e 64 65 72 28 24 74 6f 50 61 74 68 29 0a 20 20 20 20 ...function.render($toPath).....
7720 7b 0a 20 20 20 20 20 20 20 20 24 64 65 63 6f 72 61 74 6f 72 20 3d 20 6e 65 77 20 44 65 66 61 75 {.........$decorator.=.new.Defau
7740 6c 74 53 6f 75 72 63 65 44 65 63 6f 72 61 74 6f 72 28 24 74 6f 50 61 74 68 2c 20 24 74 68 69 73 ltSourceDecorator($toPath,.$this
7760 2d 3e 74 65 73 74 70 61 74 68 2c 20 24 74 68 69 73 2d 3e 63 6f 64 65 70 61 74 68 29 3b 0a 20 20 ->testpath,.$this->codepath);...
7780 20 20 20 20 20 20 65 63 68 6f 20 22 47 65 6e 65 72 61 74 69 6e 67 20 70 72 6f 6a 65 63 74 20 63 ......echo."Generating.project.c
77a0 6f 76 65 72 61 67 65 20 64 61 74 61 2e 2e 2e 22 3b 0a 20 20 20 20 20 20 20 20 24 63 6f 76 65 72 overage.data...";.........$cover
77c0 61 67 65 20 3d 20 24 74 68 69 73 2d 3e 73 71 6c 69 74 65 2d 3e 72 65 74 72 69 65 76 65 50 72 6f age.=.$this->sqlite->retrievePro
77e0 6a 65 63 74 43 6f 76 65 72 61 67 65 28 29 3b 0a 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 64 6f jectCoverage();.........echo."do
7800 6e 65 5c 6e 22 3b 0a 20 20 20 20 20 20 20 20 24 64 65 63 6f 72 61 74 6f 72 2d 3e 72 65 6e 64 65 ne\n";.........$decorator->rende
7820 72 53 75 6d 6d 61 72 79 28 24 74 68 69 73 2c 20 24 74 68 69 73 2d 3e 72 65 74 72 69 65 76 65 50 rSummary($this,.$this->retrieveP
7840 61 74 68 73 28 29 2c 20 24 74 68 69 73 2d 3e 63 6f 64 65 70 61 74 68 2c 20 66 61 6c 73 65 2c 20 aths(),.$this->codepath,.false,.
7860 24 63 6f 76 65 72 61 67 65 5b 31 5d 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 $coverage[1],...................
7880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 63 6f 76 65 72 61 67 65 5b 30 5d 29 3b 0a .................$coverage[0]);.
78a0 20 20 20 20 20 20 20 20 24 61 20 3d 20 24 74 68 69 73 2d 3e 63 6f 64 65 70 61 74 68 3b 0a 20 20 ........$a.=.$this->codepath;...
78c0 20 20 20 20 20 20 65 63 68 6f 20 22 5b 53 74 65 70 20 32 20 6f 66 20 32 5d 20 52 65 6e 64 65 72 ......echo."[Step.2.of.2].Render
78e0 69 6e 67 20 70 65 72 2d 74 65 73 74 20 63 6f 76 65 72 61 67 65 2e 2e 2e 22 3b 0a 20 20 20 20 20 ing.per-test.coverage...";......
7900 20 20 20 24 64 65 63 6f 72 61 74 6f 72 2d 3e 72 65 6e 64 65 72 54 65 73 74 43 6f 76 65 72 61 67 ...$decorator->renderTestCoverag
7920 65 28 24 74 68 69 73 2c 20 24 74 68 69 73 2d 3e 74 65 73 74 70 61 74 68 2c 20 24 61 29 3b 0a 20 e($this,.$this->testpath,.$a);..
7940 20 20 20 20 20 20 20 65 63 68 6f 20 22 64 6f 6e 65 5c 6e 22 3b 0a 20 20 20 20 7d 0a 7d 0a 7d 0a .......echo."done\n";.....}.}.}.
7960 3f 3e 0a 3c 3f 70 68 70 0a 6e 61 6d 65 73 70 61 63 65 20 50 45 41 52 32 5c 50 79 72 75 73 5c 44 ?>.<?php.namespace.PEAR2\Pyrus\D
7980 65 76 65 6c 6f 70 65 72 5c 43 6f 76 65 72 61 67 65 41 6e 61 6c 79 7a 65 72 20 7b 0a 63 6c 61 73 eveloper\CoverageAnalyzer.{.clas
79a0 73 20 45 78 63 65 70 74 69 6f 6e 20 65 78 74 65 6e 64 73 20 5c 45 78 63 65 70 74 69 6f 6e 20 7b s.Exception.extends.\Exception.{
79c0 7d 0a 7d 0a 3f 3e 0a 3c 3f 70 68 70 0a 6e 61 6d 65 73 70 61 63 65 20 50 45 41 52 32 5c 50 79 72 }.}.?>.<?php.namespace.PEAR2\Pyr
79e0 75 73 5c 44 65 76 65 6c 6f 70 65 72 5c 43 6f 76 65 72 61 67 65 41 6e 61 6c 79 7a 65 72 20 7b 0a us\Developer\CoverageAnalyzer.{.
7a00 63 6c 61 73 73 20 53 71 6c 69 74 65 0a 7b 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 24 64 62 class.Sqlite.{.....protected.$db
7a20 3b 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 24 74 6f 74 61 6c 6c 69 6e 65 73 20 3d 20 30 3b ;.....protected.$totallines.=.0;
7a40 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 24 63 6f 76 65 72 65 64 6c 69 6e 65 73 20 3d 20 30 .....protected.$coveredlines.=.0
7a60 3b 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 24 70 61 74 68 43 6f 76 65 72 65 64 20 3d 20 61 ;.....protected.$pathCovered.=.a
7a80 72 72 61 79 28 29 3b 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 24 70 61 74 68 54 6f 74 61 6c rray();.....protected.$pathTotal
7aa0 20 3d 20 61 72 72 61 79 28 29 3b 0a 20 20 20 20 70 75 62 6c 69 63 20 24 63 6f 64 65 70 61 74 68 .=.array();.....public.$codepath
7ac0 3b 0a 20 20 20 20 70 75 62 6c 69 63 20 24 74 65 73 74 70 61 74 68 3b 0a 0a 20 20 20 20 66 75 6e ;.....public.$testpath;......fun
7ae0 63 74 69 6f 6e 20 5f 5f 63 6f 6e 73 74 72 75 63 74 28 24 70 61 74 68 20 3d 20 27 3a 6d 65 6d 6f ction.__construct($path.=.':memo
7b00 72 79 3a 27 2c 20 24 63 6f 64 65 70 61 74 68 20 3d 20 6e 75 6c 6c 2c 20 24 74 65 73 74 70 61 74 ry:',.$codepath.=.null,.$testpat
7b20 68 20 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 64 h.=.null).....{.........$this->d
7b40 62 20 3d 20 6e 65 77 20 5c 53 71 6c 69 74 65 33 28 24 70 61 74 68 29 3b 0a 0a 20 20 20 20 20 20 b.=.new.\Sqlite3($path);........
7b60 20 20 24 73 71 6c 20 3d 20 27 53 45 4c 45 43 54 20 76 65 72 73 69 6f 6e 20 46 52 4f 4d 20 61 6e ..$sql.=.'SELECT.version.FROM.an
7b80 61 6c 79 7a 65 72 76 65 72 73 69 6f 6e 27 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 40 24 74 68 alyzerversion';.........if.(@$th
7ba0 69 73 2d 3e 64 62 2d 3e 71 75 65 72 79 53 69 6e 67 6c 65 28 24 73 71 6c 29 20 3d 3d 20 27 32 2e is->db->querySingle($sql).==.'2.
7bc0 31 2e 30 27 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 63 6f 64 65 70 1.0').{.............$this->codep
7be0 61 74 68 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 71 75 65 72 79 53 69 6e 67 6c 65 28 27 53 45 ath.=.$this->db->querySingle('SE
7c00 4c 45 43 54 20 63 6f 64 65 70 61 74 68 20 46 52 4f 4d 20 70 61 74 68 73 27 29 3b 0a 20 20 20 20 LECT.codepath.FROM.paths');.....
7c20 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 74 65 73 74 70 61 74 68 20 3d 20 24 74 68 69 73 2d ........$this->testpath.=.$this-
7c40 3e 64 62 2d 3e 71 75 65 72 79 53 69 6e 67 6c 65 28 27 53 45 4c 45 43 54 20 74 65 73 74 70 61 74 >db->querySingle('SELECT.testpat
7c60 68 20 46 52 4f 4d 20 70 61 74 68 73 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 h.FROM.paths');.............retu
7c80 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 24 63 6f 64 65 rn;.........}.........if.(!$code
7ca0 70 61 74 68 20 7c 7c 20 21 24 74 65 73 74 70 61 74 68 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 path.||.!$testpath).{...........
7cc0 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 42 6f 74 68 20 63 6f 64 65 ..throw.new.Exception('Both.code
7ce0 70 61 74 68 20 61 6e 64 20 74 65 73 74 70 61 74 68 20 6d 75 73 74 20 62 65 20 73 65 74 20 69 6e path.and.testpath.must.be.set.in
7d00 20 27 20 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .'..............................
7d20 20 20 20 20 20 27 6f 72 64 65 72 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 61 20 63 6f 76 65 .....'order.to.initialize.a.cove
7d40 72 61 67 65 20 64 61 74 61 62 61 73 65 27 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 rage.database');.........}......
7d60 20 20 20 24 74 68 69 73 2d 3e 63 6f 64 65 70 61 74 68 20 3d 20 24 63 6f 64 65 70 61 74 68 3b 0a ...$this->codepath.=.$codepath;.
7d80 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 74 65 73 74 70 61 74 68 20 3d 20 24 74 65 73 74 70 ........$this->testpath.=.$testp
7da0 61 74 68 3b 0a 20 20 20 20 20 20 20 20 2f 2f 20 72 65 73 74 61 72 74 20 74 68 65 20 64 61 74 61 ath;.........//.restart.the.data
7dc0 62 61 73 65 0a 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 55 70 67 72 61 64 69 6e 67 20 64 61 74 base.........echo."Upgrading.dat
7de0 61 62 61 73 65 20 74 6f 20 76 65 72 73 69 6f 6e 20 32 2e 31 2e 30 5c 6e 22 3b 0a 20 20 20 20 20 abase.to.version.2.1.0\n";......
7e00 20 20 20 24 74 68 69 73 2d 3e 64 62 2d 3e 65 78 65 63 28 27 0a 20 20 20 20 20 20 20 20 20 20 20 ...$this->db->exec('............
7e20 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f 76 65 72 61 67 65 3b 0a 20 20 20 20 20 20 20 20 20 20 .DROP.TABLE.coverage;...........
7e40 20 20 44 52 4f 50 20 54 41 42 4c 45 20 66 69 6c 65 73 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ..DROP.TABLE.files;.............
7e60 44 52 4f 50 20 54 41 42 4c 45 20 74 65 73 74 73 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 44 52 DROP.TABLE.tests;.............DR
7e80 4f 50 20 54 41 42 4c 45 20 63 6f 76 65 72 61 67 65 5f 70 65 72 5f 66 69 6c 65 3b 0a 20 20 20 20 OP.TABLE.coverage_per_file;.....
7ea0 20 20 20 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 78 64 65 62 75 67 73 3b 0a 20 20 20 20 ........DROP.TABLE.xdebugs;.....
7ec0 20 20 20 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 61 6e 61 6c 79 7a 65 72 76 65 72 73 69 ........DROP.TABLE.analyzerversi
7ee0 6f 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 41 43 55 55 4d 3b 27 29 3b 0a 0a 20 20 20 20 on;.............VACUUM;');......
7f00 20 20 20 20 24 74 68 69 73 2d 3e 64 62 2d 3e 65 78 65 63 28 27 42 45 47 49 4e 27 29 3b 0a 0a 20 ....$this->db->exec('BEGIN');...
7f20 20 20 20 20 20 20 20 24 71 75 65 72 79 20 3d 20 27 0a 20 20 20 20 20 20 20 20 20 20 43 52 45 41 .......$query.=.'...........CREA
7f40 54 45 20 54 41 42 4c 45 20 63 6f 76 65 72 61 67 65 20 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 TE.TABLE.coverage.(.............
7f60 66 69 6c 65 73 5f 69 64 20 69 6e 74 65 67 65 72 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 files_id.integer.NOT.NULL,......
7f80 20 20 20 20 20 20 20 74 65 73 74 73 5f 69 64 20 69 6e 74 65 67 65 72 20 4e 4f 54 20 4e 55 4c 4c .......tests_id.integer.NOT.NULL
7fa0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 65 6e 75 6d 62 65 72 20 49 4e 54 45 47 45 52 ,.............linenumber.INTEGER
7fc0 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 73 63 6f 76 65 72 65 64 .NOT.NULL,.............iscovered
7fe0 20 42 4f 4f 4c 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 73 73 6f .BOOL.NOT.NULL,.............isso
8000 75 72 63 65 20 42 4f 4f 4c 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 urce.BOOL.NOT.NULL,.............
8020 50 52 49 4d 41 52 59 20 4b 45 59 20 28 66 69 6c 65 73 5f 69 64 2c 20 74 65 73 74 73 5f 69 64 2c PRIMARY.KEY.(files_id,.tests_id,
8040 20 6c 69 6e 65 6e 75 6d 62 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 .linenumber)...........);.......
8060 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 63 6f 76 65 72 61 67 65 5f 66 69 6c 65 73 5f ....CREATE.INDEX.coverage_files_
8080 69 64 20 6f 6e 20 63 6f 76 65 72 61 67 65 20 28 66 69 6c 65 73 5f 69 64 29 3b 0a 20 20 20 20 20 id.on.coverage.(files_id);......
80a0 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 63 6f 76 65 72 61 67 65 5f 74 65 73 74 73 .....CREATE.INDEX.coverage_tests
80c0 5f 69 64 20 6f 6e 20 63 6f 76 65 72 61 67 65 20 28 74 65 73 74 73 5f 69 64 2c 20 69 73 73 6f 75 _id.on.coverage.(tests_id,.issou
80e0 72 63 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 63 6f 76 rce);...........CREATE.INDEX.cov
8100 65 72 61 67 65 5f 74 65 73 74 73 5f 69 64 32 20 6f 6e 20 63 6f 76 65 72 61 67 65 20 28 74 65 73 erage_tests_id2.on.coverage.(tes
8120 74 73 5f 69 64 2c 20 66 69 6c 65 73 5f 69 64 2c 20 69 73 73 6f 75 72 63 65 29 3b 0a 20 20 20 20 ts_id,.files_id,.issource);.....
8140 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 63 6f 76 65 72 61 67 65 5f 6c 69 6e 65 ......CREATE.INDEX.coverage_line
8160 6e 75 6d 62 65 72 20 6f 6e 20 63 6f 76 65 72 61 67 65 20 28 66 69 6c 65 73 5f 69 64 2c 20 6c 69 number.on.coverage.(files_id,.li
8180 6e 65 6e 75 6d 62 65 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 nenumber);...........CREATE.INDE
81a0 58 20 63 6f 76 65 72 61 67 65 5f 69 73 73 6f 75 72 63 65 20 6f 6e 20 63 6f 76 65 72 61 67 65 20 X.coverage_issource.on.coverage.
81c0 28 69 73 73 6f 75 72 63 65 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 (issource);............CREATE.TA
81e0 42 4c 45 20 63 6f 76 65 72 61 67 65 5f 70 65 72 5f 66 69 6c 65 20 28 0a 20 20 20 20 20 20 20 20 BLE.coverage_per_file.(.........
8200 20 20 20 20 66 69 6c 65 73 5f 69 64 20 69 6e 74 65 67 65 72 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 ....files_id.integer.NOT.NULL,..
8220 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 65 6e 75 6d 62 65 72 20 49 4e 54 45 47 45 52 20 4e 4f ...........linenumber.INTEGER.NO
8240 54 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 76 65 72 61 67 65 20 49 4e 54 T.NULL,.............coverage.INT
8260 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 52 49 4d 41 EGER.NOT.NULL,.............PRIMA
8280 52 59 20 4b 45 59 20 28 66 69 6c 65 73 5f 69 64 2c 20 6c 69 6e 65 6e 75 6d 62 65 72 29 0a 20 20 RY.KEY.(files_id,.linenumber)...
82a0 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 ........);...........CREATE.INDE
82c0 58 20 63 6f 76 65 72 61 67 65 5f 70 65 72 5f 66 69 6c 65 5f 6c 69 6e 65 6e 75 6d 62 65 72 20 6f X.coverage_per_file_linenumber.o
82e0 6e 20 63 6f 76 65 72 61 67 65 5f 70 65 72 5f 66 69 6c 65 20 28 6c 69 6e 65 6e 75 6d 62 65 72 29 n.coverage_per_file.(linenumber)
8300 3b 0a 20 20 20 20 20 20 20 20 20 20 27 3b 0a 20 20 20 20 20 20 20 20 24 77 6f 72 6b 65 64 20 3d ;...........';.........$worked.=
8320 20 24 74 68 69 73 2d 3e 64 62 2d 3e 65 78 65 63 28 24 71 75 65 72 79 29 3b 0a 20 20 20 20 20 20 .$this->db->exec($query);.......
8340 20 20 69 66 20 28 21 24 77 6f 72 6b 65 64 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 24 ..if.(!$worked).{.............@$
8360 74 68 69 73 2d 3e 64 62 2d 3e 65 78 65 63 28 27 52 4f 4c 4c 42 41 43 4b 27 29 3b 0a 20 20 20 20 this->db->exec('ROLLBACK');.....
8380 20 20 20 20 20 20 20 20 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 6c 61 73 74 ........$error.=.$this->db->last
83a0 45 72 72 6f 72 4d 73 67 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 ErrorMsg();.............throw.ne
83c0 77 20 45 78 63 65 70 74 69 6f 6e 28 27 55 6e 61 62 6c 65 20 74 6f 20 63 72 65 61 74 65 20 43 6f w.Exception('Unable.to.create.Co
83e0 64 65 20 43 6f 76 65 72 61 67 65 20 53 51 4c 69 74 65 33 20 64 61 74 61 62 61 73 65 3a 20 27 20 de.Coverage.SQLite3.database:.'.
8400 2e 20 24 65 72 72 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 24 71 ..$error);.........}..........$q
8420 75 65 72 79 20 3d 20 27 0a 20 20 20 20 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 uery.=.'...........CREATE.TABLE.
8440 66 69 6c 65 73 20 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 64 20 49 4e 54 45 47 45 52 20 4e files.(.............id.INTEGER.N
8460 4f 54 20 4e 55 4c 4c 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e OT.NULL.PRIMARY.KEY.AUTOINCREMEN
8480 54 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 70 61 74 68 20 54 45 58 54 28 35 30 30 T,.............filepath.TEXT(500
84a0 29 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 70 61 74 68 ).NOT.NULL,.............filepath
84c0 6d 64 35 20 54 45 58 54 28 33 32 29 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 20 20 20 md5.TEXT(32).NOT.NULL,..........
84e0 20 20 20 69 73 73 6f 75 72 63 65 20 42 4f 4f 4c 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 ...issource.BOOL.NOT.NULL,......
8500 20 20 20 20 20 20 20 55 4e 49 51 55 45 20 28 66 69 6c 65 70 61 74 68 29 0a 20 20 20 20 20 20 20 .......UNIQUE.(filepath)........
8520 20 20 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 66 69 6c ...);...........CREATE.INDEX.fil
8540 65 73 5f 69 73 73 6f 75 72 63 65 20 6f 6e 20 66 69 6c 65 73 20 28 69 73 73 6f 75 72 63 65 29 3b es_issource.on.files.(issource);
8560 0a 20 20 20 20 20 20 20 20 20 20 27 3b 0a 20 20 20 20 20 20 20 20 24 77 6f 72 6b 65 64 20 3d 20 ...........';.........$worked.=.
8580 24 74 68 69 73 2d 3e 64 62 2d 3e 65 78 65 63 28 24 71 75 65 72 79 29 3b 0a 20 20 20 20 20 20 20 $this->db->exec($query);........
85a0 20 69 66 20 28 21 24 77 6f 72 6b 65 64 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 24 74 .if.(!$worked).{.............@$t
85c0 68 69 73 2d 3e 64 62 2d 3e 65 78 65 63 28 27 52 4f 4c 4c 42 41 43 4b 27 29 3b 0a 20 20 20 20 20 his->db->exec('ROLLBACK');......
85e0 20 20 20 20 20 20 20 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 6c 61 73 74 45 .......$error.=.$this->db->lastE
8600 72 72 6f 72 4d 73 67 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 rrorMsg();.............throw.new
8620 20 45 78 63 65 70 74 69 6f 6e 28 27 55 6e 61 62 6c 65 20 74 6f 20 63 72 65 61 74 65 20 43 6f 64 .Exception('Unable.to.create.Cod
8640 65 20 43 6f 76 65 72 61 67 65 20 53 51 4c 69 74 65 33 20 64 61 74 61 62 61 73 65 3a 20 27 20 2e e.Coverage.SQLite3.database:.'..
8660 20 24 65 72 72 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 24 71 75 .$error);.........}..........$qu
8680 65 72 79 20 3d 20 27 0a 20 20 20 20 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 ery.=.'...........CREATE.TABLE.x
86a0 64 65 62 75 67 73 20 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 78 64 65 62 75 67 70 61 74 68 20 debugs.(.............xdebugpath.
86c0 54 45 58 54 28 35 30 30 29 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 TEXT(500).NOT.NULL,.............
86e0 78 64 65 62 75 67 70 61 74 68 6d 64 35 20 54 45 58 54 28 33 32 29 20 4e 4f 54 20 4e 55 4c 4c 2c xdebugpathmd5.TEXT(32).NOT.NULL,
8700 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20 28 78 64 65 62 75 67 .............PRIMARY.KEY.(xdebug
8720 70 61 74 68 29 0a 20 20 20 20 20 20 20 20 20 20 29 3b 27 3b 0a 20 20 20 20 20 20 20 20 24 77 6f path)...........);';.........$wo
8740 72 6b 65 64 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 65 78 65 63 28 24 71 75 65 72 79 29 3b 0a rked.=.$this->db->exec($query);.
8760 20 20 20 20 20 20 20 20 69 66 20 28 21 24 77 6f 72 6b 65 64 29 20 7b 0a 20 20 20 20 20 20 20 20 ........if.(!$worked).{.........
8780 20 20 20 20 40 24 74 68 69 73 2d 3e 64 62 2d 3e 65 78 65 63 28 27 52 4f 4c 4c 42 41 43 4b 27 29 ....@$this->db->exec('ROLLBACK')
87a0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 64 62 ;.............$error.=.$this->db
87c0 2d 3e 6c 61 73 74 45 72 72 6f 72 4d 73 67 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 ->lastErrorMsg();.............th
87e0 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 55 6e 61 62 6c 65 20 74 6f 20 63 72 65 row.new.Exception('Unable.to.cre
8800 61 74 65 20 43 6f 64 65 20 43 6f 76 65 72 61 67 65 20 53 51 4c 69 74 65 33 20 64 61 74 61 62 61 ate.Code.Coverage.SQLite3.databa
8820 73 65 3a 20 27 20 2e 20 24 65 72 72 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 se:.'...$error);.........}......
8840 20 20 20 20 24 71 75 65 72 79 20 3d 20 27 0a 20 20 20 20 20 20 20 20 20 20 43 52 45 41 54 45 20 ....$query.=.'...........CREATE.
8860 54 41 42 4c 45 20 74 65 73 74 73 20 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 64 20 49 4e 54 TABLE.tests.(.............id.INT
8880 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 55 54 4f 49 4e EGER.NOT.NULL.PRIMARY.KEY.AUTOIN
88a0 43 52 45 4d 45 4e 54 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 70 61 74 68 20 54 45 CREMENT,.............testpath.TE
88c0 58 54 28 35 30 30 29 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 XT(500).NOT.NULL,.............te
88e0 73 74 70 61 74 68 6d 64 35 20 54 45 58 54 28 33 32 29 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20 20 stpathmd5.TEXT(32).NOT.NULL,....
8900 20 20 20 20 20 20 20 20 20 55 4e 49 51 55 45 20 28 74 65 73 74 70 61 74 68 29 0a 20 20 20 20 20 .........UNIQUE.(testpath)......
8920 20 20 20 20 20 29 3b 27 3b 0a 20 20 20 20 20 20 20 20 24 77 6f 72 6b 65 64 20 3d 20 24 74 68 69 .....);';.........$worked.=.$thi
8940 73 2d 3e 64 62 2d 3e 65 78 65 63 28 24 71 75 65 72 79 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 s->db->exec($query);.........if.
8960 28 21 24 77 6f 72 6b 65 64 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 40 24 74 68 69 73 2d (!$worked).{.............@$this-
8980 3e 64 62 2d 3e 65 78 65 63 28 27 52 4f 4c 4c 42 41 43 4b 27 29 3b 0a 20 20 20 20 20 20 20 20 20 >db->exec('ROLLBACK');..........
89a0 20 20 20 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 6c 61 73 74 45 72 72 6f 72 ...$error.=.$this->db->lastError
89c0 4d 73 67 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 63 Msg();.............throw.new.Exc
89e0 65 70 74 69 6f 6e 28 27 55 6e 61 62 6c 65 20 74 6f 20 63 72 65 61 74 65 20 43 6f 64 65 20 43 6f eption('Unable.to.create.Code.Co
8a00 76 65 72 61 67 65 20 53 51 4c 69 74 65 33 20 64 61 74 61 62 61 73 65 3a 20 27 20 2e 20 24 65 72 verage.SQLite3.database:.'...$er
8a20 72 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 24 71 75 65 72 79 20 ror);.........}..........$query.
8a40 3d 20 27 0a 20 20 20 20 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 6e 61 6c 79 =.'...........CREATE.TABLE.analy
8a60 7a 65 72 76 65 72 73 69 6f 6e 20 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e zerversion.(.............version
8a80 20 54 45 58 54 28 35 29 20 4e 4f 54 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 29 3b 0a 0a .TEXT(5).NOT.NULL...........);..
8aa0 20 20 20 20 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 6e 61 6c 79 7a 65 72 76 65 ..........INSERT.INTO.analyzerve
8ac0 72 73 69 6f 6e 20 56 41 4c 55 45 53 28 22 32 2e 30 2e 30 22 29 3b 0a 0a 20 20 20 20 20 20 20 20 rsion.VALUES("2.0.0");..........
8ae0 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 70 61 74 68 73 20 28 0a 20 20 20 20 20 20 20 20 20 ..CREATE.TABLE.paths.(..........
8b00 20 20 20 63 6f 64 65 70 61 74 68 20 54 45 58 54 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 ...codepath.TEXT.NOT.NULL,......
8b20 20 20 20 20 20 20 20 74 65 73 74 70 61 74 68 20 54 45 58 54 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 .......testpath.TEXT.NOT.NULL,..
8b40 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 20 .........);.....................
8b60 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 70 61 74 68 73 20 28 22 27 20 2e 20 24 74 68 69 73 2d 3e .INSERT.INTO.paths.("'...$this->
8b80 64 62 2d 3e 65 73 63 61 70 65 53 74 72 69 6e 67 28 24 63 6f 64 65 70 61 74 68 29 20 2e 20 27 22 db->escapeString($codepath)...'"
8ba0 2c 20 22 27 20 2e 0a 20 20 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 64 62 2d 3e 65 73 63 61 ,."'.............$this->db->esca
8bc0 70 65 53 74 72 69 6e 67 28 24 74 65 73 74 70 61 74 68 29 2e 20 27 22 29 27 3b 0a 20 20 20 20 20 peString($testpath)..'")';......
8be0 20 20 20 24 77 6f 72 6b 65 64 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 65 78 65 63 28 24 71 75 ...$worked.=.$this->db->exec($qu
8c00 65 72 79 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 24 77 6f 72 6b 65 64 29 20 7b 0a 20 20 ery);.........if.(!$worked).{...
8c20 20 20 20 20 20 20 20 20 20 20 40 24 74 68 69 73 2d 3e 64 62 2d 3e 65 78 65 63 28 27 52 4f 4c 4c ..........@$this->db->exec('ROLL
8c40 42 41 43 4b 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 65 72 72 6f 72 20 3d 20 24 74 68 BACK');.............$error.=.$th
8c60 69 73 2d 3e 64 62 2d 3e 6c 61 73 74 45 72 72 6f 72 4d 73 67 28 29 3b 0a 20 20 20 20 20 20 20 20 is->db->lastErrorMsg();.........
8c80 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 55 6e 61 62 6c 65 20 ....throw.new.Exception('Unable.
8ca0 74 6f 20 63 72 65 61 74 65 20 43 6f 64 65 20 43 6f 76 65 72 61 67 65 20 53 51 4c 69 74 65 33 20 to.create.Code.Coverage.SQLite3.
8cc0 64 61 74 61 62 61 73 65 3a 20 27 20 2e 20 24 65 72 72 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d database:.'...$error);.........}
8ce0 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 64 62 2d 3e 65 78 65 63 28 27 43 4f 4d 4d 49 54 .........$this->db->exec('COMMIT
8d00 27 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 72 69 65 76 65 ');.....}......function.retrieve
8d20 4c 69 6e 65 4c 69 6e 6b 73 28 24 66 69 6c 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 LineLinks($file).....{.........$
8d40 69 64 20 3d 20 24 74 68 69 73 2d 3e 67 65 74 46 69 6c 65 49 64 28 24 66 69 6c 65 29 3b 0a 20 20 id.=.$this->getFileId($file);...
8d60 20 20 20 20 20 20 24 71 75 65 72 79 20 3d 20 27 53 45 4c 45 43 54 20 74 2e 74 65 73 74 70 61 74 ......$query.=.'SELECT.t.testpat
8d80 68 2c 20 63 2e 6c 69 6e 65 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d h,.c.linenumber.............FROM
8da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 76 65 72 61 67 65 20 63 2c 20 74 65 73 .................coverage.c,.tes
8dc0 74 73 20 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 0a 20 20 20 20 20 20 20 20 20 ts.t.............WHERE..........
8de0 20 20 20 20 20 20 20 63 2e 66 69 6c 65 73 5f 69 64 3d 27 20 2e 20 24 69 64 20 2e 20 27 20 41 4e .......c.files_id='...$id...'.AN
8e00 44 20 74 2e 69 64 3d 63 2e 74 65 73 74 73 5f 69 64 27 20 3b 0a 20 20 20 20 20 20 20 20 24 72 65 D.t.id=c.tests_id'.;.........$re
8e20 73 75 6c 74 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 71 75 65 72 79 28 24 71 75 65 72 79 29 3b sult.=.$this->db->query($query);
8e40 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 24 72 65 73 75 6c 74 29 20 7b 0a 20 20 20 20 20 20 20 .........if.(!$result).{........
8e60 20 20 20 20 20 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 6c 61 73 74 45 72 72 .....$error.=.$this->db->lastErr
8e80 6f 72 4d 73 67 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 orMsg();.............throw.new.E
8ea0 78 63 65 70 74 69 6f 6e 28 27 43 61 6e 6e 6f 74 20 72 65 74 72 69 65 76 65 20 6c 69 6e 65 20 6c xception('Cannot.retrieve.line.l
8ec0 69 6e 6b 73 20 66 6f 72 20 27 20 2e 20 24 66 69 6c 65 20 2e 0a 20 20 20 20 20 20 20 20 20 20 20 inks.for.'...$file..............
8ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 20 6c 69 6e 65 20 23 27 20 2e .....................'.line.#'..
8f00 20 24 6c 69 6e 65 20 2e 20 20 27 3a 20 27 20 2e 20 24 65 72 72 6f 72 29 3b 0a 20 20 20 20 20 20 .$line....':.'...$error);.......
8f20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 24 72 65 74 20 3d 20 61 72 72 61 79 28 29 3b 0a 20 20 20 ..}..........$ret.=.array();....
8f40 20 20 20 20 20 77 68 69 6c 65 20 28 24 72 65 73 20 3d 20 24 72 65 73 75 6c 74 2d 3e 66 65 74 63 .....while.($res.=.$result->fetc
8f60 68 41 72 72 61 79 28 53 51 4c 49 54 45 33 5f 41 53 53 4f 43 29 29 20 7b 0a 20 20 20 20 20 20 20 hArray(SQLITE3_ASSOC)).{........
8f80 20 20 20 20 20 24 72 65 74 5b 24 72 65 73 5b 27 6c 69 6e 65 6e 75 6d 62 65 72 27 5d 5d 5b 5d 20 .....$ret[$res['linenumber']][].
8fa0 3d 20 24 72 65 73 5b 27 74 65 73 74 70 61 74 68 27 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 =.$res['testpath'];.........}...
8fc0 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 ......return.$ret;.....}......fu
8fe0 6e 63 74 69 6f 6e 20 72 65 74 72 69 65 76 65 54 65 73 74 50 61 74 68 73 28 29 0a 20 20 20 20 7b nction.retrieveTestPaths().....{
9000 0a 20 20 20 20 20 20 20 20 24 71 75 65 72 79 20 3d 20 27 53 45 4c 45 43 54 20 74 65 73 74 70 61 .........$query.=.'SELECT.testpa
9020 74 68 20 66 72 6f 6d 20 74 65 73 74 73 20 4f 52 44 45 52 20 42 59 20 74 65 73 74 70 61 74 68 27 th.from.tests.ORDER.BY.testpath'
9040 3b 0a 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 71 ;.........$result.=.$this->db->q
9060 75 65 72 79 28 24 71 75 65 72 79 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 24 72 65 73 75 uery($query);.........if.(!$resu
9080 6c 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 lt).{.............$error.=.$this
90a0 2d 3e 64 62 2d 3e 6c 61 73 74 45 72 72 6f 72 4d 73 67 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 ->db->lastErrorMsg();...........
90c0 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 43 61 6e 6e 6f 74 20 72 65 ..throw.new.Exception('Cannot.re
90e0 74 72 69 65 76 65 20 74 65 73 74 20 70 61 74 68 73 20 3a 27 20 2e 20 24 65 72 72 6f 72 29 3b 0a trieve.test.paths.:'...$error);.
9100 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 24 72 65 74 20 3d 20 61 72 72 61 79 28 29 ........}.........$ret.=.array()
9120 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 24 72 65 73 20 3d 20 24 72 65 73 75 6c 74 2d ;.........while.($res.=.$result-
9140 3e 66 65 74 63 68 41 72 72 61 79 28 53 51 4c 49 54 45 33 5f 4e 55 4d 29 29 20 7b 0a 20 20 20 20 >fetchArray(SQLITE3_NUM)).{.....
9160 20 20 20 20 20 20 20 20 24 72 65 74 5b 5d 20 3d 20 24 72 65 73 5b 30 5d 3b 0a 20 20 20 20 20 20 ........$ret[].=.$res[0];.......
9180 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 74 3b 0a 20 20 20 20 7d 0a 0a ..}.........return.$ret;.....}..
91a0 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 72 69 65 76 65 50 61 74 68 73 46 6f 72 54 65 73 ....function.retrievePathsForTes
91c0 74 28 24 74 65 73 74 2c 20 24 61 6c 6c 20 3d 20 30 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 t($test,.$all.=.0).....{........
91e0 20 24 69 64 20 3d 20 24 74 68 69 73 2d 3e 67 65 74 54 65 73 74 49 64 28 24 74 65 73 74 29 3b 0a .$id.=.$this->getTestId($test);.
9200 20 20 20 20 20 20 20 20 69 66 20 28 24 61 6c 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ........if.($all).{.............
9220 24 71 75 65 72 79 20 3d 20 27 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 66 69 6c 65 70 61 $query.=.'SELECT.DISTINCT.filepa
9240 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20 63 6f 76 65 72 61 67 65 th.................FROM.coverage
9260 20 63 2c 20 66 69 6c 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 20 .c,.files.................WHERE.
9280 63 2e 74 65 73 74 73 5f 69 64 3d 27 20 2e 20 24 69 64 20 2e 20 27 0a 20 20 20 20 20 20 20 20 20 c.tests_id='...$id...'..........
92a0 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 66 69 6c 65 73 2e 69 64 3d 63 2e 66 69 6c 65 73 5f ...........AND.files.id=c.files_
92c0 69 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 52 4f 55 50 20 42 59 20 63 2e 66 69 id.................GROUP.BY.c.fi
92e0 6c 65 73 5f 69 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 les_id.................ORDER.BY.
9300 66 69 6c 65 70 61 74 68 27 3b 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 filepath';.........}.else.{.....
9320 20 20 20 20 20 20 20 20 24 71 75 65 72 79 20 3d 20 27 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 ........$query.=.'SELECT.DISTINC
9340 54 20 66 69 6c 65 70 61 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20 T.filepath.................FROM.
9360 63 6f 76 65 72 61 67 65 20 63 2c 20 66 69 6c 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 coverage.c,.files...............
9380 20 20 57 48 45 52 45 20 63 2e 74 65 73 74 73 5f 69 64 3d 27 20 2e 20 24 69 64 20 2e 20 27 0a 20 ..WHERE.c.tests_id='...$id...'..
93a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 63 2e 69 73 73 6f 75 72 63 ...................AND.c.issourc
93c0 65 3d 31 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 66 69 6c 65 e=1.....................AND.file
93e0 73 2e 69 64 3d 63 2e 66 69 6c 65 73 5f 69 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 s.id=c.files_id.................
9400 47 52 4f 55 50 20 42 59 20 63 2e 66 69 6c 65 73 5f 69 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 GROUP.BY.c.files_id.............
9420 20 20 20 20 4f 52 44 45 52 20 42 59 20 66 69 6c 65 70 61 74 68 27 3b 0a 20 20 20 20 20 20 20 20 ....ORDER.BY.filepath';.........
9440 7d 0a 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 71 }.........$result.=.$this->db->q
9460 75 65 72 79 28 24 71 75 65 72 79 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 24 72 65 73 75 uery($query);.........if.(!$resu
9480 6c 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 lt).{.............$error.=.$this
94a0 2d 3e 64 62 2d 3e 6c 61 73 74 45 72 72 6f 72 4d 73 67 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 ->db->lastErrorMsg();...........
94c0 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 43 61 6e 6e 6f 74 20 72 65 ..throw.new.Exception('Cannot.re
94e0 74 72 69 65 76 65 20 66 69 6c 65 20 70 61 74 68 73 20 66 6f 72 20 74 65 73 74 20 27 20 2e 20 24 trieve.file.paths.for.test.'...$
9500 74 65 73 74 20 2e 20 27 3a 27 20 2e 20 24 65 72 72 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a test...':'...$error);.........}.
9520 20 20 20 20 20 20 20 20 24 72 65 74 20 3d 20 61 72 72 61 79 28 29 3b 0a 20 20 20 20 20 20 20 20 ........$ret.=.array();.........
9540 77 68 69 6c 65 20 28 24 72 65 73 20 3d 20 24 72 65 73 75 6c 74 2d 3e 66 65 74 63 68 41 72 72 61 while.($res.=.$result->fetchArra
9560 79 28 53 51 4c 49 54 45 33 5f 4e 55 4d 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 72 y(SQLITE3_NUM)).{.............$r
9580 65 74 5b 5d 20 3d 20 24 72 65 73 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 et[].=.$res[0];.........}.......
95a0 20 20 72 65 74 75 72 6e 20 24 72 65 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 ..return.$ret;.....}......functi
95c0 6f 6e 20 72 65 74 72 69 65 76 65 50 61 74 68 73 28 24 61 6c 6c 20 3d 20 30 29 0a 20 20 20 20 7b on.retrievePaths($all.=.0).....{
95e0 0a 20 20 20 20 20 20 20 20 69 66 20 28 24 61 6c 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 .........if.($all).{............
9600 20 24 71 75 65 72 79 20 3d 20 27 53 45 4c 45 43 54 20 66 69 6c 65 70 61 74 68 20 66 72 6f 6d 20 .$query.=.'SELECT.filepath.from.
9620 66 69 6c 65 73 20 4f 52 44 45 52 20 42 59 20 66 69 6c 65 70 61 74 68 27 3b 0a 20 20 20 20 20 20 files.ORDER.BY.filepath';.......
9640 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 71 75 65 72 79 20 3d 20 ..}.else.{.............$query.=.
9660 27 53 45 4c 45 43 54 20 66 69 6c 65 70 61 74 68 20 66 72 6f 6d 20 66 69 6c 65 73 20 57 48 45 52 'SELECT.filepath.from.files.WHER
9680 45 20 69 73 73 6f 75 72 63 65 3d 31 20 4f 52 44 45 52 20 42 59 20 66 69 6c 65 70 61 74 68 27 3b E.issource=1.ORDER.BY.filepath';
96a0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 3d 20 24 74 68 .........}.........$result.=.$th
96c0 69 73 2d 3e 64 62 2d 3e 71 75 65 72 79 28 24 71 75 65 72 79 29 3b 0a 20 20 20 20 20 20 20 20 69 is->db->query($query);.........i
96e0 66 20 28 21 24 72 65 73 75 6c 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 65 72 72 6f f.(!$result).{.............$erro
9700 72 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 6c 61 73 74 45 72 72 6f 72 4d 73 67 28 29 3b 0a 20 r.=.$this->db->lastErrorMsg();..
9720 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 ...........throw.new.Exception('
9740 43 61 6e 6e 6f 74 20 72 65 74 72 69 65 76 65 20 66 69 6c 65 20 70 61 74 68 73 20 3a 27 20 2e 20 Cannot.retrieve.file.paths.:'...
9760 24 65 72 72 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 24 72 65 74 20 $error);.........}.........$ret.
9780 3d 20 61 72 72 61 79 28 29 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 24 72 65 73 20 3d =.array();.........while.($res.=
97a0 20 24 72 65 73 75 6c 74 2d 3e 66 65 74 63 68 41 72 72 61 79 28 53 51 4c 49 54 45 33 5f 4e 55 4d .$result->fetchArray(SQLITE3_NUM
97c0 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 74 5b 5d 20 3d 20 24 72 65 73 5b 30 )).{.............$ret[].=.$res[0
97e0 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 74 ];.........}.........return.$ret
9800 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 63 6f 76 65 72 61 67 65 50 65 ;.....}......function.coveragePe
9820 72 63 65 6e 74 61 67 65 28 24 73 6f 75 72 63 65 66 69 6c 65 2c 20 24 74 65 73 74 66 69 6c 65 20 rcentage($sourcefile,.$testfile.
9840 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 24 74 65 73 74 66 =.null).....{.........if.($testf
9860 69 6c 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 63 6f 76 65 72 61 67 65 20 3d 20 24 ile).{.............$coverage.=.$
9880 74 68 69 73 2d 3e 72 65 74 72 69 65 76 65 50 61 74 68 43 6f 76 65 72 61 67 65 42 79 54 65 73 74 this->retrievePathCoverageByTest
98a0 28 24 73 6f 75 72 63 65 66 69 6c 65 2c 20 24 74 65 73 74 66 69 6c 65 29 3b 0a 20 20 20 20 20 20 ($sourcefile,.$testfile);.......
98c0 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 63 6f 76 65 72 61 67 65 ..}.else.{.............$coverage
98e0 20 3d 20 24 74 68 69 73 2d 3e 72 65 74 72 69 65 76 65 50 61 74 68 43 6f 76 65 72 61 67 65 28 24 .=.$this->retrievePathCoverage($
9900 73 6f 75 72 63 65 66 69 6c 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 sourcefile);.........}.........r
9920 65 74 75 72 6e 20 72 6f 75 6e 64 28 28 24 63 6f 76 65 72 61 67 65 5b 30 5d 20 2f 20 24 63 6f 76 eturn.round(($coverage[0]./.$cov
9940 65 72 61 67 65 5b 31 5d 29 20 2a 20 31 30 30 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e erage[1]).*.100);.....}......fun
9960 63 74 69 6f 6e 20 72 65 74 72 69 65 76 65 50 72 6f 6a 65 63 74 43 6f 76 65 72 61 67 65 28 29 0a ction.retrieveProjectCoverage().
9980 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 24 74 68 69 73 2d 3e 74 6f 74 61 6c 6c 69 ....{.........if.($this->totalli
99a0 6e 65 73 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 72 61 79 28 nes).{.............return.array(
99c0 24 74 68 69 73 2d 3e 63 6f 76 65 72 65 64 6c 69 6e 65 73 2c 20 24 74 68 69 73 2d 3e 74 6f 74 61 $this->coveredlines,.$this->tota
99e0 6c 6c 69 6e 65 73 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 24 71 75 65 72 llines);.........}.........$quer
9a00 79 20 3d 20 27 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 6c 69 6e 65 6e 75 6d 62 65 72 29 2c 66 69 y.=.'SELECT.COUNT(linenumber),fi
9a20 6c 65 70 61 74 68 20 46 52 4f 4d 20 63 6f 76 65 72 61 67 65 5f 70 65 72 5f 66 69 6c 65 2c 20 66 lepath.FROM.coverage_per_file,.f
9a40 69 6c 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 20 66 69 6c 65 73 iles.................WHERE.files
9a60 2e 69 64 3d 63 6f 76 65 72 61 67 65 5f 70 65 72 5f 66 69 6c 65 2e 66 69 6c 65 73 5f 69 64 0a 20 .id=coverage_per_file.files_id..
9a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 52 4f 55 50 20 42 59 20 66 69 6c 65 73 5f 69 64 ...............GROUP.BY.files_id
9aa0 27 3b 0a 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e ';.........$result.=.$this->db->
9ac0 71 75 65 72 79 28 24 71 75 65 72 79 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 24 72 65 73 query($query);.........if.(!$res
9ae0 75 6c 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 65 72 72 6f 72 20 3d 20 24 74 68 69 ult).{.............$error.=.$thi
9b00 73 2d 3e 64 62 2d 3e 6c 61 73 74 45 72 72 6f 72 4d 73 67 28 29 3b 0a 20 20 20 20 20 20 20 20 20 s->db->lastErrorMsg();..........
9b20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 43 61 6e 6e 6f 74 20 72 ...throw.new.Exception('Cannot.r
9b40 65 74 72 69 65 76 65 20 63 6f 76 65 72 61 67 65 20 66 6f 72 20 27 20 2e 20 24 70 61 74 68 2e 20 etrieve.coverage.for.'...$path..
9b60 20 27 3a 20 27 20 2e 20 24 65 72 72 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 .':.'...$error);.........}......
9b80 20 20 20 77 68 69 6c 65 20 28 24 72 65 73 20 3d 20 24 72 65 73 75 6c 74 2d 3e 66 65 74 63 68 41 ...while.($res.=.$result->fetchA
9ba0 72 72 61 79 28 53 51 4c 49 54 45 33 5f 4e 55 4d 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 rray(SQLITE3_NUM)).{............
9bc0 20 24 74 68 69 73 2d 3e 70 61 74 68 54 6f 74 61 6c 5b 24 72 65 73 5b 31 5d 5d 20 3d 20 24 72 65 .$this->pathTotal[$res[1]].=.$re
9be0 73 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 74 6f 74 61 6c 6c 69 s[0];.............$this->totalli
9c00 6e 65 73 20 2b 3d 20 24 72 65 73 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 nes.+=.$res[0];.........}.......
9c20 20 20 20 24 71 75 65 72 79 20 3d 20 27 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 6c 69 6e 65 6e 75 ...$query.=.'SELECT.COUNT(linenu
9c40 6d 62 65 72 29 2c 66 69 6c 65 70 61 74 68 20 46 52 4f 4d 20 63 6f 76 65 72 61 67 65 5f 70 65 72 mber),filepath.FROM.coverage_per
9c60 5f 66 69 6c 65 2c 20 66 69 6c 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 57 48 45 _file,.files.................WHE
9c80 52 45 20 63 6f 76 65 72 61 67 65 20 3e 20 30 20 41 4e 44 20 66 69 6c 65 73 2e 69 64 3d 63 6f 76 RE.coverage.>.0.AND.files.id=cov
9ca0 65 72 61 67 65 5f 70 65 72 5f 66 69 6c 65 2e 66 69 6c 65 73 5f 69 64 0a 20 20 20 20 20 20 20 20 erage_per_file.files_id.........
9cc0 20 20 20 20 20 20 20 20 47 52 4f 55 50 20 42 59 20 66 69 6c 65 73 5f 69 64 27 3b 0a 20 20 20 20 ........GROUP.BY.files_id';.....
9ce0 20 20 20 20 24 72 65 73 75 6c 74 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 71 75 65 72 79 28 24 ....$result.=.$this->db->query($
9d00 71 75 65 72 79 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 24 72 65 73 75 6c 74 29 20 7b 0a query);.........if.(!$result).{.
9d20 20 20 20 20 20 20 20 20 20 20 20 20 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e ............$error.=.$this->db->
9d40 6c 61 73 74 45 72 72 6f 72 4d 73 67 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f lastErrorMsg();.............thro
9d60 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 43 61 6e 6e 6f 74 20 72 65 74 72 69 65 76 65 w.new.Exception('Cannot.retrieve
9d80 20 63 6f 76 65 72 61 67 65 20 66 6f 72 20 27 20 2e 20 24 70 61 74 68 2e 20 20 27 3a 20 27 20 2e .coverage.for.'...$path...':.'..
9da0 20 24 65 72 72 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 77 68 69 6c .$error);.........}.........whil
9dc0 65 20 28 24 72 65 73 20 3d 20 24 72 65 73 75 6c 74 2d 3e 66 65 74 63 68 41 72 72 61 79 28 53 51 e.($res.=.$result->fetchArray(SQ
9de0 4c 49 54 45 33 5f 4e 55 4d 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 74 68 69 73 2d LITE3_NUM)).{.............$this-
9e00 3e 70 61 74 68 43 6f 76 65 72 65 64 5b 24 72 65 73 5b 31 5d 5d 20 3d 20 24 72 65 73 5b 30 5d 3b >pathCovered[$res[1]].=.$res[0];
9e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 63 6f 76 65 72 65 64 6c 69 6e 65 73 .............$this->coveredlines
9e40 20 2b 3d 20 24 72 65 73 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 .+=.$res[0];.........}..........
9e60 72 65 74 75 72 6e 20 61 72 72 61 79 28 24 74 68 69 73 2d 3e 63 6f 76 65 72 65 64 6c 69 6e 65 73 return.array($this->coveredlines
9e80 2c 20 24 74 68 69 73 2d 3e 74 6f 74 61 6c 6c 69 6e 65 73 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 ,.$this->totallines);.....}.....
9ea0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 72 69 65 76 65 50 61 74 68 43 6f 76 65 72 61 67 65 28 24 .function.retrievePathCoverage($
9ec0 70 61 74 68 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 24 74 68 69 73 2d 3e path).....{.........if.(!$this->
9ee0 74 6f 74 61 6c 6c 69 6e 65 73 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 73 65 74 totallines).{.............//.set
9f00 20 75 70 20 74 68 65 20 63 61 63 68 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 74 68 69 73 2d .up.the.cache.............$this-
9f20 3e 72 65 74 72 69 65 76 65 50 72 6f 6a 65 63 74 43 6f 76 65 72 61 67 65 28 29 3b 0a 20 20 20 20 >retrieveProjectCoverage();.....
9f40 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 69 73 73 65 74 28 24 74 68 69 73 2d 3e ....}.........if.(!isset($this->
9f60 70 61 74 68 43 6f 76 65 72 65 64 5b 24 70 61 74 68 5d 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 pathCovered[$path])).{..........
9f80 20 20 20 72 65 74 75 72 6e 20 61 72 72 61 79 28 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d ...return.array(0,.0);.........}
9fa0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 72 61 79 28 24 74 68 69 73 2d 3e 70 61 74 .........return.array($this->pat
9fc0 68 43 6f 76 65 72 65 64 5b 24 70 61 74 68 5d 2c 20 24 74 68 69 73 2d 3e 70 61 74 68 54 6f 74 61 hCovered[$path],.$this->pathTota
9fe0 6c 5b 24 70 61 74 68 5d 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 l[$path]);.....}......function.r
a000 65 74 72 69 65 76 65 50 61 74 68 43 6f 76 65 72 61 67 65 42 79 54 65 73 74 28 24 70 61 74 68 2c etrievePathCoverageByTest($path,
a020 20 24 74 65 73 74 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 69 64 20 3d 20 24 74 68 69 .$test).....{.........$id.=.$thi
a040 73 2d 3e 67 65 74 46 69 6c 65 49 64 28 24 70 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 24 74 65 s->getFileId($path);.........$te
a060 73 74 69 64 20 3d 20 24 74 68 69 73 2d 3e 67 65 74 54 65 73 74 49 64 28 24 74 65 73 74 29 3b 0a stid.=.$this->getTestId($test);.
a080 0a 20 20 20 20 20 20 20 20 24 71 75 65 72 79 20 3d 20 27 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 .........$query.=.'SELECT.COUNT(
a0a0 6c 69 6e 65 6e 75 6d 62 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20 63 6f 76 linenumber).............FROM.cov
a0c0 65 72 61 67 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 20 69 73 73 6f 75 72 63 65 erage.............WHERE.issource
a0e0 3d 31 20 41 4e 44 20 66 69 6c 65 73 5f 69 64 3d 27 20 2e 20 24 69 64 20 2e 20 27 20 41 4e 44 20 =1.AND.files_id='...$id...'.AND.
a100 74 65 73 74 73 5f 69 64 3d 27 20 2e 20 24 74 65 73 74 69 64 3b 0a 20 20 20 20 20 20 20 20 24 72 tests_id='...$testid;.........$r
a120 65 73 75 6c 74 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 71 75 65 72 79 28 24 71 75 65 72 79 29 esult.=.$this->db->query($query)
a140 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 24 72 65 73 75 6c 74 29 20 7b 0a 20 20 20 20 20 20 ;.........if.(!$result).{.......
a160 20 20 20 20 20 20 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 6c 61 73 74 45 72 ......$error.=.$this->db->lastEr
a180 72 6f 72 4d 73 67 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 rorMsg();.............throw.new.
a1a0 45 78 63 65 70 74 69 6f 6e 28 27 43 61 6e 6e 6f 74 20 72 65 74 72 69 65 76 65 20 70 61 74 68 20 Exception('Cannot.retrieve.path.
a1c0 63 6f 76 65 72 61 67 65 20 66 6f 72 20 27 20 2e 20 24 70 61 74 68 20 2e 0a 20 20 20 20 20 20 20 coverage.for.'...$path..........
a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 20 69 6e 20 74 65 .........................'.in.te
a200 73 74 20 27 20 2e 20 24 74 65 73 74 20 2e 20 27 3a 20 27 20 2e 20 24 65 72 72 6f 72 29 3b 0a 20 st.'...$test...':.'...$error);..
a220 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 24 72 65 74 20 3d 20 61 72 72 61 79 28 29 .......}..........$ret.=.array()
a240 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 24 72 65 73 20 3d 20 24 72 65 73 75 6c 74 2d ;.........while.($res.=.$result-
a260 3e 66 65 74 63 68 41 72 72 61 79 28 53 51 4c 49 54 45 33 5f 4e 55 4d 29 29 20 7b 0a 20 20 20 20 >fetchArray(SQLITE3_NUM)).{.....
a280 20 20 20 20 20 20 20 20 24 74 6f 74 61 6c 20 3d 20 24 72 65 73 5b 30 5d 3b 0a 20 20 20 20 20 20 ........$total.=.$res[0];.......
a2a0 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 24 71 75 65 72 79 20 3d 20 27 53 45 4c 45 43 54 20 43 4f ..}..........$query.=.'SELECT.CO
a2c0 55 4e 54 28 6c 69 6e 65 6e 75 6d 62 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d UNT(linenumber).............FROM
a2e0 20 63 6f 76 65 72 61 67 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 20 69 73 73 6f .coverage.............WHERE.isso
a300 75 72 63 65 3d 31 20 41 4e 44 20 69 73 63 6f 76 65 72 65 64 20 41 4e 44 20 66 69 6c 65 73 5f 69 urce=1.AND.iscovered.AND.files_i
a320 64 3d 27 20 2e 20 24 69 64 2e 20 27 20 41 4e 44 20 74 65 73 74 73 5f 69 64 3d 27 20 2e 20 24 74 d='...$id..'.AND.tests_id='...$t
a340 65 73 74 69 64 3b 0a 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 3d 20 24 74 68 69 73 2d 3e estid;.........$result.=.$this->
a360 64 62 2d 3e 71 75 65 72 79 28 24 71 75 65 72 79 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 db->query($query);.........if.(!
a380 24 72 65 73 75 6c 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 65 72 72 6f 72 20 3d 20 $result).{.............$error.=.
a3a0 24 74 68 69 73 2d 3e 64 62 2d 3e 6c 61 73 74 45 72 72 6f 72 4d 73 67 28 29 3b 0a 20 20 20 20 20 $this->db->lastErrorMsg();......
a3c0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 43 61 6e 6e .......throw.new.Exception('Cann
a3e0 6f 74 20 72 65 74 72 69 65 76 65 20 70 61 74 68 20 63 6f 76 65 72 61 67 65 20 66 6f 72 20 27 20 ot.retrieve.path.coverage.for.'.
a400 2e 20 24 70 61 74 68 20 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..$path.........................
a420 20 20 20 20 20 20 20 20 20 20 27 20 69 6e 20 74 65 73 74 20 27 20 2e 20 24 74 65 73 74 20 2e 20 ..........'.in.test.'...$test...
a440 27 3a 20 27 20 2e 20 24 65 72 72 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 ':.'...$error);.........}.......
a460 20 20 20 24 72 65 74 20 3d 20 61 72 72 61 79 28 29 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 ...$ret.=.array();.........while
a480 20 28 24 72 65 73 20 3d 20 24 72 65 73 75 6c 74 2d 3e 66 65 74 63 68 41 72 72 61 79 28 53 51 4c .($res.=.$result->fetchArray(SQL
a4a0 49 54 45 33 5f 4e 55 4d 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 63 6f 76 65 72 65 ITE3_NUM)).{.............$covere
a4c0 64 20 3d 20 24 72 65 73 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 d.=.$res[0];.........}.........r
a4e0 65 74 75 72 6e 20 61 72 72 61 79 28 24 63 6f 76 65 72 65 64 2c 20 24 74 6f 74 61 6c 29 3b 0a 20 eturn.array($covered,.$total);..
a500 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 72 69 65 76 65 43 6f 76 65 72 ...}......function.retrieveCover
a520 61 67 65 42 79 54 65 73 74 28 24 70 61 74 68 2c 20 24 74 65 73 74 29 0a 20 20 20 20 7b 0a 20 20 ageByTest($path,.$test).....{...
a540 20 20 20 20 20 20 24 69 64 20 3d 20 24 74 68 69 73 2d 3e 67 65 74 46 69 6c 65 49 64 28 24 70 61 ......$id.=.$this->getFileId($pa
a560 74 68 29 3b 0a 20 20 20 20 20 20 20 20 24 74 65 73 74 69 64 20 3d 20 24 74 68 69 73 2d 3e 67 65 th);.........$testid.=.$this->ge
a580 74 54 65 73 74 49 64 28 24 74 65 73 74 29 3b 0a 0a 20 20 20 20 20 20 20 20 24 71 75 65 72 79 20 tTestId($test);..........$query.
a5a0 3d 20 27 53 45 4c 45 43 54 20 69 73 63 6f 76 65 72 65 64 20 61 73 20 63 6f 76 65 72 61 67 65 2c =.'SELECT.iscovered.as.coverage,
a5c0 20 6c 69 6e 65 6e 75 6d 62 65 72 20 46 52 4f 4d 20 63 6f 76 65 72 61 67 65 0a 20 20 20 20 20 20 .linenumber.FROM.coverage.......
a5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 20 69 73 73 6f 75 72 63 65 3d 31 20 41 ..............WHERE.issource=1.A
a600 4e 44 20 66 69 6c 65 73 5f 69 64 3d 27 20 2e 20 24 69 64 20 2e 20 27 20 41 4e 44 20 74 65 73 74 ND.files_id='...$id...'.AND.test
a620 73 5f 69 64 3d 27 20 2e 20 24 74 65 73 74 69 64 3b 0a 20 20 20 20 20 20 20 20 24 72 65 73 75 6c s_id='...$testid;.........$resul
a640 74 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 71 75 65 72 79 28 24 71 75 65 72 79 29 3b 0a 20 20 t.=.$this->db->query($query);...
a660 20 20 20 20 20 20 69 66 20 28 21 24 72 65 73 75 6c 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 ......if.(!$result).{...........
a680 20 20 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 6c 61 73 74 45 72 72 6f 72 4d ..$error.=.$this->db->lastErrorM
a6a0 73 67 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 sg();.............throw.new.Exce
a6c0 70 74 69 6f 6e 28 27 43 61 6e 6e 6f 74 20 72 65 74 72 69 65 76 65 20 74 65 73 74 20 27 20 2e 20 ption('Cannot.retrieve.test.'...
a6e0 24 74 65 73 74 20 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 $test...........................
a700 20 20 20 20 20 20 20 20 27 20 63 6f 76 65 72 61 67 65 20 66 6f 72 20 27 20 2e 20 24 70 61 74 68 ........'.coverage.for.'...$path
a720 2e 20 20 27 3a 20 27 20 2e 20 24 65 72 72 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 ...':.'...$error);.........}....
a740 20 20 20 20 20 20 24 72 65 74 20 3d 20 61 72 72 61 79 28 29 3b 0a 20 20 20 20 20 20 20 20 77 68 ......$ret.=.array();.........wh
a760 69 6c 65 20 28 24 72 65 73 20 3d 20 24 72 65 73 75 6c 74 2d 3e 66 65 74 63 68 41 72 72 61 79 28 ile.($res.=.$result->fetchArray(
a780 53 51 4c 49 54 45 33 5f 41 53 53 4f 43 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 72 SQLITE3_ASSOC)).{.............$r
a7a0 65 74 5b 24 72 65 73 5b 27 6c 69 6e 65 6e 75 6d 62 65 72 27 5d 5d 20 3d 20 24 72 65 73 5b 27 63 et[$res['linenumber']].=.$res['c
a7c0 6f 76 65 72 61 67 65 27 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 overage'];.........}.........ret
a7e0 75 72 6e 20 24 72 65 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 67 65 urn.$ret;.....}......function.ge
a800 74 46 69 6c 65 49 64 28 24 70 61 74 68 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 71 75 tFileId($path).....{.........$qu
a820 65 72 79 20 3d 20 27 53 45 4c 45 43 54 20 69 64 20 46 52 4f 4d 20 66 69 6c 65 73 20 57 48 45 52 ery.=.'SELECT.id.FROM.files.WHER
a840 45 20 66 69 6c 65 70 61 74 68 3d 3a 66 69 6c 65 70 61 74 68 27 3b 0a 20 20 20 20 20 20 20 20 24 E.filepath=:filepath';.........$
a860 73 74 6d 74 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 70 72 65 70 61 72 65 28 24 71 75 65 72 79 stmt.=.$this->db->prepare($query
a880 29 3b 0a 20 20 20 20 20 20 20 20 24 73 74 6d 74 2d 3e 62 69 6e 64 56 61 6c 75 65 28 27 3a 66 69 );.........$stmt->bindValue(':fi
a8a0 6c 65 70 61 74 68 27 2c 20 24 70 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 28 24 lepath',.$path);.........if.(!($
a8c0 72 65 73 75 6c 74 20 3d 20 24 73 74 6d 74 2d 3e 65 78 65 63 75 74 65 28 29 29 29 20 7b 0a 20 20 result.=.$stmt->execute())).{...
a8e0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 55 ..........throw.new.Exception('U
a900 6e 61 62 6c 65 20 74 6f 20 72 65 74 72 69 65 76 65 20 66 69 6c 65 20 27 20 2e 20 24 70 61 74 68 nable.to.retrieve.file.'...$path
a920 20 2e 20 27 20 69 64 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 27 29 3b 0a 20 20 20 20 20 20 20 ...'.id.from.database');........
a940 20 7d 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 24 69 64 20 3d 20 24 72 65 73 75 6c 74 2d .}.........while.($id.=.$result-
a960 3e 66 65 74 63 68 41 72 72 61 79 28 53 51 4c 49 54 45 33 5f 4e 55 4d 29 29 20 7b 0a 20 20 20 20 >fetchArray(SQLITE3_NUM)).{.....
a980 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 69 64 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 7d ........return.$id[0];.........}
a9a0 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 55 6e .........throw.new.Exception('Un
a9c0 61 62 6c 65 20 74 6f 20 72 65 74 72 69 65 76 65 20 66 69 6c 65 20 27 20 2e 20 24 70 61 74 68 20 able.to.retrieve.file.'...$path.
a9e0 2e 20 27 20 69 64 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 27 29 3b 0a 20 20 20 20 7d 0a 0a 20 ..'.id.from.database');.....}...
aa00 20 20 20 66 75 6e 63 74 69 6f 6e 20 67 65 74 54 65 73 74 49 64 28 24 70 61 74 68 29 0a 20 20 20 ...function.getTestId($path)....
aa20 20 7b 0a 20 20 20 20 20 20 20 20 24 71 75 65 72 79 20 3d 20 27 53 45 4c 45 43 54 20 69 64 20 46 .{.........$query.=.'SELECT.id.F
aa40 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 74 65 73 74 70 61 74 68 3d 3a 66 69 6c 65 70 61 ROM.tests.WHERE.testpath=:filepa
aa60 74 68 27 3b 0a 20 20 20 20 20 20 20 20 24 73 74 6d 74 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e th';.........$stmt.=.$this->db->
aa80 70 72 65 70 61 72 65 28 24 71 75 65 72 79 29 3b 0a 20 20 20 20 20 20 20 20 24 73 74 6d 74 2d 3e prepare($query);.........$stmt->
aaa0 62 69 6e 64 56 61 6c 75 65 28 27 3a 66 69 6c 65 70 61 74 68 27 2c 20 24 70 61 74 68 29 3b 0a 20 bindValue(':filepath',.$path);..
aac0 20 20 20 20 20 20 20 69 66 20 28 21 28 24 72 65 73 75 6c 74 20 3d 20 24 73 74 6d 74 2d 3e 65 78 .......if.(!($result.=.$stmt->ex
aae0 65 63 75 74 65 28 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 ecute())).{.............throw.ne
ab00 77 20 45 78 63 65 70 74 69 6f 6e 28 27 55 6e 61 62 6c 65 20 74 6f 20 72 65 74 72 69 65 76 65 20 w.Exception('Unable.to.retrieve.
ab20 74 65 73 74 20 66 69 6c 65 20 27 20 2e 20 24 70 61 74 68 20 2e 20 27 20 69 64 20 66 72 6f 6d 20 test.file.'...$path...'.id.from.
ab40 64 61 74 61 62 61 73 65 27 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 77 68 database');.........}.........wh
ab60 69 6c 65 20 28 24 69 64 20 3d 20 24 72 65 73 75 6c 74 2d 3e 66 65 74 63 68 41 72 72 61 79 28 53 ile.($id.=.$result->fetchArray(S
ab80 51 4c 49 54 45 33 5f 4e 55 4d 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 QLITE3_NUM)).{.............retur
aba0 6e 20 24 69 64 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 74 68 72 6f n.$id[0];.........}.........thro
abc0 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 55 6e 61 62 6c 65 20 74 6f 20 72 65 74 72 69 w.new.Exception('Unable.to.retri
abe0 65 76 65 20 74 65 73 74 20 66 69 6c 65 20 27 20 2e 20 24 70 61 74 68 20 2e 20 27 20 69 64 20 66 eve.test.file.'...$path...'.id.f
ac00 72 6f 6d 20 64 61 74 61 62 61 73 65 27 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 rom.database');.....}......funct
ac20 69 6f 6e 20 72 65 6d 6f 76 65 4f 6c 64 54 65 73 74 28 24 74 65 73 74 70 61 74 68 2c 20 24 78 64 ion.removeOldTest($testpath,.$xd
ac40 65 62 75 67 70 61 74 68 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 74 72 79 20 7b 0a 20 20 ebugpath).....{.........try.{...
ac60 20 20 20 20 20 20 20 20 20 20 24 69 64 20 3d 20 24 74 68 69 73 2d 3e 67 65 74 54 65 73 74 49 64 ..........$id.=.$this->getTestId
ac80 28 24 74 65 73 74 70 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 7d 20 63 61 74 63 68 20 28 5c 45 ($testpath);.........}.catch.(\E
aca0 78 63 65 70 74 69 6f 6e 20 24 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 67 65 xception.$e).{.............//.ge
acc0 74 20 61 20 75 6e 69 71 75 65 20 49 44 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e t.a.unique.ID.............return
ace0 20 24 74 68 69 73 2d 3e 64 62 2d 3e 71 75 65 72 79 53 69 6e 67 6c 65 28 27 53 45 4c 45 43 54 20 .$this->db->querySingle('SELECT.
ad00 43 4f 55 4e 54 28 69 64 29 20 66 72 6f 6d 20 74 65 73 74 73 27 29 2b 31 3b 0a 20 20 20 20 20 20 COUNT(id).from.tests')+1;.......
ad20 20 20 7d 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 64 62 2d 3e 65 78 65 63 28 27 44 45 4c ..}.........$this->db->exec('DEL
ad40 45 54 45 20 46 52 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 69 64 3d 27 20 2e 20 24 69 64 29 ETE.FROM.tests.WHERE.id='...$id)
ad60 3b 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 64 62 2d 3e 65 78 65 63 28 27 44 45 4c 45 54 ;.........$this->db->exec('DELET
ad80 45 20 46 52 4f 4d 20 63 6f 76 65 72 61 67 65 20 57 48 45 52 45 20 74 65 73 74 73 5f 69 64 3d 27 E.FROM.coverage.WHERE.tests_id='
ada0 20 2e 20 24 69 64 29 3b 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 64 62 2d 3e 65 78 65 63 ...$id);.........$this->db->exec
adc0 28 27 44 45 4c 45 54 45 20 46 52 4f 4d 20 78 64 65 62 75 67 73 20 57 48 45 52 45 20 78 64 65 62 ('DELETE.FROM.xdebugs.WHERE.xdeb
ade0 75 67 70 61 74 68 3d 22 27 20 2e 20 24 74 68 69 73 2d 3e 64 62 2d 3e 65 73 63 61 70 65 53 74 72 ugpath="'...$this->db->escapeStr
ae00 69 6e 67 28 24 78 64 65 62 75 67 70 61 74 68 29 20 2e 20 27 22 27 29 3b 0a 20 20 20 20 20 20 20 ing($xdebugpath)...'"');........
ae20 20 72 65 74 75 72 6e 20 24 69 64 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e .return.$id;.....}......function
ae40 20 61 64 64 54 65 73 74 28 24 74 65 73 74 70 61 74 68 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 .addTest($testpath).....{.......
ae60 20 20 24 69 64 20 3d 20 24 74 68 69 73 2d 3e 72 65 6d 6f 76 65 4f 6c 64 54 65 73 74 28 24 74 65 ..$id.=.$this->removeOldTest($te
ae80 73 74 70 61 74 68 2c 20 73 74 72 5f 72 65 70 6c 61 63 65 28 27 2e 70 68 70 74 27 2c 20 27 2e 78 stpath,.str_replace('.phpt',.'.x
aea0 64 65 62 75 67 27 2c 20 24 74 65 73 74 70 61 74 68 29 29 3b 0a 20 20 20 20 20 20 20 20 24 71 75 debug',.$testpath));.........$qu
aec0 65 72 79 20 3d 20 27 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 73 74 73 0a 20 20 20 20 20 20 20 ery.=.'INSERT.INTO.tests........
aee0 20 20 20 20 20 28 74 65 73 74 70 61 74 68 2c 20 74 65 73 74 70 61 74 68 6d 64 35 29 0a 20 20 20 .....(testpath,.testpathmd5)....
af00 20 20 20 20 20 20 20 20 20 56 41 4c 55 45 53 28 3a 74 65 73 74 70 61 74 68 2c 20 3a 6d 64 35 29 .........VALUES(:testpath,.:md5)
af20 27 3b 0a 20 20 20 20 20 20 20 20 24 73 74 6d 74 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 70 72 ';.........$stmt.=.$this->db->pr
af40 65 70 61 72 65 28 24 71 75 65 72 79 29 3b 0a 20 20 20 20 20 20 20 20 24 73 74 6d 74 2d 3e 62 69 epare($query);.........$stmt->bi
af60 6e 64 56 61 6c 75 65 28 27 3a 74 65 73 74 70 61 74 68 27 2c 20 24 74 65 73 74 70 61 74 68 29 3b ndValue(':testpath',.$testpath);
af80 0a 20 20 20 20 20 20 20 20 24 6d 64 35 20 3d 20 6d 64 35 5f 66 69 6c 65 28 24 74 65 73 74 70 61 .........$md5.=.md5_file($testpa
afa0 74 68 29 3b 0a 20 20 20 20 20 20 20 20 24 73 74 6d 74 2d 3e 62 69 6e 64 56 61 6c 75 65 28 27 3a th);.........$stmt->bindValue(':
afc0 6d 64 35 27 2c 20 24 6d 64 35 29 3b 0a 20 20 20 20 20 20 20 20 24 73 74 6d 74 2d 3e 65 78 65 63 md5',.$md5);.........$stmt->exec
afe0 75 74 65 28 29 3b 0a 20 20 20 20 20 20 20 20 24 69 64 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e ute();.........$id.=.$this->db->
b000 6c 61 73 74 49 6e 73 65 72 74 52 6f 77 49 44 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 24 71 75 65 lastInsertRowID();..........$que
b020 72 79 20 3d 20 27 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 64 65 62 75 67 73 0a 20 20 20 20 20 20 ry.=.'INSERT.INTO.xdebugs.......
b040 20 20 20 20 20 20 28 78 64 65 62 75 67 70 61 74 68 2c 20 78 64 65 62 75 67 70 61 74 68 6d 64 35 ......(xdebugpath,.xdebugpathmd5
b060 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 41 4c 55 45 53 28 3a 74 65 73 74 70 61 74 68 2c 20 ).............VALUES(:testpath,.
b080 3a 6d 64 35 29 27 3b 0a 20 20 20 20 20 20 20 20 24 73 74 6d 74 20 3d 20 24 74 68 69 73 2d 3e 64 :md5)';.........$stmt.=.$this->d
b0a0 62 2d 3e 70 72 65 70 61 72 65 28 24 71 75 65 72 79 29 3b 0a 20 20 20 20 20 20 20 20 24 73 74 6d b->prepare($query);.........$stm
b0c0 74 2d 3e 62 69 6e 64 56 61 6c 75 65 28 27 3a 74 65 73 74 70 61 74 68 27 2c 20 73 74 72 5f 72 65 t->bindValue(':testpath',.str_re
b0e0 70 6c 61 63 65 28 27 2e 70 68 70 74 27 2c 20 27 2e 78 64 65 62 75 67 27 2c 20 24 74 65 73 74 70 place('.phpt',.'.xdebug',.$testp
b100 61 74 68 29 29 3b 0a 20 20 20 20 20 20 20 20 24 6d 64 35 20 3d 20 6d 64 35 5f 66 69 6c 65 28 73 ath));.........$md5.=.md5_file(s
b120 74 72 5f 72 65 70 6c 61 63 65 28 27 2e 70 68 70 74 27 2c 20 27 2e 78 64 65 62 75 67 27 2c 20 24 tr_replace('.phpt',.'.xdebug',.$
b140 74 65 73 74 70 61 74 68 29 29 3b 0a 20 20 20 20 20 20 20 20 24 73 74 6d 74 2d 3e 62 69 6e 64 56 testpath));.........$stmt->bindV
b160 61 6c 75 65 28 27 3a 6d 64 35 27 2c 20 24 6d 64 35 29 3b 0a 20 20 20 20 20 20 20 20 24 73 74 6d alue(':md5',.$md5);.........$stm
b180 74 2d 3e 65 78 65 63 75 74 65 28 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 69 64 t->execute();.........return.$id
b1a0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 75 6e 43 68 61 6e 67 65 64 58 ;.....}......function.unChangedX
b1c0 64 65 62 75 67 28 24 70 61 74 68 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 71 75 65 72 debug($path).....{.........$quer
b1e0 79 20 3d 20 27 53 45 4c 45 43 54 20 78 64 65 62 75 67 70 61 74 68 6d 64 35 20 46 52 4f 4d 20 78 y.=.'SELECT.xdebugpathmd5.FROM.x
b200 64 65 62 75 67 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 debugs.....................WHERE
b220 20 78 64 65 62 75 67 70 61 74 68 3d 3a 70 61 74 68 27 3b 0a 20 20 20 20 20 20 20 20 24 73 74 6d .xdebugpath=:path';.........$stm
b240 74 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 70 72 65 70 61 72 65 28 24 71 75 65 72 79 29 3b 0a t.=.$this->db->prepare($query);.
b260 20 20 20 20 20 20 20 20 24 73 74 6d 74 2d 3e 62 69 6e 64 56 61 6c 75 65 28 27 3a 70 61 74 68 27 ........$stmt->bindValue(':path'
b280 2c 20 24 70 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 3d 20 24 73 74 6d ,.$path);.........$result.=.$stm
b2a0 74 2d 3e 65 78 65 63 75 74 65 28 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 24 72 65 73 75 t->execute();.........if.(!$resu
b2c0 6c 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a lt).{.............return.false;.
b2e0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 24 6d 64 35 20 3d 20 30 3b 0a 20 20 20 20 ........}.........$md5.=.0;.....
b300 20 20 20 20 77 68 69 6c 65 20 28 24 72 65 73 20 3d 20 24 72 65 73 75 6c 74 2d 3e 66 65 74 63 68 ....while.($res.=.$result->fetch
b320 41 72 72 61 79 28 53 51 4c 49 54 45 33 5f 4e 55 4d 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 Array(SQLITE3_NUM)).{...........
b340 20 20 24 6d 64 35 20 3d 20 24 72 65 73 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ..$md5.=.$res[0];.........}.....
b360 20 20 20 20 69 66 20 28 21 24 6d 64 35 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ....if.(!$md5).{.............ret
b380 75 72 6e 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 urn.false;.........}.........if.
b3a0 28 24 6d 64 35 20 3d 3d 20 6d 64 35 5f 66 69 6c 65 28 24 70 61 74 68 29 29 20 7b 0a 20 20 20 20 ($md5.==.md5_file($path)).{.....
b3c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 ........return.true;.........}..
b3e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 .......return.false;.....}......
b400 66 75 6e 63 74 69 6f 6e 20 61 64 64 46 69 6c 65 28 24 66 69 6c 65 70 61 74 68 2c 20 24 69 73 73 function.addFile($filepath,.$iss
b420 6f 75 72 63 65 20 3d 20 30 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 71 75 65 72 79 20 ource.=.0).....{.........$query.
b440 3d 20 27 53 45 4c 45 43 54 20 69 64 20 46 52 4f 4d 20 66 69 6c 65 73 20 57 48 45 52 45 20 66 69 =.'SELECT.id.FROM.files.WHERE.fi
b460 6c 65 70 61 74 68 3d 3a 66 69 6c 65 70 61 74 68 27 3b 0a 20 20 20 20 20 20 20 20 24 73 74 6d 74 lepath=:filepath';.........$stmt
b480 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 70 72 65 70 61 72 65 28 24 71 75 65 72 79 29 3b 0a 20 .=.$this->db->prepare($query);..
b4a0 20 20 20 20 20 20 20 24 73 74 6d 74 2d 3e 62 69 6e 64 50 61 72 61 6d 28 27 3a 66 69 6c 65 70 61 .......$stmt->bindParam(':filepa
b4c0 74 68 27 2c 20 24 66 69 6c 65 70 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 28 24 th',.$filepath);.........if.(!($
b4e0 72 65 73 75 6c 74 20 3d 20 24 73 74 6d 74 2d 3e 65 78 65 63 75 74 65 28 29 29 29 20 7b 0a 20 20 result.=.$stmt->execute())).{...
b500 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 55 ..........throw.new.Exception('U
b520 6e 61 62 6c 65 20 74 6f 20 61 64 64 20 66 69 6c 65 20 27 20 2e 20 24 66 69 6c 65 70 61 74 68 20 nable.to.add.file.'...$filepath.
b540 2e 20 27 20 74 6f 20 64 61 74 61 62 61 73 65 27 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 ..'.to.database');.........}....
b560 20 20 20 20 20 77 68 69 6c 65 20 28 24 69 64 20 3d 20 24 72 65 73 75 6c 74 2d 3e 66 65 74 63 68 .....while.($id.=.$result->fetch
b580 41 72 72 61 79 28 53 51 4c 49 54 45 33 5f 4e 55 4d 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 Array(SQLITE3_NUM)).{...........
b5a0 20 20 24 71 75 65 72 79 20 3d 20 27 55 50 44 41 54 45 20 66 69 6c 65 73 20 53 45 54 20 66 69 6c ..$query.=.'UPDATE.files.SET.fil
b5c0 65 70 61 74 68 6d 64 35 3d 3a 6d 64 35 20 57 48 45 52 45 20 66 69 6c 65 70 61 74 68 3d 3a 66 69 epathmd5=:md5.WHERE.filepath=:fi
b5e0 6c 65 70 61 74 68 27 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 73 74 6d 74 20 3d 20 24 74 68 lepath';.............$stmt.=.$th
b600 69 73 2d 3e 64 62 2d 3e 70 72 65 70 61 72 65 28 24 71 75 65 72 79 29 3b 0a 20 20 20 20 20 20 20 is->db->prepare($query);........
b620 20 20 20 20 20 24 73 74 6d 74 2d 3e 62 69 6e 64 50 61 72 61 6d 28 27 3a 66 69 6c 65 70 61 74 68 .....$stmt->bindParam(':filepath
b640 27 2c 20 24 66 69 6c 65 70 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6d 64 35 20 ',.$filepath);.............$md5.
b660 3d 20 6d 64 35 5f 66 69 6c 65 28 24 66 69 6c 65 70 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 20 =.md5_file($filepath);..........
b680 20 20 20 24 73 74 6d 74 2d 3e 62 69 6e 64 50 61 72 61 6d 28 27 3a 6d 64 35 27 2c 20 24 6d 64 35 ...$stmt->bindParam(':md5',.$md5
b6a0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 24 73 74 6d 74 2d 3e 65 78 65 63 75 );.............if.(!$stmt->execu
b6c0 74 65 28 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 te()).{.................throw.ne
b6e0 77 20 45 78 63 65 70 74 69 6f 6e 28 27 55 6e 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 20 66 69 w.Exception('Unable.to.update.fi
b700 6c 65 20 27 20 2e 20 24 66 69 6c 65 70 61 74 68 20 2e 20 27 20 6d 64 35 20 69 6e 20 64 61 74 61 le.'...$filepath...'.md5.in.data
b720 62 61 73 65 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 base');.............}...........
b740 20 20 72 65 74 75 72 6e 20 24 69 64 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 ..return.$id[0];.........}......
b760 20 20 20 24 73 74 6d 74 2d 3e 63 6c 65 61 72 28 29 3b 0a 20 20 20 20 20 20 20 20 24 71 75 65 72 ...$stmt->clear();.........$quer
b780 79 20 3d 20 27 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 69 6c 65 73 0a 20 20 20 20 20 20 20 20 20 y.=.'INSERT.INTO.files..........
b7a0 20 20 20 28 66 69 6c 65 70 61 74 68 2c 20 66 69 6c 65 70 61 74 68 6d 64 35 2c 20 69 73 73 6f 75 ...(filepath,.filepathmd5,.issou
b7c0 72 63 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 41 4c 55 45 53 28 3a 74 65 73 74 70 61 74 rce).............VALUES(:testpat
b7e0 68 2c 20 3a 6d 64 35 2c 20 3a 69 73 73 6f 75 72 63 65 29 27 3b 0a 20 20 20 20 20 20 20 20 24 73 h,.:md5,.:issource)';.........$s
b800 74 6d 74 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 70 72 65 70 61 72 65 28 24 71 75 65 72 79 29 tmt.=.$this->db->prepare($query)
b820 3b 0a 20 20 20 20 20 20 20 20 24 73 74 6d 74 2d 3e 62 69 6e 64 56 61 6c 75 65 28 27 3a 74 65 73 ;.........$stmt->bindValue(':tes
b840 74 70 61 74 68 27 2c 20 24 66 69 6c 65 70 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 24 6d 64 35 tpath',.$filepath);.........$md5
b860 20 3d 20 6d 64 35 5f 66 69 6c 65 28 24 66 69 6c 65 70 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 .=.md5_file($filepath);.........
b880 24 73 74 6d 74 2d 3e 62 69 6e 64 56 61 6c 75 65 28 27 3a 6d 64 35 27 2c 20 24 6d 64 35 29 3b 0a $stmt->bindValue(':md5',.$md5);.
b8a0 20 20 20 20 20 20 20 20 24 73 74 6d 74 2d 3e 62 69 6e 64 56 61 6c 75 65 28 27 3a 69 73 73 6f 75 ........$stmt->bindValue(':issou
b8c0 72 63 65 27 2c 20 24 69 73 73 6f 75 72 63 65 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 24 rce',.$issource);.........if.(!$
b8e0 73 74 6d 74 2d 3e 65 78 65 63 75 74 65 28 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 stmt->execute()).{.............t
b900 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 55 6e 61 62 6c 65 20 74 6f 20 61 64 hrow.new.Exception('Unable.to.ad
b920 64 20 66 69 6c 65 20 27 20 2e 20 24 66 69 6c 65 70 61 74 68 20 2e 20 27 20 74 6f 20 64 61 74 61 d.file.'...$filepath...'.to.data
b940 62 61 73 65 27 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e base');.........}.........return
b960 20 24 74 68 69 73 2d 3e 64 62 2d 3e 6c 61 73 74 49 6e 73 65 72 74 52 6f 77 49 44 28 29 3b 0a 20 .$this->db->lastInsertRowID();..
b980 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 67 65 74 54 6f 74 61 6c 43 6f 76 65 72 ...}......function.getTotalCover
b9a0 61 67 65 28 24 66 69 6c 65 2c 20 24 6c 69 6e 65 6e 75 6d 62 65 72 29 0a 20 20 20 20 7b 0a 20 20 age($file,.$linenumber).....{...
b9c0 20 20 20 20 20 20 24 71 75 65 72 79 20 3d 20 27 53 45 4c 45 43 54 20 63 6f 76 65 72 61 67 65 63 ......$query.=.'SELECT.coveragec
b9e0 6f 75 6e 74 20 46 52 4f 4d 20 63 6f 76 65 72 61 67 65 5f 70 65 72 5f 66 69 6c 65 0a 20 20 20 20 ount.FROM.coverage_per_file.....
ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 20 66 69 6c 65 73 5f 69 64 3d 27 ................WHERE.files_id='
ba20 20 2e 20 24 74 68 69 73 2d 3e 67 65 74 46 69 6c 65 49 64 28 24 66 69 6c 65 29 20 2e 20 27 20 41 ...$this->getFileId($file)...'.A
ba40 4e 44 20 6c 69 6e 65 6e 75 6d 62 65 72 3d 27 20 2e 20 24 6c 69 6e 65 6e 75 6d 62 65 72 3b 0a 20 ND.linenumber='...$linenumber;..
ba60 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 71 75 65 72 .......$result.=.$this->db->quer
ba80 79 28 24 71 75 65 72 79 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 24 72 65 73 75 6c 74 29 y($query);.........if.(!$result)
baa0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 20 20 20 .{.............return.false;....
bac0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 24 63 6f 76 65 72 61 67 65 20 3d 20 30 3b 0a 20 20 .....}.........$coverage.=.0;...
bae0 20 20 20 20 20 20 77 68 69 6c 65 20 28 24 72 65 73 20 3d 20 24 72 65 73 75 6c 74 2d 3e 66 65 74 ......while.($res.=.$result->fet
bb00 63 68 41 72 72 61 79 28 53 51 4c 49 54 45 33 5f 4e 55 4d 29 29 20 7b 0a 20 20 20 20 20 20 20 20 chArray(SQLITE3_NUM)).{.........
bb20 20 20 20 20 24 63 6f 76 65 72 61 67 65 20 3d 20 24 72 65 73 5b 30 5d 3b 0a 20 20 20 20 20 20 20 ....$coverage.=.$res[0];........
bb40 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 76 65 72 61 67 65 3b 0a 20 20 20 .}.........return.$coverage;....
bb60 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 72 69 65 76 65 43 6f 76 65 72 61 67 .}......function.retrieveCoverag
bb80 65 28 24 70 61 74 68 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 69 64 20 3d 20 24 74 68 e($path).....{.........$id.=.$th
bba0 69 73 2d 3e 67 65 74 46 69 6c 65 49 64 28 24 70 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 24 71 is->getFileId($path);.........$q
bbc0 75 65 72 79 20 3d 20 27 53 45 4c 45 43 54 20 63 6f 76 65 72 61 67 65 2c 20 6c 69 6e 65 6e 75 6d uery.=.'SELECT.coverage,.linenum
bbe0 62 65 72 20 46 52 4f 4d 20 63 6f 76 65 72 61 67 65 5f 70 65 72 5f 66 69 6c 65 0a 20 20 20 20 20 ber.FROM.coverage_per_file......
bc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 20 66 69 6c 65 73 5f 69 64 3d 27 20 ...............WHERE.files_id='.
bc20 2e 20 24 69 64 20 2e 20 27 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 52 ..$id...'.....................OR
bc40 44 45 52 20 42 59 20 6c 69 6e 65 6e 75 6d 62 65 72 20 41 53 43 27 3b 0a 20 20 20 20 20 20 20 20 DER.BY.linenumber.ASC';.........
bc60 24 72 65 73 75 6c 74 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 71 75 65 72 79 28 24 71 75 65 72 $result.=.$this->db->query($quer
bc80 79 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 24 72 65 73 75 6c 74 29 20 7b 0a 20 20 20 20 y);.........if.(!$result).{.....
bca0 20 20 20 20 20 20 20 20 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 6c 61 73 74 ........$error.=.$this->db->last
bcc0 45 72 72 6f 72 4d 73 67 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 ErrorMsg();.............throw.ne
bce0 77 20 45 78 63 65 70 74 69 6f 6e 28 27 43 61 6e 6e 6f 74 20 72 65 74 72 69 65 76 65 20 63 6f 76 w.Exception('Cannot.retrieve.cov
bd00 65 72 61 67 65 20 66 6f 72 20 27 20 2e 20 24 70 61 74 68 2e 20 20 27 3a 20 27 20 2e 20 24 65 72 erage.for.'...$path...':.'...$er
bd20 72 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 24 72 65 74 20 3d 20 ror);.........}..........$ret.=.
bd40 61 72 72 61 79 28 29 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 24 72 65 73 20 3d 20 24 array();.........while.($res.=.$
bd60 72 65 73 75 6c 74 2d 3e 66 65 74 63 68 41 72 72 61 79 28 53 51 4c 49 54 45 33 5f 41 53 53 4f 43 result->fetchArray(SQLITE3_ASSOC
bd80 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 74 5b 24 72 65 73 5b 27 6c 69 6e 65 )).{.............$ret[$res['line
bda0 6e 75 6d 62 65 72 27 5d 5d 20 3d 20 24 72 65 73 5b 27 63 6f 76 65 72 61 67 65 27 5d 3b 0a 20 20 number']].=.$res['coverage'];...
bdc0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 74 3b 0a 20 20 20 ......}.........return.$ret;....
bde0 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 54 68 69 73 20 69 73 20 75 73 65 64 20 .}....../**......*.This.is.used.
be00 74 6f 20 67 65 74 20 74 68 65 20 63 6f 76 65 72 61 67 65 20 77 68 69 63 68 20 69 73 20 74 68 65 to.get.the.coverage.which.is.the
be20 6e 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 6f 75 72 0a 20 20 20 20 20 2a 20 69 6e 74 65 72 n.inserted.into.our......*.inter
be40 6d 65 64 69 61 74 65 20 63 6f 76 65 72 61 67 65 5f 70 65 72 5f 66 69 6c 65 20 74 61 62 6c 65 20 mediate.coverage_per_file.table.
be60 74 6f 20 73 70 65 65 64 20 74 68 69 6e 67 73 20 75 70 20 61 74 20 72 65 6e 64 65 72 69 6e 67 0a to.speed.things.up.at.rendering.
be80 20 20 20 20 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 72 69 65 76 65 53 6c 6f .....*/.....function.retrieveSlo
bea0 77 43 6f 76 65 72 61 67 65 28 24 69 64 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 71 75 wCoverage($id).....{.........$qu
bec0 65 72 79 20 3d 20 27 53 45 4c 45 43 54 20 53 55 4d 28 69 73 63 6f 76 65 72 65 64 29 20 61 73 20 ery.=.'SELECT.SUM(iscovered).as.
bee0 63 6f 76 65 72 61 67 65 2c 20 6c 69 6e 65 6e 75 6d 62 65 72 20 46 52 4f 4d 20 63 6f 76 65 72 61 coverage,.linenumber.FROM.covera
bf00 67 65 20 57 48 45 52 45 20 66 69 6c 65 73 5f 69 64 3d 27 20 2e 20 24 69 64 20 2e 20 27 0a 20 20 ge.WHERE.files_id='...$id...'...
bf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 52 4f 55 50 20 42 59 20 6c 69 6e 65 6e ..................GROUP.BY.linen
bf40 75 6d 62 65 72 27 3b 0a 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 3d 20 24 74 68 69 73 2d umber';.........$result.=.$this-
bf60 3e 64 62 2d 3e 71 75 65 72 79 28 24 71 75 65 72 79 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 >db->query($query);.........if.(
bf80 21 24 72 65 73 75 6c 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 65 72 72 6f 72 20 3d !$result).{.............$error.=
bfa0 20 24 74 68 69 73 2d 3e 64 62 2d 3e 6c 61 73 74 45 72 72 6f 72 4d 73 67 28 29 3b 0a 20 20 20 20 .$this->db->lastErrorMsg();.....
bfc0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 43 61 6e ........throw.new.Exception('Can
bfe0 6e 6f 74 20 72 65 74 72 69 65 76 65 20 63 6f 76 65 72 61 67 65 20 66 6f 72 20 27 20 2e 20 24 70 not.retrieve.coverage.for.'...$p
c000 61 74 68 2e 20 20 27 3a 20 27 20 2e 20 24 65 72 72 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a ath...':.'...$error);.........}.
c020 0a 20 20 20 20 20 20 20 20 24 72 65 74 20 3d 20 61 72 72 61 79 28 29 3b 0a 20 20 20 20 20 20 20 .........$ret.=.array();........
c040 20 77 68 69 6c 65 20 28 24 72 65 73 20 3d 20 24 72 65 73 75 6c 74 2d 3e 66 65 74 63 68 41 72 72 .while.($res.=.$result->fetchArr
c060 61 79 28 53 51 4c 49 54 45 33 5f 41 53 53 4f 43 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 ay(SQLITE3_ASSOC)).{............
c080 20 24 72 65 74 5b 24 72 65 73 5b 27 6c 69 6e 65 6e 75 6d 62 65 72 27 5d 5d 20 3d 20 24 72 65 73 .$ret[$res['linenumber']].=.$res
c0a0 5b 27 63 6f 76 65 72 61 67 65 27 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 ['coverage'];.........}.........
c0c0 72 65 74 75 72 6e 20 24 72 65 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e return.$ret;.....}......function
c0e0 20 75 70 64 61 74 65 54 6f 74 61 6c 43 6f 76 65 72 61 67 65 28 29 0a 20 20 20 20 7b 0a 20 20 20 .updateTotalCoverage().....{....
c100 20 20 20 20 20 24 71 75 65 72 79 20 3d 20 27 44 45 4c 45 54 45 20 46 52 4f 4d 20 63 6f 76 65 72 .....$query.=.'DELETE.FROM.cover
c120 61 67 65 5f 70 65 72 5f 66 69 6c 65 27 3b 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 64 62 age_per_file';.........$this->db
c140 2d 3e 65 78 65 63 28 24 71 75 65 72 79 29 3b 0a 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 55 70 ->exec($query);.........echo."Up
c160 64 61 74 69 6e 67 20 63 6f 76 65 72 61 67 65 20 70 65 72 2d 66 69 6c 65 20 69 6e 74 65 72 6d 65 dating.coverage.per-file.interme
c180 64 69 61 74 65 20 74 61 62 6c 65 5c 6e 22 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 diate.table\n";.........foreach.
c1a0 28 24 74 68 69 73 2d 3e 72 65 74 72 69 65 76 65 50 61 74 68 73 28 29 20 61 73 20 24 70 61 74 68 ($this->retrievePaths().as.$path
c1c0 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 2e 22 3b 0a 20 20 20 20 20 20 ).{.............echo.".";.......
c1e0 20 20 20 20 20 20 24 69 64 20 3d 20 24 74 68 69 73 2d 3e 67 65 74 46 69 6c 65 49 64 28 24 70 61 ......$id.=.$this->getFileId($pa
c200 74 68 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 24 74 68 69 73 2d th);.............foreach.($this-
c220 3e 72 65 74 72 69 65 76 65 53 6c 6f 77 43 6f 76 65 72 61 67 65 28 24 69 64 29 20 61 73 20 24 6c >retrieveSlowCoverage($id).as.$l
c240 69 6e 65 6e 75 6d 62 65 72 20 3d 3e 20 24 63 6f 76 65 72 61 67 65 29 20 7b 0a 20 20 20 20 20 20 inenumber.=>.$coverage).{.......
c260 20 20 20 20 20 20 20 20 20 20 24 71 75 65 72 79 20 3d 20 27 49 4e 53 45 52 54 20 49 4e 54 4f 20 ..........$query.=.'INSERT.INTO.
c280 63 6f 76 65 72 61 67 65 5f 70 65 72 5f 66 69 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 coverage_per_file...............
c2a0 20 20 20 20 20 20 28 66 69 6c 65 73 5f 69 64 2c 20 63 6f 76 65 72 61 67 65 2c 20 6c 69 6e 65 6e ......(files_id,.coverage,.linen
c2c0 75 6d 62 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 41 4c 55 45 umber).....................VALUE
c2e0 53 28 27 20 2e 20 24 69 64 20 2e 20 27 2c 27 20 2e 20 24 63 6f 76 65 72 61 67 65 20 2e 20 27 2c S('...$id...','...$coverage...',
c300 27 20 2e 20 24 6c 69 6e 65 6e 75 6d 62 65 72 20 2e 27 29 27 3b 0a 20 20 20 20 20 20 20 20 20 20 '...$linenumber..')';...........
c320 20 20 20 20 20 20 24 74 68 69 73 2d 3e 64 62 2d 3e 65 78 65 63 28 24 71 75 65 72 79 29 3b 0a 20 ......$this->db->exec($query);..
c340 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 65 ...........}.........}.........e
c360 63 68 6f 20 22 64 6f 6e 65 5c 6e 22 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f cho."done\n";.....}......functio
c380 6e 20 61 64 64 43 6f 76 65 72 61 67 65 28 24 74 65 73 74 70 61 74 68 2c 20 24 74 65 73 74 69 64 n.addCoverage($testpath,.$testid
c3a0 2c 20 24 78 64 65 62 75 67 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 ,.$xdebug).....{.........foreach
c3c0 20 28 24 78 64 65 62 75 67 20 61 73 20 24 70 61 74 68 20 3d 3e 20 24 72 65 73 75 6c 74 73 29 20 .($xdebug.as.$path.=>.$results).
c3e0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 66 69 6c 65 5f 65 78 69 73 74 73 28 24 {.............if.(!file_exists($
c400 70 61 74 68 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 path)).{.................continu
c420 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 e;.............}.............if.
c440 28 73 74 72 70 6f 73 28 24 70 61 74 68 2c 20 24 74 68 69 73 2d 3e 63 6f 64 65 70 61 74 68 29 20 (strpos($path,.$this->codepath).
c460 21 3d 3d 20 30 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 69 73 73 6f 75 72 !==.0).{.................$issour
c480 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 ce.=.0;.............}.else.{....
c4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 70 6f 73 28 24 70 61 74 68 2c 20 24 .............if.(strpos($path,.$
c4c0 74 68 69 73 2d 3e 74 65 73 74 70 61 74 68 29 20 3d 3d 3d 20 30 29 20 7b 0a 20 20 20 20 20 20 20 this->testpath).===.0).{........
c4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 69 73 73 6f 75 72 63 65 20 3d 20 30 3b 0a 20 20 20 20 .............$issource.=.0;.....
c500 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 ............}.else.{............
c520 20 20 20 20 20 20 20 20 20 24 69 73 73 6f 75 72 63 65 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 .........$issource.=.1;.........
c540 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 ........}.............}.........
c560 20 20 20 20 65 63 68 6f 20 22 2e 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 69 64 20 3d 20 ....echo.".";.............$id.=.
c580 24 74 68 69 73 2d 3e 61 64 64 46 69 6c 65 28 24 70 61 74 68 2c 20 24 69 73 73 6f 75 72 63 65 29 $this->addFile($path,.$issource)
c5a0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 24 72 65 73 75 6c 74 73 20 ;.............foreach.($results.
c5c0 61 73 20 24 6c 69 6e 65 20 3d 3e 20 24 69 6e 66 6f 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 as.$line.=>.$info).{............
c5e0 20 20 20 20 20 69 66 20 28 24 69 6e 66 6f 20 3e 20 30 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 .....if.($info.>.0).{...........
c600 20 20 20 20 20 20 20 20 20 20 24 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ..........$res.=.1;.............
c620 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ....}.else.{....................
c640 20 24 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 .$res.=.0;.................}....
c660 20 20 20 20 20 20 20 20 20 20 20 20 20 24 71 75 65 72 79 20 3d 20 27 49 4e 53 45 52 54 20 49 4e .............$query.=.'INSERT.IN
c680 54 4f 20 63 6f 76 65 72 61 67 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 TO.coverage.....................
c6a0 28 66 69 6c 65 73 5f 69 64 2c 20 74 65 73 74 73 5f 69 64 2c 20 6c 69 6e 65 6e 75 6d 62 65 72 2c (files_id,.tests_id,.linenumber,
c6c0 20 69 73 63 6f 76 65 72 65 64 2c 20 69 73 73 6f 75 72 63 65 29 0a 20 20 20 20 20 20 20 20 20 20 .iscovered,.issource)...........
c6e0 20 20 20 20 20 20 20 20 20 20 56 41 4c 55 45 53 28 27 20 2e 20 24 69 64 20 2e 20 27 2c 20 27 20 ..........VALUES('...$id...',.'.
c700 2e 20 24 74 65 73 74 69 64 20 2e 20 27 2c 20 27 20 2e 20 24 6c 69 6e 65 20 2e 20 27 2c 20 27 20 ..$testid...',.'...$line...',.'.
c720 2e 20 24 72 65 73 20 2e 20 27 2c 27 20 2e 20 24 69 73 73 6f 75 72 63 65 20 2e 20 27 29 27 3b 0a ..$res...','...$issource...')';.
c740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 77 6f 72 6b 65 64 20 3d 20 24 74 68 69 73 .................$worked.=.$this
c760 2d 3e 64 62 2d 3e 65 78 65 63 28 24 71 75 65 72 79 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ->db->exec($query);.............
c780 20 20 20 20 69 66 20 28 21 24 77 6f 72 6b 65 64 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....if.(!$worked).{.............
c7a0 20 20 20 20 20 20 20 20 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 6c 61 73 74 ........$error.=.$this->db->last
c7c0 45 72 72 6f 72 4d 73 67 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ErrorMsg();.....................
c7e0 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28 27 43 61 6e 6e 6f 74 20 61 64 64 20 throw.new.Exception('Cannot.add.
c800 63 6f 76 65 72 61 67 65 20 66 6f 72 20 74 65 73 74 20 27 20 2e 20 24 74 65 73 74 70 61 74 68 20 coverage.for.test.'...$testpath.
c820 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
c840 20 20 20 20 20 20 20 20 20 20 27 2c 20 63 6f 76 65 72 65 64 20 66 69 6c 65 20 27 20 2e 20 24 70 ..........',.covered.file.'...$p
c860 61 74 68 20 2e 20 27 3a 20 27 20 2e 20 24 65 72 72 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 ath...':.'...$error);...........
c880 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a ......}.............}.........}.
c8a0 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 62 65 67 69 6e 28 29 0a 20 20 20 20 ....}......function.begin().....
c8c0 7b 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 64 62 2d 3e 65 78 65 63 28 27 42 45 47 49 4e {.........$this->db->exec('BEGIN
c8e0 27 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 28 29 ');.....}......function.commit()
c900 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 64 62 2d 3e 65 78 65 63 28 27 .....{.........$this->db->exec('
c920 43 4f 4d 4d 49 54 27 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 COMMIT');.....}....../**......*.
c940 52 65 74 72 69 65 76 65 20 61 20 6c 69 73 74 20 6f 66 20 2e 70 68 70 74 20 74 65 73 74 73 20 74 Retrieve.a.list.of..phpt.tests.t
c960 68 61 74 20 65 69 74 68 65 72 20 68 61 76 65 20 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 2c 0a 20 hat.either.have.been.modified,..
c980 20 20 20 20 2a 20 6f 72 20 74 68 65 20 66 69 6c 65 73 20 74 68 65 79 20 61 63 63 65 73 73 20 68 ....*.or.the.files.they.access.h
c9a0 61 76 65 20 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 0a 20 20 20 20 20 2a 20 40 72 65 74 75 72 6e ave.been.modified......*.@return
c9c0 20 61 72 72 61 79 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 67 65 74 4d .array......*/.....function.getM
c9e0 6f 64 69 66 69 65 64 54 65 73 74 73 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 6d 6f odifiedTests().....{.........$mo
ca00 64 69 66 69 65 64 50 61 74 68 73 20 3d 20 61 72 72 61 79 28 29 3b 0a 20 20 20 20 20 20 20 20 24 difiedPaths.=.array();.........$
ca20 6d 6f 64 69 66 69 65 64 54 65 73 74 73 20 3d 20 61 72 72 61 79 28 29 3b 0a 20 20 20 20 20 20 20 modifiedTests.=.array();........
ca40 20 24 70 61 74 68 73 20 3d 20 24 74 68 69 73 2d 3e 72 65 74 72 69 65 76 65 50 61 74 68 73 28 31 .$paths.=.$this->retrievePaths(1
ca60 29 3b 0a 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 53 63 61 6e 6e 69 6e 67 20 22 2c 20 63 6f 75 );.........echo."Scanning.",.cou
ca80 6e 74 28 24 70 61 74 68 73 29 2c 20 22 20 73 6f 75 72 63 65 20 66 69 6c 65 73 22 3b 0a 20 20 20 nt($paths),.".source.files";....
caa0 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 24 70 61 74 68 73 20 61 73 20 24 70 61 74 68 29 20 7b .....foreach.($paths.as.$path).{
cac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 63 68 6f 20 27 2e 27 3b 0a 20 20 20 20 20 20 20 20 20 .............echo.'.';..........
cae0 20 20 20 24 71 75 65 72 79 20 3d 20 27 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 45 ...$query.=.'.................SE
cb00 4c 45 43 54 20 69 64 2c 20 66 69 6c 65 70 61 74 68 6d 64 35 20 46 52 4f 4d 20 66 69 6c 65 73 20 LECT.id,.filepathmd5.FROM.files.
cb20 77 68 65 72 65 20 66 69 6c 65 70 61 74 68 3d 22 27 20 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 where.filepath="'...............
cb40 20 20 20 20 24 74 68 69 73 2d 3e 64 62 2d 3e 65 73 63 61 70 65 53 74 72 69 6e 67 28 24 70 61 74 ....$this->db->escapeString($pat
cb60 68 29 20 2e 20 27 22 27 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 3d 20 h)...'"';.............$result.=.
cb80 24 74 68 69 73 2d 3e 64 62 2d 3e 71 75 65 72 79 28 24 71 75 65 72 79 29 3b 0a 20 20 20 20 20 20 $this->db->query($query);.......
cba0 20 20 20 20 20 20 77 68 69 6c 65 20 28 24 72 65 73 20 3d 20 24 72 65 73 75 6c 74 2d 3e 66 65 74 ......while.($res.=.$result->fet
cbc0 63 68 41 72 72 61 79 28 53 51 4c 49 54 45 33 5f 41 53 53 4f 43 29 29 20 7b 0a 20 20 20 20 20 20 chArray(SQLITE3_ASSOC)).{.......
cbe0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 64 35 5f 66 69 6c 65 28 24 70 61 74 68 29 20 3d 3d ..........if.(md5_file($path).==
cc00 20 24 72 65 73 5b 27 66 69 6c 65 70 61 74 68 6d 64 35 27 5d 29 20 7b 0a 20 20 20 20 20 20 20 20 .$res['filepathmd5']).{.........
cc20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ............break;..............
cc40 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6d 6f 64 69 66 69 65 64 50 61 ...}.................$modifiedPa
cc60 74 68 73 5b 5d 20 3d 20 24 70 61 74 68 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f ths[].=.$path;................./
cc80 2f 20 66 69 6c 65 20 69 73 20 6d 6f 64 69 66 69 65 64 2c 20 67 65 74 20 61 20 6c 69 73 74 20 6f /.file.is.modified,.get.a.list.o
cca0 66 20 74 65 73 74 73 20 74 68 61 74 20 65 78 65 63 75 74 65 20 74 68 69 73 20 66 69 6c 65 0a 20 f.tests.that.execute.this.file..
ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 71 75 65 72 79 20 3d 20 27 0a 20 20 20 20 20 20 ...............$query.=.'.......
cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 74 2e 74 65 73 74 70 61 74 68 0a ..............SELECT.t.testpath.
cd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20 63 6f 76 65 72 61 67 ....................FROM.coverag
cd20 65 20 63 2c 20 74 65 73 74 73 20 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e.c,.tests.t....................
cd40 20 57 48 45 52 45 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 .WHERE.........................c
cd60 2e 66 69 6c 65 73 5f 69 64 3d 27 20 2e 20 24 72 65 73 5b 27 69 64 27 5d 20 2e 20 27 0a 20 20 20 .files_id='...$res['id']...'....
cd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 74 2e 69 64 3d 63 2e .....................AND.t.id=c.
cda0 74 65 73 74 73 5f 69 64 27 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75 tests_id';.................$resu
cdc0 6c 74 32 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 71 75 65 72 79 28 24 71 75 65 72 79 29 3b 0a lt2.=.$this->db->query($query);.
cde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 24 72 65 73 20 3d 20 24 72 ................while.($res.=.$r
ce00 65 73 75 6c 74 32 2d 3e 66 65 74 63 68 41 72 72 61 79 28 53 51 4c 49 54 45 33 5f 4e 55 4d 29 29 esult2->fetchArray(SQLITE3_NUM))
ce20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6d 6f 64 69 66 69 65 64 .{.....................$modified
ce40 54 65 73 74 73 5b 24 72 65 73 5b 30 5d 5d 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 20 Tests[$res[0]].=.true;..........
ce60 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a .......}.................break;.
ce80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 ............}.........}.........
cea0 65 63 68 6f 20 22 64 6f 6e 65 5c 6e 22 3b 0a 20 20 20 20 20 20 20 20 65 63 68 6f 20 63 6f 75 6e echo."done\n";.........echo.coun
cec0 74 28 24 6d 6f 64 69 66 69 65 64 50 61 74 68 73 29 2c 20 27 20 6d 6f 64 69 66 69 65 64 20 66 69 t($modifiedPaths),.'.modified.fi
cee0 6c 65 73 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 les.resulting.in.',.............
cf00 63 6f 75 6e 74 28 24 6d 6f 64 69 66 69 65 64 54 65 73 74 73 29 2c 20 22 20 6d 6f 64 69 66 69 65 count($modifiedTests),.".modifie
cf20 64 20 74 65 73 74 73 5c 6e 22 3b 0a 20 20 20 20 20 20 20 20 24 70 61 74 68 73 20 3d 20 24 74 68 d.tests\n";.........$paths.=.$th
cf40 69 73 2d 3e 72 65 74 72 69 65 76 65 54 65 73 74 50 61 74 68 73 28 29 3b 0a 20 20 20 20 20 20 20 is->retrieveTestPaths();........
cf60 20 65 63 68 6f 20 22 53 63 61 6e 6e 69 6e 67 20 22 2c 20 63 6f 75 6e 74 28 24 70 61 74 68 73 29 .echo."Scanning.",.count($paths)
cf80 2c 20 22 20 74 65 73 74 20 70 61 74 68 73 22 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 ,.".test.paths";.........foreach
cfa0 20 28 24 70 61 74 68 73 20 61 73 20 24 70 61 74 68 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 .($paths.as.$path).{............
cfc0 20 65 63 68 6f 20 27 2e 27 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 71 75 65 72 79 20 3d 20 .echo.'.';.............$query.=.
cfe0 27 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 69 64 2c 20 74 65 73 '.................SELECT.id,.tes
d000 74 70 61 74 68 6d 64 35 20 46 52 4f 4d 20 74 65 73 74 73 20 77 68 65 72 65 20 74 65 73 74 70 61 tpathmd5.FROM.tests.where.testpa
d020 74 68 3d 22 27 20 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 64 th="'...................$this->d
d040 62 2d 3e 65 73 63 61 70 65 53 74 72 69 6e 67 28 24 70 61 74 68 29 20 2e 20 27 22 27 3b 0a 20 20 b->escapeString($path)...'"';...
d060 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 3d 20 24 74 68 69 73 2d 3e 64 62 2d 3e 71 ..........$result.=.$this->db->q
d080 75 65 72 79 28 24 71 75 65 72 79 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 uery($query);.............while.
d0a0 28 24 72 65 73 20 3d 20 24 72 65 73 75 6c 74 2d 3e 66 65 74 63 68 41 72 72 61 79 28 53 51 4c 49 ($res.=.$result->fetchArray(SQLI
d0c0 54 45 33 5f 41 53 53 4f 43 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 TE3_ASSOC)).{.................if
d0e0 20 28 6d 64 35 5f 66 69 6c 65 28 24 70 61 74 68 29 20 21 3d 20 24 72 65 73 5b 27 74 65 73 74 70 .(md5_file($path).!=.$res['testp
d100 61 74 68 6d 64 35 27 5d 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 athmd5']).{.....................
d120 24 6d 6f 64 69 66 69 65 64 54 65 73 74 73 5b 24 70 61 74 68 5d 20 3d 20 74 72 75 65 3b 0a 20 20 $modifiedTests[$path].=.true;...
d140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 ..............}.............}...
d160 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 64 6f 6e 65 5c 6e 22 3b 0a 20 ......}.........echo."done\n";..
d180 20 20 20 20 20 20 20 65 63 68 6f 20 63 6f 75 6e 74 28 24 6d 6f 64 69 66 69 65 64 54 65 73 74 73 .......echo.count($modifiedTests
d1a0 29 2c 20 22 20 74 65 73 74 73 20 73 68 6f 75 6c 64 20 62 65 20 72 65 2d 72 75 6e 5c 6e 22 3b 0a ),.".tests.should.be.re-run\n";.
d1c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 72 61 79 5f 6b 65 79 73 28 24 6d 6f 64 69 66 ........return.array_keys($modif
d1e0 69 65 64 54 65 73 74 73 29 3b 0a 20 20 20 20 7d 0a 7d 0a 7d 0a 3f 3e 3c 3f 70 68 70 0a 6e 61 6d iedTests);.....}.}.}.?><?php.nam
d200 65 73 70 61 63 65 20 50 45 41 52 32 5c 50 79 72 75 73 5c 44 65 76 65 6c 6f 70 65 72 5c 43 6f 76 espace.PEAR2\Pyrus\Developer\Cov
d220 65 72 61 67 65 41 6e 61 6c 79 7a 65 72 5c 53 6f 75 72 63 65 46 69 6c 65 20 7b 0a 75 73 65 20 50 erageAnalyzer\SourceFile.{.use.P
d240 45 41 52 32 5c 50 79 72 75 73 5c 44 65 76 65 6c 6f 70 65 72 5c 43 6f 76 65 72 61 67 65 41 6e 61 EAR2\Pyrus\Developer\CoverageAna
d260 6c 79 7a 65 72 5c 41 67 67 72 65 67 61 74 6f 72 2c 0a 20 20 20 20 50 45 41 52 32 5c 50 79 72 75 lyzer\Aggregator,.....PEAR2\Pyru
d280 73 5c 44 65 76 65 6c 6f 70 65 72 5c 43 6f 76 65 72 61 67 65 41 6e 61 6c 79 7a 65 72 5c 41 62 73 s\Developer\CoverageAnalyzer\Abs
d2a0 74 72 61 63 74 53 6f 75 72 63 65 44 65 63 6f 72 61 74 6f 72 3b 0a 63 6c 61 73 73 20 50 65 72 54 tractSourceDecorator;.class.PerT
d2c0 65 73 74 20 65 78 74 65 6e 64 73 20 5c 50 45 41 52 32 5c 50 79 72 75 73 5c 44 65 76 65 6c 6f 70 est.extends.\PEAR2\Pyrus\Develop
d2e0 65 72 5c 43 6f 76 65 72 61 67 65 41 6e 61 6c 79 7a 65 72 5c 53 6f 75 72 63 65 46 69 6c 65 0a 7b er\CoverageAnalyzer\SourceFile.{
d300 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 24 74 65 73 74 6e 61 6d 65 3b 0a 0a 20 20 20 20 66 .....protected.$testname;......f
d320 75 6e 63 74 69 6f 6e 20 5f 5f 63 6f 6e 73 74 72 75 63 74 28 24 70 61 74 68 2c 20 41 67 67 72 65 unction.__construct($path,.Aggre
d340 67 61 74 6f 72 20 24 61 67 67 2c 20 24 74 65 73 74 70 61 74 68 2c 20 24 73 6f 75 72 63 65 70 61 gator.$agg,.$testpath,.$sourcepa
d360 74 68 2c 20 24 74 65 73 74 6e 61 6d 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 74 68 th,.$testname).....{.........$th
d380 69 73 2d 3e 74 65 73 74 6e 61 6d 65 20 3d 20 24 74 65 73 74 6e 61 6d 65 3b 0a 20 20 20 20 20 20 is->testname.=.$testname;.......
d3a0 20 20 70 61 72 65 6e 74 3a 3a 5f 5f 63 6f 6e 73 74 72 75 63 74 28 24 70 61 74 68 2c 20 24 61 67 ..parent::__construct($path,.$ag
d3c0 67 2c 20 24 74 65 73 74 70 61 74 68 2c 20 24 73 6f 75 72 63 65 70 61 74 68 29 3b 0a 20 20 20 20 g,.$testpath,.$sourcepath);.....
d3e0 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 73 65 74 43 6f 76 65 72 61 67 65 28 29 0a 20 20 }......function.setCoverage()...
d400 20 20 7b 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 63 6f 76 65 72 61 67 65 20 3d 20 24 74 ..{.........$this->coverage.=.$t
d420 68 69 73 2d 3e 61 67 67 72 65 67 61 74 6f 72 2d 3e 72 65 74 72 69 65 76 65 43 6f 76 65 72 61 67 his->aggregator->retrieveCoverag
d440 65 42 79 54 65 73 74 28 24 74 68 69 73 2d 3e 70 61 74 68 2c 20 24 74 68 69 73 2d 3e 74 65 73 74 eByTest($this->path,.$this->test
d460 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 63 6f 76 65 72 name);.....}......function.cover
d480 65 64 4c 69 6e 65 73 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 69 6e 66 6f 20 3d 20 edLines().....{.........$info.=.
d4a0 24 74 68 69 73 2d 3e 61 67 67 72 65 67 61 74 6f 72 2d 3e 63 6f 76 65 72 61 67 65 49 6e 66 6f 42 $this->aggregator->coverageInfoB
d4c0 79 54 65 73 74 28 24 74 68 69 73 2d 3e 70 61 74 68 2c 20 24 74 68 69 73 2d 3e 74 65 73 74 6e 61 yTest($this->path,.$this->testna
d4e0 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 69 6e 66 6f 5b 30 5d 3b 0a 20 20 me);.........return.$info[0];...
d500 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 65 6e 64 65 72 28 41 62 73 74 72 61 63 ..}......function.render(Abstrac
d520 74 53 6f 75 72 63 65 44 65 63 6f 72 61 74 6f 72 20 24 64 65 63 6f 72 61 74 6f 72 20 3d 20 6e 75 tSourceDecorator.$decorator.=.nu
d540 6c 6c 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 24 64 65 63 6f 72 61 74 6f 72 ll).....{.........if.($decorator
d560 20 3d 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 64 65 63 6f 72 61 .===.null).{.............$decora
d580 74 6f 72 20 3d 20 6e 65 77 20 44 65 66 61 75 6c 74 53 6f 75 72 63 65 44 65 63 6f 72 61 74 6f 72 tor.=.new.DefaultSourceDecorator
d5a0 28 27 2e 27 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 ('.');.........}.........return.
d5c0 24 64 65 63 6f 72 61 74 6f 72 2d 3e 72 65 6e 64 65 72 28 24 74 68 69 73 2c 20 24 74 68 69 73 2d $decorator->render($this,.$this-
d5e0 3e 74 65 73 74 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 >testname);.....}......function.
d600 63 6f 76 65 72 61 67 65 50 65 72 63 65 6e 74 61 67 65 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 coveragePercentage().....{......
d620 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 61 67 67 72 65 67 61 74 6f 72 2d 3e 63 6f 76 ...return.$this->aggregator->cov
d640 65 72 61 67 65 50 65 72 63 65 6e 74 61 67 65 28 24 74 68 69 73 2d 3e 70 61 74 68 2c 20 24 74 68 eragePercentage($this->path,.$th
d660 69 73 2d 3e 74 65 73 74 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a 7d 0a 7d 0a 3f 3e 0a 3c 3f 70 68 is->testname);.....}.}.}.?>.<?ph
d680 70 0a 6e 61 6d 65 73 70 61 63 65 20 50 45 41 52 32 5c 50 79 72 75 73 5c 44 65 76 65 6c 6f 70 65 p.namespace.PEAR2\Pyrus\Develope
d6a0 72 5c 43 6f 76 65 72 61 67 65 41 6e 61 6c 79 7a 65 72 20 7b 0a 24 63 6c 61 73 73 20 3d 20 22 50 r\CoverageAnalyzer.{.$class.=."P
d6c0 45 41 52 32 5c 50 79 72 75 73 5c 44 65 76 65 6c 6f 70 65 72 5c 43 6f 76 65 72 61 67 65 41 6e 61 EAR2\Pyrus\Developer\CoverageAna
d6e0 6c 79 7a 65 72 5c 57 65 62 5c 56 69 65 77 22 3b 0a 76 61 72 5f 64 75 6d 70 28 73 74 72 5f 72 65 lyzer\Web\View";.var_dump(str_re
d700 70 6c 61 63 65 28 22 50 45 41 52 32 5c 50 79 72 75 73 5c 44 65 76 65 6c 6f 70 65 72 5c 43 6f 76 place("PEAR2\Pyrus\Developer\Cov
d720 65 72 61 67 65 41 6e 61 6c 79 7a 65 72 22 2c 20 22 22 2c 20 24 63 6c 61 73 73 29 29 3b 0a 24 76 erageAnalyzer",."",.$class));.$v
d740 69 65 77 20 3d 20 6e 65 77 20 57 65 62 5c 56 69 65 77 3b 0a 24 72 6f 6f 74 75 72 6c 20 3d 20 24 iew.=.new.Web\View;.$rooturl.=.$
d760 5f 53 45 52 56 45 52 5b 22 52 45 51 55 45 53 54 5f 55 52 49 22 5d 3b 0a 24 63 6f 6e 74 72 6f 6c _SERVER["REQUEST_URI"];.$control
d780 6c 65 72 20 3d 20 6e 65 77 20 57 65 62 5c 43 6f 6e 74 72 6f 6c 6c 65 72 28 24 76 69 65 77 2c 20 ler.=.new.Web\Controller($view,.
d7a0 24 72 6f 6f 74 75 72 6c 29 3b 0a 24 63 6f 6e 74 72 6f 6c 6c 65 72 2d 3e 72 6f 75 74 65 28 29 3b $rooturl);.$controller->route();
d7c0 0a 7d d0 bd 18 6c 94 5d 64 e3 6e 5a e4 c9 cd f4 47 b3 1c 7c 85 88 02 00 00 00 47 42 4d 42 .}...l.]d.nZ....G..|......GBMB