response = new Zend_Controller_Response_Http(); $this->response->headersSentThrowsException = false; $front = Zend_Controller_Front::getInstance(); $front->resetInstance(); $front->setResponse($this->response); $this->helper = new Zend_View_Helper_Json(); } /** * Tears down the fixture, for example, close a network connection. * This method is called after a test is executed. * * @return void */ public function tearDown() { } public function verifyJsonHeader() { $headers = $this->response->getHeaders(); $found = false; foreach ($headers as $header) { if ('Content-Type' == $header['name']) { if ($found) { $this->fail('Content-Type header has been set twice.'); return null; } $found = true; $value = $header['value']; } } $this->assertTrue($found); $this->assertEquals('application/json', $value); } public function testJsonHelperSetsResponseHeader() { $this->helper->json('foobar'); $this->verifyJsonHeader(); } /** * @group ZF-10675 */ public function testJsonHelperReplacesContentTypeReponseHeaderIfAlreadySet() { $this->response->setHeader('Content-Type', 'text/html'); $this->helper->json('foobar'); $this->verifyJsonHeader(); } public function testJsonHelperReturnsJsonEncodedString() { $data = $this->helper->json(array('foobar')); $this->assertTrue(is_string($data)); $this->assertEquals(array('foobar'), Zend_Json::decode($data)); } public function testJsonHelperDisablesLayoutsByDefault() { $layout = Zend_Layout::startMvc(); $this->assertTrue($layout->isEnabled()); $this->testJsonHelperReturnsJsonEncodedString(); $this->assertFalse($layout->isEnabled()); } public function testJsonHelperDoesNotDisableLayoutsWhenKeepLayoutFlagTrue() { $layout = Zend_Layout::startMvc(); $this->assertTrue($layout->isEnabled()); $data = $this->helper->json(array('foobar'), true); $this->assertTrue($layout->isEnabled()); } /** * @group ZF-12397 */ public function testJsonHelperWithKeepLayoutAsArray() { $layout = Zend_Layout::startMvc(); $this->assertTrue($layout->isEnabled()); $data = $this->helper->json( array( 'foobar', ), array( 'keepLayouts' => true, 'encodeData' => false, ) ); $this->assertTrue($layout->isEnabled()); $this->assertSame(array('foobar'), $data); } /** * @group ZF-10977 */ public function testJsonHelperWillAcceptPreencodedJson() { $data = $this->helper->json(Zend_Json::encode(array('f')), false, false); $this->assertEquals('["f"]', $data); } /** * @group ZF-10977 */ public function testJsonHelperWillSendHeadersWhenProvidedWithPreencodedJson() { $data = $this->helper->json(Zend_Json::encode(array('f')), false, false); $this->verifyJsonHeader(); } } /** * Zend_Layout subclass to allow resetting MVC instance */ class Zend_View_Helper_JsonTest_Layout extends Zend_Layout { public static function resetMvcInstance() { self::$_mvcInstance = null; } } // Call Zend_View_Helper_JsonTest::main() if this source file is executed directly. if (PHPUnit_MAIN_METHOD == "Zend_View_Helper_JsonTest::main") { Zend_View_Helper_JsonTest::main(); }