185 lines
5.2 KiB
PHP
185 lines
5.2 KiB
PHP
|
<?php
|
||
|
use JakubOnderka\PhpConsoleColor\ConsoleColor;
|
||
|
|
||
|
class ConsoleColorWithForceSupport extends ConsoleColor
|
||
|
{
|
||
|
private $isSupportedForce = true;
|
||
|
|
||
|
private $are256ColorsSupportedForce = true;
|
||
|
|
||
|
public function setIsSupported($isSupported)
|
||
|
{
|
||
|
$this->isSupportedForce = $isSupported;
|
||
|
}
|
||
|
|
||
|
public function isSupported()
|
||
|
{
|
||
|
return $this->isSupportedForce;
|
||
|
}
|
||
|
|
||
|
public function setAre256ColorsSupported($are256ColorsSupported)
|
||
|
{
|
||
|
$this->are256ColorsSupportedForce = $are256ColorsSupported;
|
||
|
}
|
||
|
|
||
|
public function are256ColorsSupported()
|
||
|
{
|
||
|
return $this->are256ColorsSupportedForce;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class ConsoleColorTest extends \PHPUnit_Framework_TestCase
|
||
|
{
|
||
|
/** @var ConsoleColorWithForceSupport */
|
||
|
private $uut;
|
||
|
|
||
|
protected function setUp()
|
||
|
{
|
||
|
$this->uut = new ConsoleColorWithForceSupport();
|
||
|
}
|
||
|
|
||
|
public function testNone()
|
||
|
{
|
||
|
$output = $this->uut->apply('none', 'text');
|
||
|
$this->assertEquals("text", $output);
|
||
|
}
|
||
|
|
||
|
public function testBold()
|
||
|
{
|
||
|
$output = $this->uut->apply('bold', 'text');
|
||
|
$this->assertEquals("\033[1mtext\033[0m", $output);
|
||
|
}
|
||
|
|
||
|
public function testBoldColorsAreNotSupported()
|
||
|
{
|
||
|
$this->uut->setIsSupported(false);
|
||
|
|
||
|
$output = $this->uut->apply('bold', 'text');
|
||
|
$this->assertEquals("text", $output);
|
||
|
}
|
||
|
|
||
|
public function testBoldColorsAreNotSupportedButAreForced()
|
||
|
{
|
||
|
$this->uut->setIsSupported(false);
|
||
|
$this->uut->setForceStyle(true);
|
||
|
|
||
|
$output = $this->uut->apply('bold', 'text');
|
||
|
$this->assertEquals("\033[1mtext\033[0m", $output);
|
||
|
}
|
||
|
|
||
|
public function testDark()
|
||
|
{
|
||
|
$output = $this->uut->apply('dark', 'text');
|
||
|
$this->assertEquals("\033[2mtext\033[0m", $output);
|
||
|
}
|
||
|
|
||
|
public function testBoldAndDark()
|
||
|
{
|
||
|
$output = $this->uut->apply(array('bold', 'dark'), 'text');
|
||
|
$this->assertEquals("\033[1;2mtext\033[0m", $output);
|
||
|
}
|
||
|
|
||
|
public function test256ColorForeground()
|
||
|
{
|
||
|
$output = $this->uut->apply('color_255', 'text');
|
||
|
$this->assertEquals("\033[38;5;255mtext\033[0m", $output);
|
||
|
}
|
||
|
|
||
|
public function test256ColorWithoutSupport()
|
||
|
{
|
||
|
$this->uut->setAre256ColorsSupported(false);
|
||
|
|
||
|
$output = $this->uut->apply('color_255', 'text');
|
||
|
$this->assertEquals("text", $output);
|
||
|
}
|
||
|
|
||
|
public function test256ColorBackground()
|
||
|
{
|
||
|
$output = $this->uut->apply('bg_color_255', 'text');
|
||
|
$this->assertEquals("\033[48;5;255mtext\033[0m", $output);
|
||
|
}
|
||
|
|
||
|
public function test256ColorForegroundAndBackground()
|
||
|
{
|
||
|
$output = $this->uut->apply(array('color_200', 'bg_color_255'), 'text');
|
||
|
$this->assertEquals("\033[38;5;200;48;5;255mtext\033[0m", $output);
|
||
|
}
|
||
|
|
||
|
public function testSetOwnTheme()
|
||
|
{
|
||
|
$this->uut->setThemes(array('bold_dark' => array('bold', 'dark')));
|
||
|
$output = $this->uut->apply(array('bold_dark'), 'text');
|
||
|
$this->assertEquals("\033[1;2mtext\033[0m", $output);
|
||
|
}
|
||
|
|
||
|
public function testAddOwnTheme()
|
||
|
{
|
||
|
$this->uut->addTheme('bold_own', 'bold');
|
||
|
$output = $this->uut->apply(array('bold_own'), 'text');
|
||
|
$this->assertEquals("\033[1mtext\033[0m", $output);
|
||
|
}
|
||
|
|
||
|
public function testAddOwnThemeArray()
|
||
|
{
|
||
|
$this->uut->addTheme('bold_dark', array('bold', 'dark'));
|
||
|
$output = $this->uut->apply(array('bold_dark'), 'text');
|
||
|
$this->assertEquals("\033[1;2mtext\033[0m", $output);
|
||
|
}
|
||
|
|
||
|
public function testOwnWithStyle()
|
||
|
{
|
||
|
$this->uut->addTheme('bold_dark', array('bold', 'dark'));
|
||
|
$output = $this->uut->apply(array('bold_dark', 'italic'), 'text');
|
||
|
$this->assertEquals("\033[1;2;3mtext\033[0m", $output);
|
||
|
}
|
||
|
|
||
|
public function testHasAndRemoveTheme()
|
||
|
{
|
||
|
$this->assertFalse($this->uut->hasTheme('bold_dark'));
|
||
|
|
||
|
$this->uut->addTheme('bold_dark', array('bold', 'dark'));
|
||
|
$this->assertTrue($this->uut->hasTheme('bold_dark'));
|
||
|
|
||
|
$this->uut->removeTheme('bold_dark');
|
||
|
$this->assertFalse($this->uut->hasTheme('bold_dark'));
|
||
|
}
|
||
|
|
||
|
public function testApplyInvalidArgument()
|
||
|
{
|
||
|
$this->setExpectedException('\InvalidArgumentException');
|
||
|
$this->uut->apply(new stdClass(), 'text');
|
||
|
}
|
||
|
|
||
|
public function testApplyInvalidStyleName()
|
||
|
{
|
||
|
$this->setExpectedException('\JakubOnderka\PhpConsoleColor\InvalidStyleException');
|
||
|
$this->uut->apply('invalid', 'text');
|
||
|
}
|
||
|
|
||
|
public function testApplyInvalid256Color()
|
||
|
{
|
||
|
$this->setExpectedException('\JakubOnderka\PhpConsoleColor\InvalidStyleException');
|
||
|
$this->uut->apply('color_2134', 'text');
|
||
|
}
|
||
|
|
||
|
public function testThemeInvalidStyle()
|
||
|
{
|
||
|
$this->setExpectedException('\JakubOnderka\PhpConsoleColor\InvalidStyleException');
|
||
|
$this->uut->addTheme('invalid', array('invalid'));
|
||
|
}
|
||
|
|
||
|
public function testForceStyle()
|
||
|
{
|
||
|
$this->assertFalse($this->uut->isStyleForced());
|
||
|
$this->uut->setForceStyle(true);
|
||
|
$this->assertTrue($this->uut->isStyleForced());
|
||
|
}
|
||
|
|
||
|
public function testGetPossibleStyles()
|
||
|
{
|
||
|
$this->assertInternalType('array', $this->uut->getPossibleStyles());
|
||
|
$this->assertNotEmpty($this->uut->getPossibleStyles());
|
||
|
}
|
||
|
}
|
||
|
|