178 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			178 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								namespace Consolidation\SiteAlias;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use PHPUnit\Framework\TestCase;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class SiteSpecParserTest extends TestCase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    use FixtureFactory;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @dataProvider parserTestValues
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function testSiteSpecParser(
							 | 
						||
| 
								 | 
							
								        $spec,
							 | 
						||
| 
								 | 
							
								        $expected)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $root = $this->siteDir();
							 | 
						||
| 
								 | 
							
								        $fixtureSite = '/' . basename($root);
							 | 
						||
| 
								 | 
							
								        $parser = new SiteSpecParser();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // If the test spec begins with '/fixtures', substitute the
							 | 
						||
| 
								 | 
							
								        // actual path to our fixture site.
							 | 
						||
| 
								 | 
							
								        $spec = preg_replace('%^/fixtures%', $root, $spec);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Make sure that our spec is valid
							 | 
						||
| 
								 | 
							
								        $this->assertTrue($parser->validSiteSpec($spec));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Parse it!
							 | 
						||
| 
								 | 
							
								        $result = $parser->parse($spec, $root);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // If the result contains the path to our fixtures site, replace
							 | 
						||
| 
								 | 
							
								        // it with the simple string '/fixtures'.
							 | 
						||
| 
								 | 
							
								        if (isset($result['root'])) {
							 | 
						||
| 
								 | 
							
								            $result['root'] = preg_replace("%.*$fixtureSite%", '/fixtures', $result['root']);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Compare the altered result with the expected value.
							 | 
						||
| 
								 | 
							
								        $this->assertEquals($expected, $result);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @dataProvider validSiteSpecs
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function testValidSiteSpecs($spec)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->isSpecValid($spec, true);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @dataProvider invalidSiteSpecs
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function testInvalidSiteSpecs($spec)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->isSpecValid($spec, false);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    protected function isSpecValid($spec, $expected)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $parser = new SiteSpecParser();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $result = $parser->validSiteSpec($spec);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals($expected, $result);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public static function validSiteSpecs()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return [
							 | 
						||
| 
								 | 
							
								            [ '/path/to/drupal#uri' ],
							 | 
						||
| 
								 | 
							
								            [ 'user@server/path/to/drupal#uri' ],
							 | 
						||
| 
								 | 
							
								            [ 'user.name@example.com/path/to/drupal#uri' ],
							 | 
						||
| 
								 | 
							
								            [ 'user@server/path/to/drupal' ],
							 | 
						||
| 
								 | 
							
								            [ 'user@example.com/path/to/drupal' ],
							 | 
						||
| 
								 | 
							
								            [ 'user@server#uri' ],
							 | 
						||
| 
								 | 
							
								            [ 'user@example.com#uri' ],
							 | 
						||
| 
								 | 
							
								            [ '#uri' ],
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public static function invalidSiteSpecs()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return [
							 | 
						||
| 
								 | 
							
								            [ 'uri' ],
							 | 
						||
| 
								 | 
							
								            [ '@/#' ],
							 | 
						||
| 
								 | 
							
								            [ 'user@#uri' ],
							 | 
						||
| 
								 | 
							
								            [ '@server/path/to/drupal#uri' ],
							 | 
						||
| 
								 | 
							
								            [ 'user@server/path/to/drupal#' ],
							 | 
						||
| 
								 | 
							
								            [ 'user@server/path/to/drupal#uri!' ],
							 | 
						||
| 
								 | 
							
								            [ 'user@server/path/to/drupal##uri' ],
							 | 
						||
| 
								 | 
							
								            [ 'user#server/path/to/drupal#uri' ],
							 | 
						||
| 
								 | 
							
								       ];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public static function parserTestValues()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return [
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                'user@server/path#somemultisite',
							 | 
						||
| 
								 | 
							
								                [
							 | 
						||
| 
								 | 
							
								                    'user' => 'user',
							 | 
						||
| 
								 | 
							
								                    'host' => 'server',
							 | 
						||
| 
								 | 
							
								                    'root' => '/path',
							 | 
						||
| 
								 | 
							
								                    'uri' => 'somemultisite',
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                'user.name@example.com/path#somemultisite',
							 | 
						||
| 
								 | 
							
								                [
							 | 
						||
| 
								 | 
							
								                    'user' => 'user.name',
							 | 
						||
| 
								 | 
							
								                    'host' => 'example.com',
							 | 
						||
| 
								 | 
							
								                    'root' => '/path',
							 | 
						||
| 
								 | 
							
								                    'uri' => 'somemultisite',
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                'user@server/path',
							 | 
						||
| 
								 | 
							
								                [
							 | 
						||
| 
								 | 
							
								                    'user' => 'user',
							 | 
						||
| 
								 | 
							
								                    'host' => 'server',
							 | 
						||
| 
								 | 
							
								                    'root' => '/path',
							 | 
						||
| 
								 | 
							
								                    'uri' => 'default',
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                'user.name@example.com/path',
							 | 
						||
| 
								 | 
							
								                [
							 | 
						||
| 
								 | 
							
								                    'user' => 'user.name',
							 | 
						||
| 
								 | 
							
								                    'host' => 'example.com',
							 | 
						||
| 
								 | 
							
								                    'root' => '/path',
							 | 
						||
| 
								 | 
							
								                    'uri' => 'default',
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                '/fixtures#mymultisite',
							 | 
						||
| 
								 | 
							
								                [
							 | 
						||
| 
								 | 
							
								                    'root' => '/fixtures',
							 | 
						||
| 
								 | 
							
								                    'uri' => 'mymultisite',
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                '#mymultisite',
							 | 
						||
| 
								 | 
							
								                [
							 | 
						||
| 
								 | 
							
								                    'root' => '/fixtures',
							 | 
						||
| 
								 | 
							
								                    'uri' => 'mymultisite',
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                '/fixtures#somemultisite',
							 | 
						||
| 
								 | 
							
								                [
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                '/path#somemultisite',
							 | 
						||
| 
								 | 
							
								                [
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                '/path#mymultisite',
							 | 
						||
| 
								 | 
							
								                [
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            [
							 | 
						||
| 
								 | 
							
								                '#somemultisite',
							 | 
						||
| 
								 | 
							
								                [
							 | 
						||
| 
								 | 
							
								                ],
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |