/**
  * Create ObjectManager
  *
  * @param array $arguments
  * @return \Magento\Framework\ObjectManagerInterface
  *
  * @SuppressWarnings(PHPMD.NPathComplexity)
  */
 public function create(array $arguments)
 {
     $writeFactory = new \Magento\Framework\Filesystem\Directory\WriteFactory($this->driverPool);
     $generatedFiles = new GeneratedFiles($this->directoryList, $writeFactory);
     $generatedFiles->cleanGeneratedFiles();
     $deploymentConfig = $this->createDeploymentConfig($this->directoryList, $this->configFilePool, $arguments);
     $arguments = array_merge($deploymentConfig->get(), $arguments);
     $definitionFactory = new \Magento\Framework\ObjectManager\DefinitionFactory($this->driverPool->getDriver(DriverPool::FILE), $this->directoryList->getPath(DirectoryList::DI), $this->directoryList->getPath(DirectoryList::GENERATION), $deploymentConfig->get(self::CONFIG_PATH_DEFINITION_FORMAT, Serialized::MODE_NAME));
     $definitions = $definitionFactory->createClassDefinition($deploymentConfig->get('definitions'));
     $relations = $definitionFactory->createRelations();
     /** @var EnvironmentFactory $envFactory */
     $envFactory = new $this->envFactoryClassName($relations, $definitions);
     /** @var EnvironmentInterface $env */
     $env = $envFactory->createEnvironment();
     /** @var ConfigInterface $diConfig */
     $diConfig = $env->getDiConfig();
     $appMode = isset($arguments[State::PARAM_MODE]) ? $arguments[State::PARAM_MODE] : State::MODE_DEFAULT;
     $booleanUtils = new \Magento\Framework\Stdlib\BooleanUtils();
     $argInterpreter = $this->createArgumentInterpreter($booleanUtils);
     $argumentMapper = new \Magento\Framework\ObjectManager\Config\Mapper\Dom($argInterpreter);
     if ($env->getMode() != Environment\Compiled::MODE) {
         $configData = $this->_loadPrimaryConfig($this->directoryList, $this->driverPool, $argumentMapper, $appMode);
         if ($configData) {
             $diConfig->extend($configData);
         }
     }
     // set cache profiler decorator if enabled
     if (\Magento\Framework\Profiler::isEnabled()) {
         $cacheFactoryArguments = $diConfig->getArguments('Magento\\Framework\\App\\Cache\\Frontend\\Factory');
         $cacheFactoryArguments['decorators'][] = ['class' => 'Magento\\Framework\\Cache\\Frontend\\Decorator\\Profiler', 'parameters' => ['backendPrefixes' => ['Zend_Cache_Backend_', 'Cm_Cache_Backend_']]];
         $cacheFactoryConfig = ['Magento\\Framework\\App\\Cache\\Frontend\\Factory' => ['arguments' => $cacheFactoryArguments]];
         $diConfig->extend($cacheFactoryConfig);
     }
     $sharedInstances = ['Magento\\Framework\\App\\DeploymentConfig' => $deploymentConfig, 'Magento\\Framework\\App\\Filesystem\\DirectoryList' => $this->directoryList, 'Magento\\Framework\\Filesystem\\DirectoryList' => $this->directoryList, 'Magento\\Framework\\Filesystem\\DriverPool' => $this->driverPool, 'Magento\\Framework\\ObjectManager\\RelationsInterface' => $relations, 'Magento\\Framework\\Interception\\DefinitionInterface' => $definitionFactory->createPluginDefinition(), 'Magento\\Framework\\ObjectManager\\ConfigInterface' => $diConfig, 'Magento\\Framework\\Interception\\ObjectManager\\ConfigInterface' => $diConfig, 'Magento\\Framework\\ObjectManager\\DefinitionInterface' => $definitions, 'Magento\\Framework\\Stdlib\\BooleanUtils' => $booleanUtils, 'Magento\\Framework\\ObjectManager\\Config\\Mapper\\Dom' => $argumentMapper, 'Magento\\Framework\\ObjectManager\\ConfigLoaderInterface' => $env->getObjectManagerConfigLoader(), $this->_configClassName => $diConfig];
     $arguments['shared_instances'] =& $sharedInstances;
     $this->factory = $env->getObjectManagerFactory($arguments);
     /** @var \Magento\Framework\ObjectManagerInterface $objectManager */
     $objectManager = new $this->_locatorClassName($this->factory, $diConfig, $sharedInstances);
     $this->factory->setObjectManager($objectManager);
     ObjectManager::setInstance($objectManager);
     $generatorParams = $diConfig->getArguments('Magento\\Framework\\Code\\Generator');
     /** Arguments are stored in different format when DI config is compiled, thus require custom processing */
     $generatedEntities = isset($generatorParams['generatedEntities']['_v_']) ? $generatorParams['generatedEntities']['_v_'] : (isset($generatorParams['generatedEntities']) ? $generatorParams['generatedEntities'] : []);
     $definitionFactory->getCodeGenerator()->setObjectManager($objectManager)->setGeneratedEntities($generatedEntities);
     $env->configureObjectManager($diConfig, $sharedInstances);
     return $objectManager;
 }
 public function testRequestRegeneration()
 {
     $this->writeInterface->expects($this->once())->method("touch");
     $this->model->requestRegeneration();
 }