1<?php 2/** 3 * Unit tests for HTML_QuickForm2 package 4 * 5 * PHP version 5 6 * 7 * LICENSE 8 * 9 * This source file is subject to BSD 3-Clause License that is bundled 10 * with this package in the file LICENSE and available at the URL 11 * https://raw.githubusercontent.com/pear/HTML_QuickForm2/trunk/docs/LICENSE 12 * 13 * @category HTML 14 * @package HTML_QuickForm2 15 * @author Alexey Borzov <avb@php.net> 16 * @author Bertrand Mansion <golgote@mamasam.com> 17 * @copyright 2006-2021 Alexey Borzov <avb@php.net>, Bertrand Mansion <golgote@mamasam.com> 18 * @license https://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License 19 * @link https://pear.php.net/package/HTML_QuickForm2 20 */ 21 22/** Sets up includes */ 23require_once dirname(dirname(dirname(__DIR__))) . '/TestHelper.php'; 24 25/** 26 * Unit test for HTML_QuickForm2_Controller_Action_Display class 27 */ 28class HTML_QuickForm2_Controller_Action_DisplayTest 29 extends PHPUnit_Framework_TestCase 30{ 31 /** 32 * Do not allow displaying a wizard page if preceding page(s) are not valid 33 * 34 * @link http://pear.php.net/bugs/bug.php?id=2323 35 */ 36 public function testBug2323() 37 { 38 $pageFirst = $this->getMockBuilder('HTML_QuickForm2_Controller_Page') 39 ->setMethods(['populateForm']) 40 ->setConstructorArgs([new HTML_QuickForm2('first')]) 41 ->getMock(); 42 $mockJump = $this->getMockBuilder('HTML_QuickForm2_Controller_Action') 43 ->setMethods(['perform']) 44 ->getMock(); 45 $mockJump->expects($this->once())->method('perform') 46 ->will($this->returnValue('jump to first')); 47 $pageFirst->addHandler('jump', $mockJump); 48 49 $pageSecond = $this->getMockBuilder('HTML_QuickForm2_Controller_Page') 50 ->setMethods(['populateForm']) 51 ->setConstructorArgs([new HTML_QuickForm2('second')]) 52 ->getMock(); 53 $mockDisplay = $this->getMockBuilder('HTML_QuickForm2_Controller_Action_Display') 54 ->setMethods(['renderForm']) 55 ->getMock(); 56 $mockDisplay->expects($this->never())->method('renderForm'); 57 $pageSecond->addHandler('display', $mockDisplay); 58 59 $controller = new HTML_QuickForm2_Controller('bug2323', true); 60 $controller->addPage($pageFirst); 61 $controller->addPage($pageSecond); 62 63 $this->assertEquals('jump to first', $pageSecond->handle('display')); 64 } 65 66 public function testLoadFromSessionContainerOnDisplay() 67 { 68 $mockForm = $this->getMockBuilder('HTML_QuickForm2') 69 ->setMethods(['validate']) 70 ->setConstructorArgs(['load']) 71 ->getMock(); 72 $foo = $mockForm->addElement('text', 'foo'); 73 $mockForm->expects($this->once())->method('validate') 74 ->will($this->returnValue(false)); 75 $mockPage = $this->getMockBuilder('HTML_QuickForm2_Controller_Page') 76 ->setMethods(['populateForm']) 77 ->setConstructorArgs([$mockForm]) 78 ->getMock(); 79 $mockPage->expects($this->once())->method('populateForm'); 80 $mockDisplay = $this->getMockBuilder('HTML_QuickForm2_Controller_Action_Display') 81 ->setMethods(['renderForm']) 82 ->getMock(); 83 $mockDisplay->expects($this->once())->method('renderForm') 84 ->will($this->returnValue('a form')); 85 $mockPage->addHandler('display', $mockDisplay); 86 87 $controller = new HTML_QuickForm2_Controller('loadValues'); 88 $controller->addPage($mockPage); 89 $controller->getSessionContainer()->storeValues('load', [ 90 'foo' => 'bar' 91 ]); 92 $controller->getSessionContainer()->storeValidationStatus('load', false); 93 94 $this->assertEquals('a form', $mockPage->handle('display')); 95 $this->assertEquals('bar', $foo->getValue()); 96 } 97 98 public function testNoLoadFromSessionContainerOnOtherActions() 99 { 100 $mockForm = $this->getMockBuilder('HTML_QuickForm2') 101 ->setMethods(['validate']) 102 ->setConstructorArgs(['noload']) 103 ->getMock(); 104 $foo = $mockForm->addElement('text', 'foo'); 105 $mockForm->expects($this->never())->method('validate'); 106 $mockPage = $this->getMockBuilder('HTML_QuickForm2_Controller_Page') 107 ->setMethods(['populateForm']) 108 ->setConstructorArgs([$mockForm]) 109 ->getMock(); 110 $mockDisplay = $this->getMockBuilder('HTML_QuickForm2_Controller_Action_Display') 111 ->setMethods(['renderForm']) 112 ->getMock(); 113 $mockDisplay->expects($this->once())->method('renderForm') 114 ->will($this->returnValue('a form')); 115 $mockPage->addHandler('display', $mockDisplay); 116 117 $_REQUEST = [ 118 $mockPage->getButtonName('submit') => 'Yes, submit!' 119 ]; 120 $controller = new HTML_QuickForm2_Controller('noLoadValues'); 121 $controller->addPage($mockPage); 122 $controller->getSessionContainer()->storeValues('noload', [ 123 'foo' => 'bar' 124 ]); 125 $controller->getSessionContainer()->storeValidationStatus('noload', false); 126 $controller->addDataSource(new HTML_QuickForm2_DataSource_Array([ 127 'foo' => 'quux' 128 ])); 129 130 $this->assertEquals('a form', $mockPage->handle('display')); 131 $this->assertEquals('quux', $foo->getValue()); 132 } 133} 134?>