|
15 | 15 | use Symfony\Component\Config\FileLocator; |
16 | 16 | use Symfony\Component\DependencyInjection\ContainerBuilder; |
17 | 17 | use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; |
| 18 | +use Symfony\Component\DependencyInjection\Reference; |
18 | 19 | use LeanPHP\Behat\CodeCoverage\Compiler; |
19 | 20 |
|
20 | 21 | /** |
@@ -211,24 +212,115 @@ public function process(ContainerBuilder $container) |
211 | 212 | $container->getParameterBag()->set('behat.code_coverage.skip', true); |
212 | 213 | } |
213 | 214 |
|
214 | | - $passes = $this->getCompilerPasses(); |
| 215 | + $this->setupDriver($container); |
| 216 | + $this->setupFactory($container); |
| 217 | + $this->setupCodeCoverage($container); |
| 218 | + $this->setupCodeCoverageFilter($container); |
215 | 219 |
|
216 | | - foreach ($passes as $pass) { |
217 | | - $pass->process($container); |
| 220 | + } |
| 221 | + |
| 222 | + /** |
| 223 | + * @param ContainerBuilder $container |
| 224 | + */ |
| 225 | + private function setupDriver(ContainerBuilder $container) |
| 226 | + { |
| 227 | + if (! $container->hasDefinition('behat.code_coverage.driver.proxy')) { |
| 228 | + return; |
| 229 | + } |
| 230 | + |
| 231 | + $proxy = $container->getDefinition('behat.code_coverage.driver.proxy'); |
| 232 | + $enabled = $container->getParameter('behat.code_coverage.config.drivers'); |
| 233 | + |
| 234 | + foreach ($container->findTaggedServiceIds('behat.code_coverage.driver') as $id => $tagAttributes) { |
| 235 | + foreach ($tagAttributes as $attributes) { |
| 236 | + if (isset($attributes['alias']) |
| 237 | + && in_array($attributes['alias'], $enabled) |
| 238 | + ) { |
| 239 | + $proxy->addMethodCall('addDriver', array(new Reference($id))); |
| 240 | + } |
| 241 | + } |
218 | 242 | } |
219 | 243 | } |
220 | 244 |
|
221 | 245 | /** |
222 | | - * return an array of compiler passes |
223 | | - * |
224 | | - * @return array |
| 246 | + * @param ContainerBuilder $container |
| 247 | + */ |
| 248 | + public function setupFactory(ContainerBuilder $container) |
| 249 | + { |
| 250 | + if (! $container->hasDefinition('vipsoft.code_coverage.driver.factory')) { |
| 251 | + return; |
| 252 | + } |
| 253 | + |
| 254 | + $factory = $container->getDefinition('vipsoft.code_coverage.driver.factory'); |
| 255 | + $drivers = array(); |
| 256 | + $ids = $container->findTaggedServiceIds('vipsoft.code_coverage.driver'); |
| 257 | + |
| 258 | + foreach ($ids as $id => $attributes) { |
| 259 | + $drivers[] = $container->getDefinition($id)->getClass(); |
| 260 | + } |
| 261 | + |
| 262 | + $factory->setArguments(array($drivers)); |
| 263 | + } |
| 264 | + |
| 265 | + /** |
| 266 | + * @param ContainerBuilder $container |
| 267 | + */ |
| 268 | + private function setupCodeCoverage(ContainerBuilder $container) |
| 269 | + { |
| 270 | + if (! $container->hasDefinition('behat.code_coverage.php_code_coverage')) { |
| 271 | + return; |
| 272 | + } |
| 273 | + |
| 274 | + $coverage = $container->getDefinition('behat.code_coverage.php_code_coverage'); |
| 275 | + $config = $container->getParameter('behat.code_coverage.config.filter'); |
| 276 | + |
| 277 | + $coverage->addMethodCall( |
| 278 | + 'setAddUncoveredFilesFromWhitelist', |
| 279 | + array($config['whitelist']['addUncoveredFilesFromWhitelist']) |
| 280 | + ); |
| 281 | + $coverage->addMethodCall( |
| 282 | + 'setProcessUncoveredFilesFromWhiteList', |
| 283 | + array($config['whitelist']['processUncoveredFilesFromWhitelist']) |
| 284 | + ); |
| 285 | + $coverage->addMethodCall( |
| 286 | + 'setForceCoversAnnotation', |
| 287 | + array($config['forceCoversAnnotation']) |
| 288 | + ); |
| 289 | + } |
| 290 | + |
| 291 | + /** |
| 292 | + * @param ContainerBuilder $container |
225 | 293 | */ |
226 | | - private function getCompilerPasses() |
| 294 | + private function setupCodeCoverageFilter(ContainerBuilder $container) |
227 | 295 | { |
228 | | - return array( |
229 | | - new Compiler\DriverPass(), |
230 | | - new Compiler\FactoryPass(), |
231 | | - new Compiler\FilterPass(), |
| 296 | + if (! $container->hasDefinition('behat.code_coverage.php_code_coverage_filter')) { |
| 297 | + return; |
| 298 | + } |
| 299 | + |
| 300 | + $filter = $container->getDefinition('behat.code_coverage.php_code_coverage_filter'); |
| 301 | + $config = $container->getParameter('behat.code_coverage.config.filter'); |
| 302 | + |
| 303 | + $dirs = array( |
| 304 | + 'addDirectoryToWhiteList' => array('whitelist', 'include', 'directories'), |
| 305 | + 'removeDirectoryFromWhiteList' => array('whitelist', 'exclude', 'directories'), |
| 306 | + ); |
| 307 | + |
| 308 | + foreach ($dirs as $method => $hiera) { |
| 309 | + foreach ($config[$hiera[0]][$hiera[1]][$hiera[2]] as $path => $dir) { |
| 310 | + $filter->addMethodCall($method, array($path, $dir['suffix'], $dir['prefix'])); |
| 311 | + } |
| 312 | + } |
| 313 | + |
| 314 | + $files = array( |
| 315 | + 'addFileToWhiteList' => array('whitelist', 'include', 'files'), |
| 316 | + 'removeFileFromWhiteList' => array('whitelist', 'exclude', 'files'), |
232 | 317 | ); |
| 318 | + |
| 319 | + foreach ($files as $method => $hiera) { |
| 320 | + foreach ($config[$hiera[0]][$hiera[1]][$hiera[2]] as $file) { |
| 321 | + $filter->addMethodCall($method, array($file)); |
| 322 | + } |
| 323 | + } |
233 | 324 | } |
| 325 | + |
234 | 326 | } |
0 commit comments