radarrplexorganizrnginxsonarrdashboardembycouchpotatonzbgetbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdall
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							304 lines
						
					
					
						
							8.4 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							304 lines
						
					
					
						
							8.4 KiB
						
					
					
				
								<?php
							 | 
						|
								
							 | 
						|
								/*
							 | 
						|
								 * This file is part of the Symfony package.
							 | 
						|
								 *
							 | 
						|
								 * (c) Fabien Potencier <fabien@symfony.com>
							 | 
						|
								 *
							 | 
						|
								 * For the full copyright and license information, please view the LICENSE
							 | 
						|
								 * file that was distributed with this source code.
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								namespace Symfony\Component\Console\Tests\Question;
							 | 
						|
								
							 | 
						|
								use PHPUnit\Framework\TestCase;
							 | 
						|
								use Symfony\Component\Console\Exception\InvalidArgumentException;
							 | 
						|
								use Symfony\Component\Console\Question\Question;
							 | 
						|
								
							 | 
						|
								class QuestionTest extends TestCase
							 | 
						|
								{
							 | 
						|
								    private $question;
							 | 
						|
								
							 | 
						|
								    protected function setUp()
							 | 
						|
								    {
							 | 
						|
								        parent::setUp();
							 | 
						|
								        $this->question = new Question('Test question');
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function providerTrueFalse()
							 | 
						|
								    {
							 | 
						|
								        return [[true], [false]];
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetQuestion()
							 | 
						|
								    {
							 | 
						|
								        self::assertSame('Test question', $this->question->getQuestion());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetDefault()
							 | 
						|
								    {
							 | 
						|
								        $question = new Question('Test question', 'Default value');
							 | 
						|
								        self::assertSame('Default value', $question->getDefault());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetDefaultDefault()
							 | 
						|
								    {
							 | 
						|
								        self::assertNull($this->question->getDefault());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider providerTrueFalse
							 | 
						|
								     */
							 | 
						|
								    public function testIsSetHidden(bool $hidden)
							 | 
						|
								    {
							 | 
						|
								        $this->question->setHidden($hidden);
							 | 
						|
								        self::assertSame($hidden, $this->question->isHidden());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testIsHiddenDefault()
							 | 
						|
								    {
							 | 
						|
								        self::assertFalse($this->question->isHidden());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testSetHiddenWithAutocompleterCallback()
							 | 
						|
								    {
							 | 
						|
								        $this->question->setAutocompleterCallback(
							 | 
						|
								            function (string $input): array { return []; }
							 | 
						|
								        );
							 | 
						|
								
							 | 
						|
								        $this->expectException(\LogicException::class);
							 | 
						|
								        $this->expectExceptionMessage(
							 | 
						|
								            'A hidden question cannot use the autocompleter.'
							 | 
						|
								        );
							 | 
						|
								
							 | 
						|
								        $this->question->setHidden(true);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testSetHiddenWithNoAutocompleterCallback()
							 | 
						|
								    {
							 | 
						|
								        $this->question->setAutocompleterCallback(
							 | 
						|
								            function (string $input): array { return []; }
							 | 
						|
								        );
							 | 
						|
								        $this->question->setAutocompleterCallback(null);
							 | 
						|
								
							 | 
						|
								        $exception = null;
							 | 
						|
								        try {
							 | 
						|
								            $this->question->setHidden(true);
							 | 
						|
								        } catch (\Exception $exception) {
							 | 
						|
								            // Do nothing
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $this->assertNull($exception);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider providerTrueFalse
							 | 
						|
								     */
							 | 
						|
								    public function testIsSetHiddenFallback(bool $hidden)
							 | 
						|
								    {
							 | 
						|
								        $this->question->setHiddenFallback($hidden);
							 | 
						|
								        self::assertSame($hidden, $this->question->isHiddenFallback());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testIsHiddenFallbackDefault()
							 | 
						|
								    {
							 | 
						|
								        self::assertTrue($this->question->isHiddenFallback());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function providerGetSetAutocompleterValues()
							 | 
						|
								    {
							 | 
						|
								        return [
							 | 
						|
								            'array' => [
							 | 
						|
								                ['a', 'b', 'c', 'd'],
							 | 
						|
								                ['a', 'b', 'c', 'd'],
							 | 
						|
								            ],
							 | 
						|
								            'associative array' => [
							 | 
						|
								                ['a' => 'c', 'b' => 'd'],
							 | 
						|
								                ['a', 'b', 'c', 'd'],
							 | 
						|
								            ],
							 | 
						|
								            'iterator' => [
							 | 
						|
								                new \ArrayIterator(['a', 'b', 'c', 'd']),
							 | 
						|
								                ['a', 'b', 'c', 'd'],
							 | 
						|
								            ],
							 | 
						|
								            'null' => [null, null],
							 | 
						|
								        ];
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider providerGetSetAutocompleterValues
							 | 
						|
								     */
							 | 
						|
								    public function testGetSetAutocompleterValues($values, $expectValues)
							 | 
						|
								    {
							 | 
						|
								        $this->question->setAutocompleterValues($values);
							 | 
						|
								        self::assertSame(
							 | 
						|
								            $expectValues,
							 | 
						|
								            $this->question->getAutocompleterValues()
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function providerSetAutocompleterValuesInvalid()
							 | 
						|
								    {
							 | 
						|
								        return [
							 | 
						|
								            ['Potato'],
							 | 
						|
								            [new \stdclass()],
							 | 
						|
								            [false],
							 | 
						|
								        ];
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider providerSetAutocompleterValuesInvalid
							 | 
						|
								     */
							 | 
						|
								    public function testSetAutocompleterValuesInvalid($values)
							 | 
						|
								    {
							 | 
						|
								        self::expectException(InvalidArgumentException::class);
							 | 
						|
								        self::expectExceptionMessage(
							 | 
						|
								            'Autocompleter values can be either an array, "null" or a "Traversable" object.'
							 | 
						|
								        );
							 | 
						|
								
							 | 
						|
								        $this->question->setAutocompleterValues($values);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testSetAutocompleterValuesWithTraversable()
							 | 
						|
								    {
							 | 
						|
								        $question1 = new Question('Test question 1');
							 | 
						|
								        $iterator1 = $this->getMockForAbstractClass(\IteratorAggregate::class);
							 | 
						|
								        $iterator1
							 | 
						|
								            ->expects($this->once())
							 | 
						|
								            ->method('getIterator')
							 | 
						|
								            ->willReturn(new \ArrayIterator(['Potato']));
							 | 
						|
								        $question1->setAutocompleterValues($iterator1);
							 | 
						|
								
							 | 
						|
								        $question2 = new Question('Test question 2');
							 | 
						|
								        $iterator2 = $this->getMockForAbstractClass(\IteratorAggregate::class);
							 | 
						|
								        $iterator2
							 | 
						|
								            ->expects($this->once())
							 | 
						|
								            ->method('getIterator')
							 | 
						|
								            ->willReturn(new \ArrayIterator(['Carrot']));
							 | 
						|
								        $question2->setAutocompleterValues($iterator2);
							 | 
						|
								
							 | 
						|
								        // Call multiple times to verify that Traversable result is cached, and
							 | 
						|
								        // that there is no crosstalk between cached copies.
							 | 
						|
								        self::assertSame(['Potato'], $question1->getAutocompleterValues());
							 | 
						|
								        self::assertSame(['Carrot'], $question2->getAutocompleterValues());
							 | 
						|
								        self::assertSame(['Potato'], $question1->getAutocompleterValues());
							 | 
						|
								        self::assertSame(['Carrot'], $question2->getAutocompleterValues());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetAutocompleterValuesDefault()
							 | 
						|
								    {
							 | 
						|
								        self::assertNull($this->question->getAutocompleterValues());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetSetAutocompleterCallback()
							 | 
						|
								    {
							 | 
						|
								        $callback = function (string $input): array { return []; };
							 | 
						|
								
							 | 
						|
								        $this->question->setAutocompleterCallback($callback);
							 | 
						|
								        self::assertSame($callback, $this->question->getAutocompleterCallback());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetAutocompleterCallbackDefault()
							 | 
						|
								    {
							 | 
						|
								        self::assertNull($this->question->getAutocompleterCallback());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testSetAutocompleterCallbackWhenHidden()
							 | 
						|
								    {
							 | 
						|
								        $this->question->setHidden(true);
							 | 
						|
								
							 | 
						|
								        $this->expectException(\LogicException::class);
							 | 
						|
								        $this->expectExceptionMessage(
							 | 
						|
								            'A hidden question cannot use the autocompleter.'
							 | 
						|
								        );
							 | 
						|
								
							 | 
						|
								        $this->question->setAutocompleterCallback(
							 | 
						|
								            function (string $input): array { return []; }
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testSetAutocompleterCallbackWhenNotHidden()
							 | 
						|
								    {
							 | 
						|
								        $this->question->setHidden(true);
							 | 
						|
								        $this->question->setHidden(false);
							 | 
						|
								
							 | 
						|
								        $exception = null;
							 | 
						|
								        try {
							 | 
						|
								            $this->question->setAutocompleterCallback(
							 | 
						|
								                function (string $input): array { return []; }
							 | 
						|
								            );
							 | 
						|
								        } catch (\Exception $exception) {
							 | 
						|
								            // Do nothing
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $this->assertNull($exception);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function providerGetSetValidator()
							 | 
						|
								    {
							 | 
						|
								        return [
							 | 
						|
								            [function ($input) { return $input; }],
							 | 
						|
								            [null],
							 | 
						|
								        ];
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider providerGetSetValidator
							 | 
						|
								     */
							 | 
						|
								    public function testGetSetValidator($callback)
							 | 
						|
								    {
							 | 
						|
								        $this->question->setValidator($callback);
							 | 
						|
								        self::assertSame($callback, $this->question->getValidator());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetValidatorDefault()
							 | 
						|
								    {
							 | 
						|
								        self::assertNull($this->question->getValidator());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function providerGetSetMaxAttempts()
							 | 
						|
								    {
							 | 
						|
								        return [[1], [5], [null]];
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider providerGetSetMaxAttempts
							 | 
						|
								     */
							 | 
						|
								    public function testGetSetMaxAttempts($attempts)
							 | 
						|
								    {
							 | 
						|
								        $this->question->setMaxAttempts($attempts);
							 | 
						|
								        self::assertSame($attempts, $this->question->getMaxAttempts());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function providerSetMaxAttemptsInvalid()
							 | 
						|
								    {
							 | 
						|
								        return [['Potato'], [0], [-1]];
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider providerSetMaxAttemptsInvalid
							 | 
						|
								     */
							 | 
						|
								    public function testSetMaxAttemptsInvalid($attempts)
							 | 
						|
								    {
							 | 
						|
								        self::expectException(\InvalidArgumentException::class);
							 | 
						|
								        self::expectExceptionMessage('Maximum number of attempts must be a positive value.');
							 | 
						|
								
							 | 
						|
								        $this->question->setMaxAttempts($attempts);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetMaxAttemptsDefault()
							 | 
						|
								    {
							 | 
						|
								        self::assertNull($this->question->getMaxAttempts());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetSetNormalizer()
							 | 
						|
								    {
							 | 
						|
								        $normalizer = function ($input) { return $input; };
							 | 
						|
								        $this->question->setNormalizer($normalizer);
							 | 
						|
								        self::assertSame($normalizer, $this->question->getNormalizer());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetNormalizerDefault()
							 | 
						|
								    {
							 | 
						|
								        self::assertNull($this->question->getNormalizer());
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 |