| 
<?phpuse movemegif\data\Formatter;
 use movemegif\domain\StringCanvas;
 use movemegif\GifBuilder;
 
 require_once __DIR__ . '/../../php/autoloader.php';
 
 /**
 * Tests global color table shared by two frames.
 * Tests local color tables.
 * Tests a color table with more than 4 (8) entries.
 * Tests duration.
 * Integration test that builds complete GIF.
 *
 * @author Patrick van Bergen
 */
 class ColorTableTest extends PHPUnit_Framework_TestCase
 {
 public function testGlobalColorTable()
 {
 $indexString = "
 1 1 2 2
 1 3 3 2
 2 3 3 1
 2 2 1 1
 ";
 
 $index2color = array(
 '1' => 0xFF0000,
 '2' => 0xFFFFFF,
 '3' => 0x000000,
 );
 
 $builder = new GifBuilder(4, 4);
 
 $builder->addFrame()
 ->setCanvas(new StringCanvas(4, 4, $indexString, $index2color))
 ->setUseGlobalColorTable()
 ->setDuration(50);
 
 $indexString = "
 4 4 5 5
 4 3 3 5
 5 3 3 4
 5 5 4 4
 ";
 
 $index2color = array(
 '3' => 0x000000,
 '4' => 0x0000FF,
 '5' => 0x808080,
 );
 
 $builder->addFrame()
 ->setCanvas(new StringCanvas(4, 4, $indexString, $index2color))
 ->setUseGlobalColorTable()
 ->setDuration(50);
 
 $contents = $builder->getContents();
 
 $actual = Formatter::byteString2hexString($contents);
 $expected = "47 49 46 38 39 61 04 00 04 00 92 00 00 FF 00 00 FF FF FF 00 00 00 00 00 FF 80 80 80 00 00 00 00 00 00 00 00 00 21 F9 04 00 32 00 00 00 2C 00 00 00 00 04 00 04 00 00 02 07 04 12 20 82 7B 09 0A 00 21 F9 04 00 32 00 00 00 2C 00 00 00 00 04 00 04 00 00 03 08 38 43 34 22 EC AD 36 12 00 21 FE 16 43 72 65 61 74 65 64 20 77 69 74 68 20 6D 6F 76 65 6D 65 67 69 66 00 3B";
 
 $this->assertEquals($expected, $actual);
 }
 
 public function testLocalColorTables()
 {
 $indexString = "
 1 1 2 2
 1 3 3 2
 2 3 3 1
 2 2 1 1
 ";
 
 $index2color = array(
 '1' => 0xFF0000,
 '2' => 0xFFFFFF,
 '3' => 0x000000,
 );
 
 $builder = new GifBuilder(4, 4);
 
 $builder->addFrame()
 ->setCanvas(new StringCanvas(4, 4, $indexString, $index2color))
 ->setUseLocalColorTable()
 ->setDuration(50);
 
 $indexString = "
 4 4 5 5
 4 3 3 5
 5 3 3 4
 5 5 4 4
 ";
 
 $index2color = array(
 '3' => 0x000000,
 '4' => 0x0000FF,
 '5' => 0x808080,
 );
 
 $builder->addFrame()
 ->setCanvas(new StringCanvas(4, 4, $indexString, $index2color))
 ->setUseLocalColorTable()
 ->setDuration(50);
 
 $contents = $builder->getContents();
 
 $actual = Formatter::byteString2hexString($contents);
 $expected = "47 49 46 38 39 61 04 00 04 00 91 00 00 00 00 00 00 00 00 00 00 00 00 00 00 21 F9 04 00 32 00 00 00 2C 00 00 00 00 04 00 04 00 81 FF 00 00 FF FF FF 00 00 00 00 00 00 02 07 04 12 20 82 7B 09 0A 00 21 F9 04 00 32 00 00 00 2C 00 00 00 00 04 00 04 00 81 00 00 FF 80 80 80 00 00 00 00 00 00 02 07 04 12 20 82 7B 09 0A 00 21 FE 16 43 72 65 61 74 65 64 20 77 69 74 68 20 6D 6F 76 65 6D 65 67 69 66 00 3B";
 
 $this->assertEquals($expected, $actual);
 }
 }
 |