Chris@18: '', Chris@18: 'composer.json' => [ Chris@18: 'extra' => [ Chris@18: 'installer-paths' => [ Chris@18: 'core' => [ Chris@18: 'type:drupal-core' Chris@18: ] Chris@18: ] Chris@18: ] Chris@18: ], Chris@18: 'core' => [ Chris@18: 'includes' => [ Chris@18: 'common.inc' => '', Chris@18: ], Chris@18: 'misc' => [ Chris@18: 'drupal.js' => '', Chris@18: ], Chris@18: 'core.services.yml' => '', Chris@18: ], Chris@18: 'modules' => [], Chris@18: 'vendor' => [], Chris@18: ]; Chris@18: Chris@18: /** Chris@18: * @return array Chris@18: */ Chris@18: protected function getDrupalComposerStructure() Chris@18: { Chris@18: $fileStructure = [ Chris@18: 'web' => static::$fileStructure, Chris@18: 'composer.json' => [ Chris@18: 'require' => [ Chris@18: 'drupal/core' => '*', Chris@18: ], Chris@18: 'extra' => [ Chris@18: 'installer-paths' => [ Chris@18: 'web/core' => [ Chris@18: 'type:drupal-core', Chris@18: ], Chris@18: ], Chris@18: ], Chris@18: ], Chris@18: 'vendor' => [], Chris@18: ]; Chris@18: unset($fileStructure['web']['composer.json']); Chris@18: unset($fileStructure['web']['vendor']); Chris@18: Chris@18: return $fileStructure; Chris@18: } Chris@18: Chris@18: protected function setUp() Chris@18: { Chris@18: parent::setUp(); Chris@18: $this->finder = new \DrupalFinder\DrupalFinder(); Chris@18: } Chris@18: Chris@18: public function testDrupalDefaultStructure() Chris@18: { Chris@18: $root = vfsStream::setup('root', null, $this->prepareFileStructure(static::$fileStructure)); Chris@18: Chris@18: $this->assertTrue($this->finder->locateRoot($root->url())); Chris@18: $this->assertSame('vfs://root', $this->finder->getDrupalRoot()); Chris@18: $this->assertSame('vfs://root', $this->finder->getComposerRoot()); Chris@18: $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir()); Chris@18: Chris@18: $this->assertTrue($this->finder->locateRoot($root->url() . '/misc')); Chris@18: $this->assertSame('vfs://root', $this->finder->getDrupalRoot()); Chris@18: $this->assertSame('vfs://root', $this->finder->getComposerRoot()); Chris@18: $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir()); Chris@18: Chris@18: $root = vfsStream::setup( Chris@18: 'root', Chris@18: null, Chris@18: ['project' => $this->prepareFileStructure(static::$fileStructure)] Chris@18: ); Chris@18: $this->assertFalse( Chris@18: $this->finder->locateRoot($root->url()), Chris@18: 'Not in the scope of the project' Chris@18: ); Chris@18: $this->assertFalse($this->finder->getDrupalRoot()); Chris@18: $this->assertFalse($this->finder->getComposerRoot()); Chris@18: $this->assertFalse($this->finder->getVendorDir()); Chris@18: } Chris@18: Chris@18: public function testDrupalComposerStructure() Chris@18: { Chris@18: $fileStructure = $this->getDrupalComposerStructure(); Chris@18: $this->assertComposerStructure($fileStructure); Chris@18: } Chris@18: Chris@18: public function testDrupalComposerStructureWithCustomRoot() Chris@18: { Chris@18: $fileStructure = [ Chris@18: 'src' => static::$fileStructure, Chris@18: 'composer.json' => [ Chris@18: 'require' => [ Chris@18: 'drupal/core' => '*', Chris@18: ], Chris@18: 'extra' => [ Chris@18: 'installer-paths' => [ Chris@18: 'src/core' => [ Chris@18: 'type:drupal-core', Chris@18: ], Chris@18: ], Chris@18: ], Chris@18: ], Chris@18: 'vendor' => [], Chris@18: ]; Chris@18: unset($fileStructure['src']['composer.json']); Chris@18: unset($fileStructure['src']['vendor']); Chris@18: Chris@18: $fileStructure = $this->prepareFileStructure($fileStructure); Chris@18: $root = vfsStream::setup('root', null, $fileStructure); Chris@18: $this->assertTrue($this->finder->locateRoot($root->url() . '/src')); Chris@18: $this->assertSame('vfs://root/src', $this->finder->getDrupalRoot()); Chris@18: $this->assertSame('vfs://root', $this->finder->getComposerRoot()); Chris@18: $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir()); Chris@18: Chris@18: $this->assertTrue($this->finder->locateRoot($root->url() . '/src/misc')); Chris@18: $this->assertSame('vfs://root/src', $this->finder->getDrupalRoot()); Chris@18: $this->assertSame('vfs://root', $this->finder->getComposerRoot()); Chris@18: $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir()); Chris@18: Chris@18: $this->assertTrue($this->finder->locateRoot($root->url())); Chris@18: $this->assertSame('vfs://root/src', $this->finder->getDrupalRoot()); Chris@18: $this->assertSame('vfs://root', $this->finder->getComposerRoot()); Chris@18: $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir()); Chris@18: Chris@18: $root = vfsStream::setup( Chris@18: 'root', Chris@18: null, Chris@18: ['nested_folder' => $fileStructure] Chris@18: ); Chris@18: $this->assertFalse($this->finder->locateRoot($root->url())); Chris@18: $this->assertFalse($this->finder->getDrupalRoot()); Chris@18: $this->assertFalse($this->finder->getComposerRoot()); Chris@18: $this->assertFalse($this->finder->getVendorDir()); Chris@18: } Chris@18: Chris@18: public function testDrupalComposerStructureWithoutRequire() Chris@18: { Chris@18: $fileStructure = [ Chris@18: 'web' => static::$fileStructure, Chris@18: 'composer.json' => [ Chris@18: 'extra' => [ Chris@18: 'installer-paths' => [ Chris@18: 'web/core' => [ Chris@18: 'drupal/core', Chris@18: ], Chris@18: ], Chris@18: ], Chris@18: ], Chris@18: ]; Chris@18: unset($fileStructure['web']['composer.json']); Chris@18: $this->assertComposerStructure($fileStructure); Chris@18: } Chris@18: Chris@18: public function testNoDrupalRootWithRealFilesystem() Chris@18: { Chris@18: $root = $this->tempdir(sys_get_temp_dir()); Chris@18: Chris@18: $this->assertFalse($this->finder->locateRoot($root)); Chris@18: $this->assertFalse($this->finder->getDrupalRoot()); Chris@18: $this->assertFalse($this->finder->getComposerRoot()); Chris@18: $this->assertFalse($this->finder->getVendorDir()); Chris@18: } Chris@18: Chris@18: public function testDrupalDefaultStructureWithRealFilesystem() Chris@18: { Chris@18: $root = $this->tempdir(sys_get_temp_dir()); Chris@18: $this->dumpToFileSystem(static::$fileStructure, $root); Chris@18: Chris@18: $this->assertTrue($this->finder->locateRoot($root)); Chris@18: $this->assertSame($root, $this->finder->getDrupalRoot()); Chris@18: $this->assertSame($root, $this->finder->getComposerRoot()); Chris@18: $this->assertSame($root . '/vendor', $this->finder->getVendorDir()); Chris@18: Chris@18: // Test symlink implementation Chris@18: $symlink = $this->tempdir(sys_get_temp_dir()); Chris@18: $this->symlink($root, $symlink . '/foo'); Chris@18: Chris@18: $this->assertTrue($this->finder->locateRoot($symlink . '/foo')); Chris@18: $this->assertSame($root, $this->finder->getDrupalRoot()); Chris@18: $this->assertSame($root, $this->finder->getComposerRoot()); Chris@18: $this->assertSame($root . '/vendor', $this->finder->getVendorDir()); Chris@18: } Chris@18: Chris@18: public function testDrupalComposerStructureWithRealFilesystem() Chris@18: { Chris@18: $root = $this->tempdir(sys_get_temp_dir()); Chris@18: $this->dumpToFileSystem($this->getDrupalComposerStructure(), $root); Chris@18: Chris@18: $this->assertTrue($this->finder->locateRoot($root)); Chris@18: $this->assertSame($root . '/web', $this->finder->getDrupalRoot()); Chris@18: $this->assertSame($root, $this->finder->getComposerRoot()); Chris@18: $this->assertSame($root . '/vendor', $this->finder->getVendorDir()); Chris@18: Chris@18: // Test symlink implementation Chris@18: $symlink = $this->tempdir(sys_get_temp_dir()); Chris@18: $this->symlink($root, $symlink . '/foo'); Chris@18: Chris@18: $this->assertTrue($this->finder->locateRoot($symlink . '/foo')); Chris@18: $this->assertSame($root . '/web', $this->finder->getDrupalRoot()); Chris@18: $this->assertSame($root, $this->finder->getComposerRoot()); Chris@18: $this->assertSame($root . '/vendor', $this->finder->getVendorDir()); Chris@18: } Chris@18: Chris@18: public function testDrupalWithLinkedModule() Chris@18: { Chris@18: $root = $this->tempdir(sys_get_temp_dir()); Chris@18: $this->dumpToFileSystem(static::$fileStructure, $root); Chris@18: Chris@18: $module = $this->tempdir(sys_get_temp_dir()); Chris@18: $module_link = $root . '/modules/foo'; Chris@18: $this->symlink($module, $module_link); Chris@18: Chris@18: $this->assertTrue($this->finder->locateRoot($module_link)); Chris@18: $this->assertSame($root, realpath($this->finder->getDrupalRoot())); Chris@18: $this->assertSame($root, realpath($this->finder->getComposerRoot())); Chris@18: $this->assertSame($root . '/vendor', realpath($this->finder->getVendorDir())); Chris@18: } Chris@18: Chris@18: public function testDrupalWithCustomVendor() Chris@18: { Chris@18: $root = $this->tempdir(sys_get_temp_dir()); Chris@18: $fileStructure = static::$fileStructure; Chris@18: $fileStructure['composer.json'] = [ Chris@18: 'config' => [ Chris@18: 'vendor-dir' => 'vendor-foo' Chris@18: ] Chris@18: ]; Chris@18: $fileStructure['vendor-foo'] = []; Chris@18: $this->dumpToFileSystem($fileStructure, $root); Chris@18: Chris@18: $this->assertTrue($this->finder->locateRoot($root)); Chris@18: $this->assertSame($root, realpath($this->finder->getDrupalRoot())); Chris@18: $this->assertSame($root, realpath($this->finder->getComposerRoot())); Chris@18: $this->assertSame($root . '/vendor-foo', realpath($this->finder->getVendorDir())); Chris@18: } Chris@18: Chris@18: /** Chris@18: * @param $fileStructure Chris@18: */ Chris@18: protected function assertComposerStructure($fileStructure) Chris@18: { Chris@18: $fileStructure = $this->prepareFileStructure($fileStructure); Chris@18: $root = vfsStream::setup('root', null, $fileStructure); Chris@18: $this->assertTrue($this->finder->locateRoot($root->url() . '/web')); Chris@18: $this->assertSame('vfs://root/web', $this->finder->getDrupalRoot()); Chris@18: $this->assertSame('vfs://root', $this->finder->getComposerRoot()); Chris@18: $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir()); Chris@18: Chris@18: $this->assertTrue($this->finder->locateRoot($root->url() . '/web/misc')); Chris@18: $this->assertSame('vfs://root/web', $this->finder->getDrupalRoot()); Chris@18: $this->assertSame('vfs://root', $this->finder->getComposerRoot()); Chris@18: $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir()); Chris@18: Chris@18: $this->assertTrue($this->finder->locateRoot($root->url())); Chris@18: $this->assertSame('vfs://root/web', $this->finder->getDrupalRoot()); Chris@18: $this->assertSame('vfs://root', $this->finder->getComposerRoot()); Chris@18: $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir()); Chris@18: Chris@18: $root = vfsStream::setup( Chris@18: 'root', Chris@18: null, Chris@18: ['nested_folder' => $fileStructure] Chris@18: ); Chris@18: $this->assertFalse($this->finder->locateRoot($root->url())); Chris@18: $this->assertFalse($this->finder->getDrupalRoot()); Chris@18: $this->assertFalse($this->finder->getComposerRoot()); Chris@18: $this->assertFalse($this->finder->getVendorDir()); Chris@18: } Chris@18: }