Skip to content
  • P
    Projects
  • G
    Groups
  • S
    Snippets
  • Help

abalsh / Garlix

  • This project
    • Loading...
  • Sign in
Go to a project
  • Project
  • Repository
  • Issues 0
  • Merge Requests 0
  • Pipelines
  • Wiki
  • Snippets
  • Members
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • Files
  • Commits
  • Branches
  • Tags
  • Contributors
  • Graph
  • Compare
  • Charts
Switch branch/tag
  • Garlix
  • vendor
  • psy
  • psysh
  • test
  • Command
  • ThrowUpCommandTest.php
Find file
BlameHistoryPermalink
  • hakeem's avatar
    testing · 87eadb51
    hakeem committed 5 years ago
    87eadb51
ThrowUpCommandTest.php 3.04 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
<?php

/*
 * This file is part of Psy Shell.
 *
 * (c) 2012-2018 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Console\Tests\Command;

use Psy\Command\ThrowUpCommand;
use Psy\Shell;
use Symfony\Component\Console\Tester\CommandTester;

class ThrowUpCommandTest extends \PHPUnit\Framework\TestCase
{
    /**
     * @dataProvider executeThis
     */
    public function testExecute($args, $hasCode, $expect, $addSilent = true)
    {
        $shell = $this->getMockBuilder('Psy\\Shell')
            ->setMethods(['hasCode', 'addCode'])
            ->getMock();

        $shell->expects($this->once())->method('hasCode')->willReturn($hasCode);
        $shell->expects($this->once())
            ->method('addCode')
            ->with($this->equalTo($expect), $this->equalTo($addSilent));

        $command = new ThrowUpCommand();
        $command->setApplication($shell);
        $tester = new CommandTester($command);
        $tester->execute($args);
        $this->assertEquals('', $tester->getDisplay());
    }

    public function executeThis()
    {
        $throw = 'throw \Psy\Exception\ThrowUpException::fromThrowable';

        return [
            [[], false, $throw . '($_e);'],

            [['exception' => '$ex'], false, $throw . '($ex);'],
            [['exception' => 'getException()'], false, $throw . '(getException());'],
            [['exception' => 'new \\Exception("WAT")'], false, $throw . '(new \\Exception("WAT"));'],

            [['exception' => '\'some string\''], false, $throw . '(new \\Exception(\'some string\'));'],
            [['exception' => '"WHEEEEEEE!"'], false, $throw . '(new \\Exception("WHEEEEEEE!"));'],

            // Everything should work with or without semicolons.
            [['exception' => '$ex;'], false, $throw . '($ex);'],
            [['exception' => '"WHEEEEEEE!";'], false, $throw . '(new \\Exception("WHEEEEEEE!"));'],

            // Don't add as silent code if we've already got code.
            [[], true, $throw . '($_e);', false],
            [['exception' => 'getException()'], true, $throw . '(getException());', false],
            [['exception' => '\'some string\''], true, $throw . '(new \\Exception(\'some string\'));', false],
        ];
    }

    /**
     * @expectedException \InvalidArgumentException
     * @expectedExceptionMessage No idea how to throw this
     */
    public function testMultipleArgsThrowsException()
    {
        $command = new ThrowUpCommand();
        $command->setApplication(new Shell());
        $tester = new CommandTester($command);
        $tester->execute(['exception' => 'foo(); bar()']);
    }

    /**
     * @expectedException \PhpParser\Error
     * @expectedExceptionMessage Syntax error, unexpected ')' on line 1
     */
    public function testParseErrorThrowsException()
    {
        $command = new ThrowUpCommand();
        $command->setApplication(new Shell());
        $tester = new CommandTester($command);
        $tester->execute(['exception' => 'foo)']);
    }
}