Chris@18: [ Chris@18: 'common.inc' => '', Chris@18: ], Chris@18: 'misc' => [ Chris@18: 'drupal.js' => '', Chris@18: ], Chris@18: 'sites' => [ Chris@18: 'all' => [ Chris@18: 'modules' => [] Chris@18: ] Chris@18: ] 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/drupal' => '*', Chris@18: ], Chris@18: 'extra' => [ Chris@18: 'installer-paths' => [ Chris@18: 'web/' => [ Chris@18: 'type:drupal-core', Chris@18: ], Chris@18: ], Chris@18: ], Chris@18: ], Chris@18: 'vendor' => [], Chris@18: ]; Chris@18: return $fileStructure; 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 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' => [ Chris@18: 'drupal/drupal', Chris@18: ], Chris@18: ], Chris@18: ], Chris@18: ], Chris@18: ]; 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 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($this->getDrupalComposerStructure(), $root); Chris@18: Chris@18: $module = $this->tempdir(sys_get_temp_dir()); Chris@18: $module_link = $root . '/web/sites/all/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 . '/web', 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 = $this->getDrupalComposerStructure(); Chris@18: $composerJson = $fileStructure['composer.json']; Chris@18: $composerJson['config']['vendor-dir'] = 'vendor-foo'; Chris@18: $fileStructure['composer.json'] = $composerJson; 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 . '/web', 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: }