From 93c005cc5a26705bc22f244559339ce98158fb75 Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Wed, 5 Nov 2014 09:58:39 +0800 Subject: [PATCH] Option to generate code coverage with PHPUnit --- extra/bash_completion | 2 +- mdk/commands/phpunit.py | 14 ++++++++++++-- mdk/phpunit.py | 34 +++++++++++++++++++++++++++------- 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/extra/bash_completion b/extra/bash_completion index ea44ccd..f9ef0ee 100644 --- a/extra/bash_completion +++ b/extra/bash_completion @@ -169,7 +169,7 @@ function _mdk() { OPTS="$(compgen -A file $CUR)" compopt -o nospace else - OPTS="--force --run --testcase --unittest --filter" + OPTS="--force --run --testcase --unittest --filter --coverage" OPTS="$OPTS $(_list_instances)" fi ;; diff --git a/mdk/commands/phpunit.py b/mdk/commands/phpunit.py index 74e0324..f859a46 100644 --- a/mdk/commands/phpunit.py +++ b/mdk/commands/phpunit.py @@ -65,6 +65,13 @@ class PhpunitCommand(Command): } ), ( + ['-c', '--coverage'], + { + 'action': 'store_true', + 'help': 'creates the HTML code coverage report' + } + ), + ( ['--filter'], { 'default': None, @@ -134,13 +141,16 @@ class PhpunitCommand(Command): PU.init(force=args.force, prefix=prefix) kwargs = { + 'coverage': args.coverage, + 'filter': args.filter, 'testcase': args.testcase, - 'unittest': args.unittest, - 'filter': args.filter + 'unittest': args.unittest } if args.run: PU.run(**kwargs) + if args.coverage: + logging.info('Code coverage is available at: \n %s', (PU.getCoverageUrl())) else: logging.info('Start PHPUnit:\n %s' % (' '.join(PU.getCommand(**kwargs)))) diff --git a/mdk/phpunit.py b/mdk/phpunit.py index 4ac48b9..fa461d4 100644 --- a/mdk/phpunit.py +++ b/mdk/phpunit.py @@ -40,7 +40,7 @@ class PHPUnit(object): self._Wp = Wp self._M = M - def getCommand(self, **kwargs): + def getCommand(self, testcase=None, unittest=None, filter=None, coverage=None): """Get the PHPUnit command""" cmd = [] if self.usesComposer(): @@ -48,15 +48,35 @@ class PHPUnit(object): else: cmd.append('phpunit') - if kwargs.get('testcase'): - cmd.append(kwargs.get('testcase')) - elif kwargs.get('unittest'): - cmd.append(kwargs.get('unittest')) - elif kwargs.get('filter'): - cmd.append('--filter="%s"' % kwargs.get('filter')) + if coverage: + cmd.append('--coverage-html') + cmd.append(self.getCoverageDir()) + + if testcase: + cmd.append(testcase) + elif unittest: + cmd.append(unittest) + elif filter: + cmd.append('--filter="%s"' % filter) return cmd + def getCoverageDir(self): + """Get the Coverage directory, and create it if required""" + path = os.path.join(self.Wp.getPath(self.M.get('identifier'), 'extra'), 'coverage') + if not os.path.exists(path): + mkdir(path, 0777) + return path + + def getCoverageUrl(self): + """Return the code coverage URL""" + # TODO Constructing the URL should be done elsewhere... + wwwroot = '%s://%s/' % (C.get('scheme'), C.get('host')) + if C.get('path') != '' and C.get('path') != None: + wwwroot = wwwroot + C.get('path') + '/' + wwwroot = wwwroot + C.get('mdkDir') + '/' + self.M.get('identifier') + '/coverage' + return wwwroot + def init(self, force=False, prefix=None): """Initialise the PHPUnit environment""" -- 2.11.0