From 61b39bcb249e0667e68f7585ba2c0c02ec14c01f Mon Sep 17 00:00:00 2001 From: Piotr Date: Tue, 5 Mar 2013 14:26:04 +0100 Subject: [PATCH] tests for JDocumentImage --- .../document/image/JDocumentImageTest.php | 157 ++++++++++++++++++ .../unit/joomla/document/image/logo.gif | Bin 0 -> 3768 bytes .../unit/joomla/document/image/logo.jpeg | Bin 0 -> 5730 bytes .../unit/joomla/document/image/logo.jpg | Bin 0 -> 5730 bytes .../unit/joomla/document/image/logo.png | Bin 0 -> 7197 bytes 5 files changed, 157 insertions(+) create mode 100644 tests/suites/unit/joomla/document/image/JDocumentImageTest.php create mode 100644 tests/suites/unit/joomla/document/image/logo.gif create mode 100644 tests/suites/unit/joomla/document/image/logo.jpeg create mode 100644 tests/suites/unit/joomla/document/image/logo.jpg create mode 100644 tests/suites/unit/joomla/document/image/logo.png diff --git a/tests/suites/unit/joomla/document/image/JDocumentImageTest.php b/tests/suites/unit/joomla/document/image/JDocumentImageTest.php new file mode 100644 index 0000000000..5f586dd91d --- /dev/null +++ b/tests/suites/unit/joomla/document/image/JDocumentImageTest.php @@ -0,0 +1,157 @@ +saveFactoryState(); + + require_once JPATH_PLATFORM . '/joomla/factory.php'; + + $app = $this->getMockApplication(); + + JFactory::$application = $app; + + $this->object = new JDocumentImage; + } + + /** + * Tears down the fixture, for example, closes a network connection. + * This method is called after a test is executed. + * + * @access protected + * + * @return void + */ + protected function tearDown() + { + $this->restoreFactoryState(); + + parent::teardown(); + } + + /** + * Tests the JDocumentImage::__construct method. + * + * @return void + * + * @covers JDocumentImage::__construct + */ + public function test__construct($options = array()) + { + $documentImage = new JDocumentImage; + + $this->assertThat( + $documentImage->_mime, + $this->equalTo('image/png'), + 'JDocumentImage::__construct: Default Mime does not match' + ); + + $this->assertThat( + $documentImage->_type, + $this->equalTo('image'), + 'JDocumentImage::__construct: Default Type does not match' + ); + } + + /** + * Test... + * + * @covers JDocumentImage::render + * + * @return void + */ + public function testRender() + { + JResponse::clearHeaders(); + + $testFiles = array( + 'jpg' => array( + 'file' => 'logo.jpg', + 'mime' => 'image/jpeg' + ), + 'jpeg' => array( + 'file' => 'logo.jpeg', + 'mime' => 'image/jpeg' + ), + 'gif' => array( + 'file' => 'logo.gif', + 'mime' => 'image/gif' + ), + 'png' => array( + 'file' => 'logo.png', + 'mime' => 'image/png', + ), + 'bmp' => array( + 'file' => 'logo.png', + 'mime' => 'image/png' + ) + ); + + foreach ($testFiles as $type => $info) + { + // Set type + JFactory::$application->input->set('type', $type); + + $buffer = file_get_contents(__DIR__ . '/' . $info['file']); + + // Render + $this->object->setBuffer($buffer); + $returnBuffer = $this->object->render(); + + // Check buffer return + $this->assertThat( + $returnBuffer, + $this->equalTo($buffer), + 'JDocumentImage::render: Buffer does not match' + ); + + // Check Mime + $this->assertThat( + $this->object->_mime, + $this->equalTo($info['mime']), + 'JDocumentImage::render: Mime does not match' + ); + } + + // Chek Charset + $this->assertThat( + $this->object->_charset, + $this->isNull(), + 'JDocumentImage::render Charset is not null' + ); + } +} diff --git a/tests/suites/unit/joomla/document/image/logo.gif b/tests/suites/unit/joomla/document/image/logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..69f46b52bdd0f9e73428f78ec2b9ca737c2edcb4 GIT binary patch literal 3768 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 Dm-es- literal 0 HcmV?d00001 diff --git a/tests/suites/unit/joomla/document/image/logo.jpeg b/tests/suites/unit/joomla/document/image/logo.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..916a87fe2a0c1fbe3db38aa12960c7db6156d142 GIT binary patch literal 5730 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