response = new Zend_Controller_Response_Http(); $this->response->headersSentThrowsException = false; $front = Zend_Controller_Front::getInstance(); $front->resetInstance(); $front->setResponse($this->response); $this->viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer(); Zend_Controller_Action_HelperBroker::addHelper($this->viewRenderer); $this->helper = new Zend_Controller_Action_Helper_Json(); $this->helper->suppressExit = true; } /** * 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']) { $found = true; $value = $header['value']; break; } } $this->assertTrue($found); $this->assertEquals('application/json', $value); } public function testJsonHelperSetsResponseHeader() { $this->helper->encodeJson('foobar'); $this->verifyJsonHeader(); } public function testJsonHelperReturnsJsonEncodedString() { $data = $this->helper->encodeJson(array('foobar')); $this->assertTrue(is_string($data)); $this->assertEquals(array('foobar'), Zend_Json::decode($data)); } public function testJsonHelperDisablesLayoutsAndViewRendererByDefault() { $layout = Zend_Layout::startMvc(); $this->assertTrue($layout->isEnabled()); $this->assertFalse($this->viewRenderer->getNoRender()); $this->testJsonHelperReturnsJsonEncodedString(); $this->assertFalse($layout->isEnabled()); $this->assertTrue($this->viewRenderer->getNoRender()); } public function testJsonHelperDoesNotDisableLayoutsAndViewRendererWhenKeepLayoutFlagTrue() { $layout = Zend_Layout::startMvc(); $this->assertTrue($layout->isEnabled()); $this->assertFalse($this->viewRenderer->getNoRender()); $data = $this->helper->encodeJson(array('foobar'), true); $this->assertTrue($layout->isEnabled()); $this->assertFalse($this->viewRenderer->getNoRender()); } public function testSendJsonSendsResponse() { $this->helper->sendJson(array('foobar')); $this->verifyJsonHeader(); $response = $this->response->getBody(); $this->assertSame(array('foobar'), Zend_Json::decode($response)); } public function testDirectProxiesToSendJsonByDefault() { $this->helper->direct(array('foobar')); $this->verifyJsonHeader(); $response = $this->response->getBody(); $this->assertSame(array('foobar'), Zend_Json::decode($response)); } public function testCanPreventDirectSendingResponse() { $data = $this->helper->direct(array('foobar'), false); $this->assertSame(array('foobar'), Zend_Json::decode($data)); $this->verifyJsonHeader(); $response = $this->response->getBody(); $this->assertTrue(empty($response)); } public function testCanKeepLayoutsWhenUsingDirect() { $layout = Zend_Layout::startMvc(); $data = $this->helper->direct(array('foobar'), false, true); $this->assertTrue($layout->isEnabled()); $this->assertFalse($this->viewRenderer->getNoRender()); } } /** * Zend_Layout subclass to allow resetting MVC instance */ class Zend_Controller_Action_Helper_JsonTest_Layout extends Zend_Layout { public static function resetMvcInstance() { self::$_mvcInstance = null; } } // Call Zend_Controller_Action_Helper_JsonTest::main() if this source file is executed directly. if (PHPUnit_MAIN_METHOD == "Zend_Controller_Action_Helper_JsonTest::main") { Zend_Controller_Action_Helper_JsonTest::main(); }