$oReporter->paintGroupStart("Layer {$layer}", count($aTestFiles));
 foreach ($aTestFiles as $subLayer => $aDirectories) {
     $oReporter->paintGroupStart("Sublayer {$subLayer}", count($aDirectories));
     foreach ($aDirectories as $dirName => $aFiles) {
         $oReporter->paintGroupStart("Directory {$dirName} ({$testName})", count($aFiles));
         foreach ($aFiles as $fileName) {
             $oReporter->paintCaseStart("File {$fileName} ({$testName})");
             // Prepare the name of the test to display when running
             for ($counter = 0; $counter < count($GLOBALS['_MAX']['TEST']['groups']) - 1; $counter++) {
                 if ($layer == $GLOBALS['_MAX']['TEST']['groups'][$counter]) {
                     $layerDisplayName = $GLOBALS['_MAX']['TEST'][$GLOBALS['_MAX']['TEST']['groups'][$counter] . '_layers'][$subLayer][0];
                 }
             }
             preg_match('/^([^\\.]+)/', $fileName, $aMatches);
             $testDisplayName = ucfirst(strtolower($layer)) . '.' . $layerDisplayName . '.' . $aMatches[1];
             $oReporter->paintMethodStart($testDisplayName);
             // Restore conf file to make sure each test runs with a clean one
             file_put_contents($testConfFile, $testConf);
             $returncode = -1;
             $output_lines = '';
             $exec = "run.php --type={$layer} --level=file --layer={$subLayer} --folder={$dirName}" . " --file={$fileName} --format=text --host=test 2>&1";
             exec("{$php} {$exec}", $output_lines, $returncode);
             $message = "{$fileName}\n" . join($output_lines, "\n");
             switch ($returncode) {
                 case 0:
                     $oReporter->paintPass($message);
                     break;
                 default:
                     $message = "Unexpected return code {$returncode}\n" . $message;
                 case 1:
                     $message = "Directory: " . dirname(__FILE__) . "\nFailed command: {$php} {$exec}\n" . $message;