/** * Constructs a new AbstractScopeTest. * * @param array $scopeTokens The type of scope the test wishes to listen to. * @param array $tokens The tokens that the test wishes to listen to * within the scope. * @param boolean $listenOutside If true this test will also alert the * extending class when a token is found outside * the scope, by calling the processTokenOutideScope. * * @see PHP_CodeSniffer.getValidScopeTokeners() * @throws PHP_CodeSniffer_Test_Exception If the specified tokens array is empty. */ public function __construct(array $scopeTokens, array $tokens, $listenOutside = false) { if (empty($scopeTokens) === true) { throw new PHP_CodeSniffer_Test_Exception('The scope tokens list cannot be empty'); } if (empty($tokens) === true) { throw new PHP_CodeSniffer_Test_Exception('The tokens list cannot be empty'); } $invalidScopeTokens = array_diff($scopeTokens, PHP_CodeSniffer_File::getValidScopeOpeners()); if (empty($invalidScopeTokens) === false) { $invalid = implode(', ', $invalidScopeTokens); throw new PHP_CodeSniffer_Test_Exception("Supplied scope tokens [{$invalid}] are not valid scope opener"); } $invalidScopeTokens = array_intersect($scopeTokens, $tokens); if (empty($invalidScopeTokens) === false) { $invalid = implode(', ', $invalidScopeTokens); throw new PHP_CodeSniffer_Test_Exception("Supplied scope tokens [{$invalid}] cannot be in the tokens array"); } $this->_listenOutside = $listenOutside; $this->_scopeTokens = $scopeTokens; $this->_tokens = $tokens; }