View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000969 | Xdebug | Uncategorized | public | 2013-08-12 10:46 | 2013-10-09 18:38 |
Reporter | vis7mac | Assigned To | derick | ||
Priority | high | Severity | major | Reproducibility | always |
Status | resolved | Resolution | no change required | ||
Platform | Unix | OS | OS X | OS Version | 10.8.4 |
Product Version | 2.2.3 | ||||
Summary | 0000969: XDebug (when used with PHPUnit) marks closing curly braces after a switch or if as not covered | ||||
Description | I use XDebug 2.2.3 together with PHP_CodeCoverage 1.2.12 and PHPUnit 3.7.24 to generate code coverage reports for my code tested by PHPUnit. My code includes some switch case statements right at the end of methods, so I process a value and depending on it different values get returned right in the switch case: <code>public function someMethod() { $value = $this->doSomething(); switch($value) { case 1: return true; case 2: return false; case 3: throw new Exception('Error.'); } } // This line is marked as "not executed" in the code coverage report</code> As you can see, there is no case where the switch would be left and PHP would proceed executing the code of the method - instead, in every case the switch is left with a return statement or throwing an Exception. I don't use a default statement here because I know what the possible return values are. These are also tested by my Unit Tests. BTW: This bug also works for if conditions using a return statement as I read in Stack Overflow, but I didn't test that. This is not really a bug in XDebug as the last line (marked in the code) with only the closing curly brace is actually never run - but the question is if this should be like that: A curly brace (or any other bracket) is not a piece of code to execute - instead, it's a way of structuring the code so the interpreter understands what to do. A curly brace can not even ever be "executed". My request: Ignore lines with only a brace from code coverage analysis. | ||||
Steps To Reproduce | Use the code I mentioned in the description. This might also just be a function, but I only tested with a instance method. | ||||
Additional Information | My PHP version is actually 5.5.1 and not 5.5-dev - but I can't select it. You should probably fix that. :D | ||||
Tags | No tags attached. | ||||
Operating System | OS X 10.8.4 | ||||
PHP Version | 5.5-dev | ||||
|
This is not a bug. In theory "$value" could be something else than 1, 2 or 3 and in that case the switch() would *not* leave due to one of the values. Xdebug can not make assumptions on what "doSomething()" returns an has no way to know that all that ever is returned than 1, 2 or 3. The last } of each function and method includes an implicit "return NULL;" - which PHP sees as executable code. Because there is a possible code path where the } is not hit, it is marked as "not executed". |
Date Modified | Username | Field | Change |
---|---|---|---|
2013-08-12 10:46 | vis7mac | New Issue | |
2013-10-09 18:38 | derick | Note Added: 0002575 | |
2013-10-09 18:38 | derick | Status | new => resolved |
2013-10-09 18:38 | derick | Resolution | open => no change required |
2013-10-09 18:38 | derick | Assigned To | => derick |
2016-07-31 12:36 | derick | Category | Usage problems => Usage problems (Crashes) |
2016-07-31 12:38 | derick | Category | Usage problems (Crashes) => Usage problems (Wrong Results) |
2020-03-12 16:35 | derick | Category | Usage problems (Wrong Results) => Variable Display |
2020-03-12 16:38 | derick | Category | Variable Display => Uncategorized |