Наследование: implements SensioLabs\DeprecationDetector\RuleSet\Loader\LoaderInterface
 public function testLoadRuleSet()
 {
     $root = vfsStream::setup('root');
     $vendorDir = vfsStream::newDirectory('vendor');
     $vendor = vfsStream::newDirectory('avendor');
     $vendor->addChild(vfsStream::newDirectory('alib'));
     $vendorDir->addChild($vendor);
     $vendor = vfsStream::newDirectory('avendor');
     $vendor->addChild(vfsStream::newDirectory('anotherlib'));
     $vendorDir->addChild($vendor);
     $root->addChild($vendorDir);
     $aVendorALib = $this->prophesize('SensioLabs\\DeprecationDetector\\RuleSet\\Loader\\Composer\\Package');
     $aVendorALib->generatePackageKey()->willReturn('vendor_alib_1.0.0');
     $aVendorALib->getPackagePath(Argument::any())->willReturn(vfsStream::url('root/vendor/avendor/alib'));
     $aVendorALibRuleSet = $this->prophesize('SensioLabs\\DeprecationDetector\\RuleSet\\RuleSet');
     $aVendorALibRuleSet->classDeprecations()->willReturn(array());
     $aVendorALibRuleSet->interfaceDeprecations()->willReturn(array());
     $aVendorALibRuleSet->methodDeprecations()->willReturn(array());
     $aVendorALibRuleSet->functionDeprecations()->willReturn(array());
     $aVendorALibRuleSet = $aVendorALibRuleSet->reveal();
     $aVendorAnotherLib = $this->prophesize('SensioLabs\\DeprecationDetector\\RuleSet\\Loader\\Composer\\Package');
     $aVendorAnotherLib->generatePackageKey()->willReturn('vendor_anotherlib_1.0.0');
     $aVendorAnotherLib->getPackagePath(Argument::any())->willReturn(vfsStream::url('root/vendor/avendor/anotherlib'));
     $aVendorAnotherLibRuleSet = $this->prophesize('SensioLabs\\DeprecationDetector\\RuleSet\\RuleSet');
     $aVendorAnotherLibRuleSet->classDeprecations()->willReturn(array());
     $aVendorAnotherLibRuleSet->interfaceDeprecations()->willReturn(array());
     $aVendorAnotherLibRuleSet->methodDeprecations()->willReturn(array());
     $aVendorAnotherLibRuleSet->functionDeprecations()->willReturn(array());
     $aVendorAnotherLibRuleSet = $aVendorAnotherLibRuleSet->reveal();
     $anotherVendorALib = $this->prophesize('SensioLabs\\DeprecationDetector\\RuleSet\\Loader\\Composer\\Package');
     $anotherVendorALib->generatePackageKey()->willReturn('anothervendor_alib_1.0.0');
     $anotherVendorALib->getPackagePath(Argument::any())->willReturn('not/existing/path/because/it/is/a/dev/dependency');
     $composer = $this->prophesize('SensioLabs\\DeprecationDetector\\RuleSet\\Loader\\Composer\\Composer');
     $composer->getPackages()->willReturn(array($aVendorALib, $aVendorAnotherLib, $anotherVendorALib));
     $cache = $this->prophesize('SensioLabs\\DeprecationDetector\\RuleSet\\Cache');
     $cache->has('vendor_alib_1.0.0')->willReturn(true);
     $cache->getCachedRuleSet('vendor_alib_1.0.0')->willReturn($aVendorALibRuleSet);
     $cache->has('vendor_anotherlib_1.0.0')->willReturn(false);
     $cache->has('anothervendor_alib_1.0.0')->willReturn(false);
     $traverser = $this->prophesize('SensioLabs\\DeprecationDetector\\RuleSet\\DirectoryTraverser');
     $traverser->traverse(vfsStream::url('root/vendor/avendor/anotherlib'))->willReturn($aVendorAnotherLibRuleSet);
     $traverser->reset()->shouldBeCalled();
     $cache->cacheRuleSet('vendor_anotherlib_1.0.0', $aVendorAnotherLibRuleSet)->shouldBeCalled();
     $factory = $this->prophesize('SensioLabs\\DeprecationDetector\\RuleSet\\Loader\\Composer\\ComposerFactory');
     $factory->fromLock(vfsStream::url('composer.lock'))->willReturn($composer);
     $loader = new ComposerLoader($traverser->reveal(), $cache->reveal(), $factory->reveal());
     $loader->loadRuleSet(vfsStream::url('composer.lock'));
 }