| 
<?php
 /*
 * This file is part of the Jaguar package.
 *
 * (c) Hyyan Abo Fakher <[email protected]>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
 
 namespace Jaguar\Tests;
 
 use Jaguar\Tests\Mock\CanvasMock;
 use Jaguar\Dimension;
 use Jaguar\Color\RGBColor;
 
 abstract class AbstractCanvasTest extends JaguarTestCase
 {
 
 /**
 * @expectedException \InvalidArgumentException
 */
 public function testSetHandlerThrowInvalidArgumentException()
 {
 $this->getCanvas()->setHandler('invalid gd resource');
 }
 
 public function testSetHandlerCanConvertPallete()
 {
 $c = $this->getCanvas()->fromFile($this->getPalleteFile());
 $this->assertTrue($c->isTrueColor());
 }
 
 /**
 * Canvas sonstrcutor source argument provider
 *
 * @return array
 */
 public function sourceProvider()
 {
 return array(
 array($this->getCanvas()),
 array($this->getCanvasFile()),
 array(new Dimension(100, 100))
 );
 }
 
 /**
 * @dataProvider sourceProvider
 *
 * @param mixed $source
 */
 public function testCanvasconstructorSourceArgument($source)
 {
 $class = get_class($this->getCanvas());
 new $class($source);
 }
 
 /**
 * @expectedException \Jaguar\Exception\CanvasException
 */
 public function testAlphaBlendingThrowCanvasException()
 {
 $c = new CanvasMock();
 $c->alphaBlending(true);
 }
 
 public function testAlphaBlending()
 {
 $c = $this->getCanvas();
 $this->assertSame($c, $c->alphaBlending(true));
 $this->assertSame($c, $c->alphaBlending(false));
 }
 
 public function testGetCopy()
 {
 $c = $this->getCanvas();
 $copy = $c->getCopy();
 
 $this->assertInstanceOf(get_class($c), $copy);
 $this->assertNotSame($c, $copy);
 $this->assertNotSame($c->getHandler(), $copy->getHandler());
 $this->assertTrue($c->getDimension()->equals($copy->getDimension()));
 }
 
 /**
 * @expectedException \Jaguar\Exception\InvalidDimensionException
 */
 public function testCreateInvalidDimensionException()
 {
 $this->getCanvas()->create(new Dimension(0, 0));
 }
 
 /**
 * @expectedException \Jaguar\Exception\CanvasCreationException
 */
 public function testCreateThrowCanvasCreationException()
 {
 $this->getCanvas()->create(new Dimension(
 500000000000
 , 5000000000000
 ));
 }
 
 /**
 * @expectedException \Jaguar\Exception\CanvasCreationException
 */
 public function testFromStringThrowCanvasException()
 {
 $this->getCanvas()->fromString('Invalid Canvas String');
 }
 
 public function testFromString()
 {
 $phpRules = base64_decode(
 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl'
 . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr'
 . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r'
 . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg=='
 );
 
 $c = $this->getCanvas()->fromString($phpRules);
 
 $this->assertTrue($c->isHandlerSet());
 $this->assertGreaterThan(0, $c->getWidth());
 $this->assertGreaterThan(0, $c->getHeight());
 }
 
 /**
 * @expectedException \InvalidArgumentException
 */
 public function testFromFileThrowInvalidArgumentException()
 {
 $this->getCanvas()->fromFile('non readable file');
 }
 
 /**
 * @expectedException \Jaguar\Exception\CanvasCreationException
 */
 public function testFromFileThrowCanvasCreationException()
 {
 $this->getCanvas()->fromFile($this->getInvalidCanvasFile());
 }
 
 public function testFromFile()
 {
 $c = $this->getCanvas()->fromFile($this->getCanvasFile());
 $this->assertTrue($c->isHandlerSet());
 }
 
 public function testFromCanvas()
 {
 $canvas = $this->getCanvas();
 $copy = $canvas->getCopy();
 
 $canvas->fromCanvas($copy);
 
 $this->assertTrue($canvas->isHandlerSet());
 $this->assertTrue($copy->isHandlerSet());
 $this->assertNotSame($canvas->getHandler(), $copy->getHandler());
 
 $copy->destroy();
 $this->assertNull($copy->getHandler());
 }
 
 /**
 * @expectedException \Jaguar\Exception\CanvasException
 */
 public function testFillThrowCanvasException()
 {
 $c = new CanvasMock();
 $c->fill(new RGBColor());
 }
 
 /**
 * @expectedException \Jaguar\Exception\CanvasException
 */
 public function testPasteThrowCanvasException()
 {
 $c = new CanvasMock();
 $c2 = new CanvasMock();
 
 $c->paste($c2);
 }
 
 /**
 * @expectedException \Jaguar\Exception\CanvasEmptyException
 */
 public function testPasteThrowCanvasEmptyExceptionWhenSrcHandlerEmpty()
 {
 $this->getCanvas()->paste(new Mock\EmptyCanvasMock());
 }
 
 /**
 * @expectedException \Jaguar\Exception\CanvasOutputException
 */
 public function testSaveThrowResourceOutputException()
 {
 $this->getCanvas()->save('"////\\\\"');
 }
 
 /**
 * @expectedException \Jaguar\Exception\CanvasEmptyException
 */
 public function testSaveAndCanvasEmptyException()
 {
 $c = new Mock\EmptyCanvasMock();
 $c->save('will no be saved');
 }
 
 public function testSave()
 {
 $path = sys_get_temp_dir() . '/tesSave.canvas';
 
 if (file_exists($path)) {
 unlink($path);
 }
 
 $this->getCanvas()->save($path);
 
 $this->assertFileExists($path);
 
 unlink($path);
 }
 
 public function testToString()
 {
 $this->assertInternalType('string', (string) $this->getCanvas());
 }
 
 /**
 * @expectedException \Jaguar\Exception\CanvasDestroyingException
 */
 public function testDestroyThrowCanvasDestroyingException()
 {
 $canvas = new CanvasMock();
 $canvas->destroy();
 }
 
 public function testDestory()
 {
 $canvas = $this->getCanvas();
 $canvas->destroy();
 
 $this->assertFalse($canvas->isHandlerSet());
 }
 
 /**
 * @dataProvider getColorAtCoordinatesProvider
 * @expectedException \Jaguar\Exception\InvalidCoordinateException
 */
 public function testGetColorAtThrowInvalidCoordinateException(\Jaguar\Coordinate $coordinate)
 {
 $canvas = new CanvasMock();
 $canvas->getColorAt($coordinate);
 }
 
 /**
 * Coordinate provider for testGetColorAtThrowInvalidCoordinateException
 * @return type
 */
 public function getColorAtCoordinatesProvider()
 {
 return array(
 array(new \Jaguar\Coordinate(1000, 1000)),
 array(new \Jaguar\Coordinate(-1000, -1000))
 );
 }
 
 /**
 * @expectedException \Jaguar\Exception\CanvasEmptyException
 */
 public function testGetColorAtThrowCanvasEmptException()
 {
 $canvas = new Mock\EmptyCanvasMock();
 $canvas->getColorAt(new \Jaguar\Coordinate());
 }
 
 public function testGetColorAt()
 {
 $canvas = $this->getCanvas();
 $this->assertTrue(
 is_int($canvas->getColorAt(new \Jaguar\Coordinate))
 );
 }
 
 public function testGetPixel()
 {
 $canvas = $this->getCanvas();
 $this->assertInstanceOf(
 '\Jaguar\Drawable\Pixel'
 , $canvas->getPixel(new \Jaguar\Coordinate)
 );
 }
 
 /**
 * Get canvas
 * @return \Jaguar\CanvasInterface
 */
 abstract protected function getCanvas();
 
 /**
 * Get pallete file to test if pallete can be converted to truecolor
 * @return string file's path
 */
 abstract protected function getPalleteFile();
 
 /**
 * Get normal canvas file to test <tt>fromFile</tt> method
 * @return string file's path
 */
 abstract protected function getCanvasFile();
 
 /**
 * Get invalid(damaged) file to test that fromFile can fail on this kind
 * of files
 *
 * @return string file's path
 */
 abstract protected function getInvalidCanvasFile();
 }
 
 |