/** * Tests the extending classes Sniff class. * * @return void * @throws PHPUnit_Framework_Error */ protected final function runTest() { // Skip this test if we can't run in this environment. if ($this->shouldSkipTest() === true) { $this->markTestSkipped(); } // The basis for determining file locations. $basename = substr(get_class($this), 0, -8); // The name of the coding standard we are testing. $standardName = substr($basename, 0, strpos($basename, '_')); // The class name of the sniff we are testing. $sniffClass = str_replace('_Tests_', '_Sniffs_', $basename) . 'Sniff'; if (is_file(dirname(__FILE__) . '/../../CodeSniffer.php') === true) { // We have not been installed. $standardsDir = realpath(dirname(__FILE__) . '/../../CodeSniffer/Standards'); $testFileBase = $standardsDir . DIRECTORY_SEPARATOR . str_replace('_', DIRECTORY_SEPARATOR, $basename) . 'UnitTest.'; } else { // The name of the dummy file we are testing. $testFileBase = dirname(__FILE__) . DIRECTORY_SEPARATOR . str_replace('_', DIRECTORY_SEPARATOR, $basename) . 'UnitTest.'; } // Get a list of all test files to check. These will have the same base // name but different extensions. We ignore the .php file as it is the // class. $testFiles = array(); $dir = substr($testFileBase, 0, strrpos($testFileBase, DIRECTORY_SEPARATOR)); $di = new DirectoryIterator($dir); foreach ($di as $file) { $path = $file->getPathname(); if (substr($path, 0, strlen($testFileBase)) === $testFileBase) { if ($path !== $testFileBase . 'php') { $testFiles[] = $path; } } } // Get them in order. sort($testFiles); self::$phpcs->process(array(), $standardName, array($sniffClass)); self::$phpcs->setIgnorePatterns(array()); $failureMessages = array(); foreach ($testFiles as $testFile) { try { self::$phpcs->processFile($testFile); } catch (Exception $e) { $this->fail('An unexpected exception has been caught: ' . $e->getMessage()); } $files = self::$phpcs->getFiles(); if (empty($files) === true) { // File was skipped for some reason. echo "Skipped: {$testFile}\n"; $this->markTestSkipped(); } $file = array_pop($files); $failures = $this->generateFailureMessages($file); $failureMessages = array_merge($failureMessages, $failures); } //end foreach if (empty($failureMessages) === false) { $this->fail(implode(PHP_EOL, $failureMessages)); } }
/** * Tests the extending classes Sniff class. * * @return void * @throws PHPUnit_Framework_Error * @test */ public final function runTest() { self::$_phpcs->process([], 'DWS', [$this->_getSniffName()]); self::$_phpcs->setIgnorePatterns([]); $testFile = dirname(__DIR__) . '/tests/' . str_replace('_', '/', get_class($this)) . '.inc'; if (!file_exists($testFile)) { $this->markTestSkipped(); return; } try { self::$_phpcs->processFile($testFile); } catch (Exception $e) { $this->fail("An unexpected exception has been caught: {$e->getMessage()}"); } $files = self::$_phpcs->getFiles(); if ($files === []) { echo "Skipped: {$testFile}\n"; $this->markTestSkipped(); } $failureMessages = $this->generateFailureMessages($files[0]); if (count($failureMessages) > 0) { $this->fail(implode("\n", $failureMessages)); } }
/** * Test suppressing a whole file. * * @return void */ public function testSuppressFile() { $phpcs = new PHP_CodeSniffer(); $phpcs->setTokenListeners('Squiz', array('Generic_Sniffs_Commenting_TodoSniff')); $phpcs->populateTokenListeners(); // Process without suppression. $content = '<?php ' . PHP_EOL . '//TODO: write some code'; $phpcs->processFile('noSuppressionTest.php', $content); $files = $phpcs->getFiles(); $file = $files[0]; $warnings = $file->getWarnings(); $numWarnings = $file->getWarningCount(); $this->assertEquals(1, $numWarnings); $this->assertEquals(1, count($warnings)); // Process with suppression. $content = '<?php ' . PHP_EOL . '// @codingStandardsIgnoreFile' . PHP_EOL . '//TODO: write some code'; $phpcs->processFile('suppressionTest.php', $content); $files = $phpcs->getFiles(); $file = $files[1]; $warnings = $file->getWarnings(); $numWarnings = $file->getWarningCount(); $this->assertEquals(0, $numWarnings); $this->assertEquals(0, count($warnings)); }
/** * Test suppressing a whole file. * * @return void */ public function testSuppressFile() { $phpcs = new PHP_CodeSniffer(); $phpcs->setTokenListeners('Squiz', array('Squiz_Sniffs_Commenting_FileCommentSniff')); $phpcs->populateTokenListeners(); // Process without suppression. $content = '<?php ' . PHP_EOL . '$var = FALSE;'; $phpcs->processFile('noSuppressionTest.php', $content); $files = $phpcs->getFiles(); $file = $files[0]; $errors = $file->getErrors(); $numErrors = $file->getErrorCount(); $this->assertEquals(1, $numErrors); $this->assertEquals(1, count($errors)); $this->assertEquals(1, count($files)); // Process with suppression. $content = '<?php ' . PHP_EOL . '// @codingStandardsIgnoreFile' . PHP_EOL . '$var = FALSE;'; $phpcs->processFile('suppressionTest.php', $content); // The file shouldn't even be added to the $files array. $files = $phpcs->getFiles(); $this->assertEquals(1, count($files)); }
/** * Tests the extending classes Sniff class. * * @return void * @throws PHPUnit_Framework_Error */ protected final function runTest() { // Skip this test if we can't run in this environment. if ($this->shouldSkipTest() === true) { $this->markTestSkipped(); } // The basis for determining file locations. $basename = substr(get_class($this), 0, -8); // The name of the coding standard we are testing. $standardName = substr($basename, 0, strpos($basename, '_')); // The class name of the sniff we are testing. $sniffClass = str_replace('_Tests_', '_Sniffs_', $basename) . 'Sniff'; if (is_file(dirname(__FILE__) . '/../../CodeSniffer.php') === true) { // We have not been installed. $standardsDir = realpath(dirname(__FILE__) . '/../../CodeSniffer/Standards'); $testFileBase = $standardsDir . '/' . str_replace('_', '/', $basename) . 'UnitTest.'; } else { // The name of the dummy file we are testing. $testFileBase = dirname(__FILE__) . '/' . str_replace('_', '/', $basename) . 'UnitTest.'; } // Get a list of all test files to check. These will have the same base // name but different extensions. We ignore the .php file as it is the // class. $testFiles = array(); $dir = substr($testFileBase, 0, strrpos($testFileBase, '/')); $di = new DirectoryIterator($dir); foreach ($di as $file) { $path = $file->getPathname(); if (substr($path, 0, strlen($testFileBase)) === $testFileBase) { if ($path !== $testFileBase . 'php') { $testFiles[] = $path; } } } // Get them in order. This is particularly important for multi-file sniffs. sort($testFiles); $failureMessages = array(); $multiFileSniff = false; foreach ($testFiles as $testFile) { try { self::$phpcs->process($testFile, $standardName, array($sniffClass)); } catch (Exception $e) { $this->fail('An unexpected exception has been caught: ' . $e->getMessage()); } // After processing a file, check if the sniff was actually // a multi-file sniff (i.e., had no indivdual file sniffs). // If it is, we can skip checking of the other files and // do a single multi-file check. $sniffs = self::$phpcs->getTokenSniffs(); if (empty($sniffs['file']) === true) { $multiFileSniff = true; break; } $files = self::$phpcs->getFiles(); $file = array_pop($files); $failures = $this->generateFailureMessages($file, $testFile); $failureMessages = array_merge($failureMessages, $failures); } //end foreach if ($multiFileSniff === true) { try { self::$phpcs->process($testFiles, $standardName, array($sniffClass)); } catch (Exception $e) { $this->fail('An unexpected exception has been caught: ' . $e->getMessage()); } $files = self::$phpcs->getFiles(); foreach ($files as $file) { $failures = $this->generateFailureMessages($file); $failureMessages = array_merge($failureMessages, $failures); } } if (empty($failureMessages) === false) { $this->fail(implode(PHP_EOL, $failureMessages)); } }